<?xml version="1.0" encoding="UTF-8"?>
<!--Arbortext, Inc., 1988-2015, v.4002-->
<!DOCTYPE pubsConcept PUBLIC "-//PTC//DTD PUBS DITA Concept//EN"
 "pubsConcept.dtd">
<?Pub UDT template _font?>
<?Pub UDT _bookmark _target?>
<?Pub Inc?>
<pubsConcept id="_ACL_concepts_30474" xml:lang="en"
xmlns:import="http://www.oberontech.com/import"
import:style="0_TopicSub"
import:map-object="2Heading_to_concept_in_conceptH1">
<title>Permissions</title>
<prolog>
<metadata><keywords>
<indexterm>permission<indexterm>described</indexterm></indexterm>
<indexterm>ACLs<indexterm>permission</indexterm></indexterm>
<indexterm>permission</indexterm>
<indexterm>ACLs<indexterm>permission<indexterm>inheritance</indexterm
></indexterm></indexterm>
<indexterm>permission<indexterm>ACLs<indexterm>inheritance</indexterm
></indexterm></indexterm>
<indexterm>ACLs<indexterm>Dev Path permissions</indexterm></indexterm>
<indexterm>dev path inheritance</indexterm>
<indexterm>permission<indexterm>inheritance<indexterm>dev path</indexterm
></indexterm></indexterm>
<indexterm>permission<indexterm>resolution</indexterm></indexterm>
<indexterm>resolution</indexterm>
<indexterm>ACLs<indexterm>permission<indexterm>resolution</indexterm
></indexterm><indexterm>resolution<indexterm>permission</indexterm
></indexterm></indexterm>
<indexterm>permission<indexterm>resolution</indexterm></indexterm>
<indexterm>resolution<indexterm>permission</indexterm></indexterm>
</keywords></metadata>
</prolog>
<pubsConbody>
<p>Permissions are a collection of pre-defined functionality and operations
that can be assigned to users granted access to certain workflow and
document, and configuration management tasks. The set of assigned
permissions determines each user’s access to the available functionality.
If a user is not granted the permission, they are not able to complete
the task.</p>
<p>All configuration management tasks, and certain workflow and document
tasks, require particular pre-defined permissions that may be either
allowed or denied to particular principals; groups and users. If a
principal is not granted the permission, they are not able to complete
the task. For example, checking out locked files requires the <codeph
import:style="Literal">FetchRevision</codeph> and <codeph
import:style="Literal">Lock</codeph> permissions.</p>
<p>It is also important to understand that the application you use
to administer ACLs also has an ACL itself to control who has access
to update the security permissions. The Authorization Administration
ACL is independent from the ACLs used for configuration management.
You can also create control ACLs for other ACLs as required.</p>
<p>By default, all permissions are shipped as enabled for a principal
group called <codeph import:style="Literal">everyone</codeph>.</p>
<p>For more information on available permissions, see <xref
format="dita" href="" keyref="_ACL_permissions_90509" scope="local"
>“Workflow and Document Permissions”</xref> and <xref format="dita"
href="" keyref="_ACL_permissions_23577" scope="local">“Configuration
Management Permissions”</xref>.</p>
<section id="_ACL_concepts_22813" import:style="0_TopicSub2"><title
>Permission Inheritance</title><p>In this access control system, permissions
are (by default) inherited from their parent ACL, whether that is
the <codeph import:style="Literal">mks:aa:mks</codeph> management
ACL, a product-level ACL (<codeph import:style="Literal">mks:im</codeph
>, <codeph import:style="Literal">mks:si</codeph>), or an ACL specific
to configuration management (for example, a project, subproject, or
member ACL).</p><p>The <ph conkeyref="text_variables/ProdName01"></ph
> server queries the ACL database for the user’s access permissions
working upwards through the ACL name space structure from the archive
ACL level to the top (global) level to determine whether the user
has the required permission to perform the requested operation.</p
><p>When a user performs an operation, the <ph
conkeyref="text_variables/ProdName01"></ph> server checks the ACLs
for appropriate permissions for the requesting user and specified
command. When checking permissions in the ACLs, two areas are checked:</p
><ul>
<li><p>principal type (user or group)</p></li>
<li><p>scope (archive, project, or global)</p></li>
</ul><p>When the <ph conkeyref="text_variables/ProdName01"></ph> server
checks the permissions, it first tries to find the most specific ACL
for the target user, and then searches for more general ACLs. The
following diagram shows the path the <ph
conkeyref="text_variables/ProdName01"></ph> server takes when checking
its permissions.</p><p><image href="../images/acl_permissionchecks.png"
width="2.5in"></image></p><p>The most specific type of permission
is an archive ACL with the principal defined as a user (section 1
in the diagram). After this, the server moves on to any archive ACLs
where the principal is defined as a group (section 2 in the diagram).
It then checks for any project permissions with the principal defined
as a user (section 3), and so on.</p></section>
<section id="_ACL_concepts_32498" import:style="0_TopicSub2"><title
>Permission Conditions</title><p>Permissions are always in one of
three conditions:</p><ul>
<li import:style="Bullet Bold"><p><codeph import:style="Literal">Allowed</codeph
></p><p import:style="Bullet Text">Principal is allowed to perform
the requested operation.</p></li>
<li import:style="Bullet Bold"><p><codeph import:style="Literal">Denied</codeph
></p><p import:style="Bullet Text">Principal is not allowed to perform
the requested operation.</p></li>
<li import:style="Bullet Bold"><p><codeph import:style="Literal">Cleared</codeph
></p><p import:style="Bullet Text">Effectively an unset permission
and considered as denied to the principal. A cleared permission can
still be explicitly allowed through another principal or through a
parent ACL.</p></li>
</ul><p>The server always uses the most specific permission it finds
in the ACL hierarchy. For example, the allowed and denied permissions
are more specific than a cleared permission.</p><p>It is important
to note the distinction between clearing and denying a permission.
Based on inheritance, an explicitly denied permission takes precedence,
even if that permission is allowed through another principal. When
you clear a permission, that permission can still be explicitly allowed
through another principal or through a parent ACL.</p><p>When performing
an ACL check, the <ph conkeyref="text_variables/ProdName01"></ph> server
searches for the existence of either an allowed or a denied permission
at each of the levels. Once this is found, the server stops checking
permissions and either performs the operation as requested by the
user (in the case of an allowed permission) or sends an appropriate
error message (in the case of a denied permission).</p><p>When configuring
your ACLs, you also have the option to clear a permission. If you
do not explicitly set a permission for an operation, the permission
is considered to be clear (or unspecified) by the <ph
conkeyref="text_variables/ProdName01"></ph> server. This allows you
to define permissions at various levels.</p><ul>
<li import:style="Bullet Bold"><p>Example</p><p
import:style="Bullet Text">You can globally allow all of your groups
the <codeph import:style="Literal">CheckIn</codeph> permission but
then deny <codeph import:style="Literal">CheckIn</codeph> for one
group for a specific project. This method allows you to open up your
allowed permission structure and then restrict permissions only on
certain levels. The same approach works in reverse where permissions
are restricted at a global level and then only granted on other levels
where needed.</p><p import:style="Bullet Text">If the <ph
conkeyref="text_variables/ProdName01"></ph> server finds both an allowed
and a denied permission at the same level, then the denied permission
takes precedence. For example, a user is a member of two groups that
are both listed in a project ACL. When the <ph
conkeyref="text_variables/ProdName04"></ph> checks the group principal
at the project level, it finds one group is allowed to perform the
operation while the other is denied. In this case, because a denied
permission takes precedence, the user is denied permission to perform
the operation.</p></li>
</ul></section>
<section id="_ACL_concepts_88150" import:style="0_TopicSub2"><title
>Dev Path Permissions</title><p>Using the <uicontrol import:style="GUI"
>Inherit Permissions</uicontrol> function, you can also enable or
disable permission inheritance for individual development path ACLs.
Settings on individual development path ACLs override the global <uicontrol
import:style="GUI">Dev Path Inheritance</uicontrol> setting for the
selected development path.</p><p>If you select a development path
ACL and set <uicontrol import:style="GUI">Inherit Permissions</uicontrol
> to true, the target development path ACL inherits its permissions
from the project ACL. If set to false, the selected development path
inherits its permissions from the top level <codeph
import:style="Literal">mks:si</codeph> ACL. For detailed procedures
on creating a development path ACL, see “Dev Path Permissions”.</p
><?Pub Caret 98?><p>When <uicontrol import:style="GUI">Inherit Permissions</uicontrol
> is set to true or when global <uicontrol import:style="GUI">Dev
Path Inheritance</uicontrol> is set to true, permissions are inherited
from the master project in the tree. If no ACLs are set in the master
project, permissions resolve to the top level <codeph
import:style="Literal">mks:si</codeph> ACL. Therefore, if no project
ACLs are set and permission inheritance is set to true, permissions
resolve to the top level <codeph import:style="Literal">mks:si</codeph
> ACL.</p><p>When <uicontrol import:style="GUI">Inherit Permissions</uicontrol
> is set to false, permissions are inherited from the top level <codeph
import:style="Literal">mks:si</codeph> ACL.</p><p>For more information
on setting permission inheritance for development paths, see “Dev
Path Permissions”.</p></section>
<section id="_ACL_concepts_50227" import:style="0_TopicSub2"><title
>Resolution of Permission Conflicts</title><p>In cases where a user
is identified as a principal with his or her own permissions and is
also part of a group that is granted permissions, it is important
to understand how any permission conflicts are resolved.</p><p>Each
ACL entry specifies the set of permissions that are to be allowed
(if positive) or denied (if negative). A principal can have at most
one positive ACL entry and one negative entry, that is, multiple positive
or negative ACL entries for the same permission are not allowed for
any principal. All defined permissions take precedence over inherited
permissions.</p><p>In resolving ACL permissions, any time a permission
is explicitly specified for a user principal that permission takes
precedence over his or her inclusion in a group. Individual permissions
always override permissions of the group(s) the individual belongs
to. Therefore, individual negative permissions (specific denial of
permissions) override the positive permissions of the group, and individual
positive permissions override the negative permissions of the group.
For example, a user—Patrick Molinas—is allowed the <codeph
import:style="Literal">CreateProject</codeph> permission through the
user principal for <codeph import:style="Literal">pmolinas</codeph
>, but is denied the <codeph import:style="Literal">CreateProject</codeph
> permission through his membership in the group principal for <codeph
import:style="Literal">Developers</codeph>. Because the permissions
of the individual principal override the permissions of the group
principal, Patrick is allowed the <codeph import:style="Literal">CreateProject</codeph
> permission.</p><p>In resolving a conflict between groups, negative
permissions take precedence. If a principal is allowed a permission
in one group but denied that same permission in another group, the
conflict is resolved by denying the permission.</p><p>The permission
set for the principal is then inherited from the parent ACL. If the
root ACL is checked and offers no explicit positive or negative entry
to apply to the principal, then the principal is considered to have
an empty permission set for the resolved ACL, which in turn defaults
to a denied permission.</p><p>Key factors for permissions include
the following:</p><ul>
<li><p>Permissions are always in one of three conditions: allowed,
denied, or cleared.</p></li>
<li><p>The server always uses the most specific permission it finds
in the ACL hierarchy. For example, the allowed and denied permissions
are more specific than a cleared permission.</p></li>
<li><p>Defined permissions take precedence over inherited permissions.</p
></li>
<li><p>Based on inheritance, an explicitly denied permission takes
precedence, even if that permission is allowed through another principal.
When you clear a permission, that permission can still be explicitly
allowed through another principal or through a parent ACL.</p></li>
<li><p>A permission that is explicitly specified for a user principal
takes precedence over his or her inclusion in a group. A permission
assigned to an individual always overrides the permissions of the
group the individual belongs to.</p></li>
<li><p>A principal can have at most one positive ACL entry and one
negative entry. Multiple positive or negative ACL entries for the
same permission are not allowed for any principal.</p></li>
<li><p>If there is no entry for a particular principal, then the principal
is considered to have an empty permission set for that ACL. The permission
set for the principal is then inherited from the parent ACL.</p></li>
<li><p>In resolving a conflict between groups, negative permissions
take precedence. If a principal is allowed a permission in one group
but denied that same permission in another group, the conflict is
resolved by denying the permission.</p></li>
</ul></section>
</pubsConbody>
</pubsConcept>
