.. This work is licensed under a Creative Commons Attribution 4.0 International License.
.. http://creativecommons.org/licenses/by/4.0
.. Copyright 2017 AT&T Intellectual Property.  All rights reserved.


ONAP Portal
===========
The ONAP Portal integrates different ONAP applications in one place.
The Portal platform provides common management services and
connectivity, while the applications run separately.

From the Portal, users access applications. Administrators
onboard and manage applications and widgets, and manage user access.

The Portal SDK for application developers includes bundled tools,
technologies, and built-in capabilities such as services, APIs,
and UI controls. Existing applications can migrate to the Portal
with the provided APIs and libraries.
See Portal SDK_.

.. _SDK: https://docs.onap.org/en/latest/submodules/portal.git/docs/tutorials/portal-sdk/index.html

Access the ONAP Portal
----------------------

Access the ONAP Portal using a browser such as Mozilla Firefox or
Google Chrome. The URL is dependent on a specific ONAP platform
deployment.

From the Portal, users access applications directly or by
function using the Manage menu.

.. figure:: onap-portal-home.png
   :width: 900 px
   :height: 600 px


Roles in the ONAP Portal
------------------------
The Portal displays different menus for the following roles:

* User

* Portal Administrator

* Application Administrator

* Governor

* Operator

Each application also defines a distinct set of user roles.
See Users.

See also
--------

* `Applications in the Portal <https://wiki.onap.org/x/h4sP>`_
