Class Permission (namespace Nette\Security)


Access control list (ACL) functionality and privileges management.

This solution is mostly based on Zend_Acl (c) Zend Technologies USA Inc. (http://www.zend.com), new BSD license

Object
   |
   --Permission

Implements interfaces:

Author: David Grudl
Copyright: Copyright (c) 2005, 2007 Zend Technologies USA Inc.
Copyright: Copyright (c) 2004, 2009 David Grudl
Located: in /Security/Permission.php (line 39)
Public Method Summary
Permission
addResource (string $resource, [string $parent = NULL])
Adds a Resource having an identifier unique to the list.
Permission
addRole (string $role, [string|array $parents = NULL])
Adds a Role to the list.
Permission
allow ([string|array|Permission::ALL $roles = self::ALL], [string|array|Permission::ALL $resources = self::ALL], [string|array|Permission::ALL $privileges = self::ALL], [IPermissionAssertion $assertion = NULL])
Adds an "allow" rule to the list. A rule is added that would allow one or more Roles access to [certain $privileges upon] the specified Resource(s).
Permission
deny ([string|array|Permission::ALL $roles = self::ALL], [string|array|Permission::ALL $resources = self::ALL], [string|array|Permission::ALL $privileges = self::ALL], [IPermissionAssertion $assertion = NULL])
Adds a "deny" rule to the list. A rule is added that would deny one or more Roles access to [certain $privileges upon] the specified Resource(s).
mixed
Returns real currently queried Resource. Use by IPermissionAssertion::asert().
mixed
Returns real currently queried Role. Use by IPermissionAssertion::asert().
array
getRoleParents (string $role)
Returns an array of an existing Role's parents.
bool
hasResource (string $resource)
Returns TRUE if the Resource exists in the list.
bool
hasRole (string $role)
Returns TRUE if the Role exists in the list.
bool
isAllowed ([string|Permission::ALL|IRole $role = self::ALL], [string|Permission::ALL|IResource $resource = self::ALL], [string|Permission::ALL $privilege = self::ALL])
Returns TRUE if and only if the Role has access to the Resource.
Permission
removeAllow ([string|array|Permission::ALL $roles = self::ALL], [string|array|Permission::ALL $resources = self::ALL], [string|array|Permission::ALL $privileges = self::ALL])
Removes "allow" permissions from the list. The rule is removed only in the context of the given Roles, Resources, and privileges. Existing rules to which the remove operation does not apply would remain in the
Permission
Removes all Resources.
Permission
Removes all Roles from the list.
Permission
removeDeny ([string|array|Permission::ALL $roles = self::ALL], [string|array|Permission::ALL $resources = self::ALL], [string|array|Permission::ALL $privileges = self::ALL])
Removes "deny" restrictions from the list. The rule is removed only in the context of the given Roles, Resources, and privileges. Existing rules to which the remove operation does not apply would remain in the
Permission
removeResource (string $resource)
Removes a Resource and all of its children.
Permission
removeRole (string $role)
Removes the Role from the list.
bool
resourceInheritsFrom (string $resource, string $inherit, [boolean $onlyParent = FALSE])
Returns TRUE if $resource inherits from $inherit.
bool
roleInheritsFrom (string $role, string $inherit, [boolean $onlyParents = FALSE])
Returns TRUE if $role inherits from $inherit.
Protected Method Summary
protected void
setRule (bool $toAdd, bool $type, string|array|Permission::ALL $roles, string|array|Permission::ALL $resources, string|array|Permission::ALL $privileges, [IPermissionAssertion $assertion = NULL])
Performs operations on Access Control List rules.
Methods Inherited From Object
extensionMethod(), getClass(), getReflection(), __call(), __callStatic(), __get(), __isset(), __set(), __unset()

Method Details

line 282

addResource

public Permission addResource (string $resource, [string $parent = NULL])

Adds a Resource having an identifier unique to the list.

Input
string $resource
string $parent
Output
Permission provides a fluent interface
Throws
throws InvalidStateException
throws InvalidArgumentException

line 88

addRole

public Permission addRole (string $role, [string|array $parents = NULL])

Adds a Role to the list.

The $parents parameter may be a Role identifier (or array of identifiers) to indicate the Roles from which the newly added Role will directly inherit.

In order to resolve potential ambiguities with conflicting rules inherited from different parents, the most recently added parent takes precedence over parents that were previously added. In other words, the first parent added will have the least priority, and the last parent added will have the highest priority.

Input
string $role
string|array $parents
Output
Permission provides a fluent interface
Throws
throws InvalidStateException
throws InvalidArgumentException

line 463

allow

public Permission allow ([string|array|Permission::ALL $roles = self::ALL], [string|array|Permission::ALL $resources = self::ALL], [string|array|Permission::ALL $privileges = self::ALL], [IPermissionAssertion $assertion = NULL])

Adds an "allow" rule to the list. A rule is added that would allow one or more Roles access to [certain $privileges upon] the specified Resource(s).

If either $roles or $resources is Permission::ALL, then the rule applies to all Roles or all Resources, respectively. Both may be Permission::ALL in order to work with the default rule of the ACL.

The $privileges parameter may be used to further specify that the rule applies only to certain privileges upon the Resource(s) in question. This may be specified to be a single privilege with a string, and multiple privileges may be specified as an array of strings.

If $assertion is provided, then its assert() method must return TRUE in order for the rule to apply. If $assertion is provided with $roles, $resources, and $privileges all equal to NULL, then a rule will imply a type of DENY when the rule's assertion fails.

Input
string|array|Permission::ALL $roles roles
string|array|Permission::ALL $resources resources
string|array|Permission::ALL $privileges privileges
IPermissionAssertion $assertion assertion
Output
Permission provides a fluent interface

line 492

deny

public Permission deny ([string|array|Permission::ALL $roles = self::ALL], [string|array|Permission::ALL $resources = self::ALL], [string|array|Permission::ALL $privileges = self::ALL], [IPermissionAssertion $assertion = NULL])

Adds a "deny" rule to the list. A rule is added that would deny one or more Roles access to [certain $privileges upon] the specified Resource(s).

If either $roles or $resources is Permission::ALL, then the rule applies to all Roles or all Resources, respectively. Both may be Permission::ALL in order to work with the default rule of the ACL.

The $privileges parameter may be used to further specify that the rule applies only to certain privileges upon the Resource(s) in question. This may be specified to be a single privilege with a string, and multiple privileges may be specified as an array of strings.

If $assertion is provided, then its assert() method must return TRUE in order for the rule to apply. If $assertion is provided with $roles, $resources, and $privileges all equal to NULL, then a rule will imply a type of ALLOW when the rule's assertion fails.

Input
string|array|Permission::ALL $roles roles
string|array|Permission::ALL $resources resources
string|array|Permission::ALL $privileges privileges
IPermissionAssertion $assertion assertion
Output
Permission provides a fluent interface

line 762

getQueriedResource

public mixed getQueriedResource ()

Returns real currently queried Resource. Use by IPermissionAssertion::asert().

Output
mixed  

line 751

getQueriedRole

public mixed getQueriedRole ()

Returns real currently queried Role. Use by IPermissionAssertion::asert().

Output
mixed  

line 164

getRoleParents

public array getRoleParents (string $role)

Returns an array of an existing Role's parents.

The parent Roles are ordered in this array by ascending priority. The highest priority parent Role, last in the array, corresponds with the parent Role most recently added.

If the Role does not have any parents, then an empty array is returned.

Input
string $role
Output
array  

line 310

hasResource

public bool hasResource (string $resource)

Returns TRUE if the Resource exists in the list.

Input
string $resource
Output
bool  

line 125

hasRole

public bool hasRole (string $role)

Returns TRUE if the Role exists in the list.

Input
string $role
Output
bool  

line 672

isAllowed

public bool isAllowed ([string|Permission::ALL|IRole $role = self::ALL], [string|Permission::ALL|IResource $resource = self::ALL], [string|Permission::ALL $privilege = self::ALL])

Returns TRUE if and only if the Role has access to the Resource.

If either $role or $resource is Permission::ALL, then the query applies to all Roles or all Resources, respectively. Both may be Permission::ALL to query whether the ACL has a "blacklist" rule (allow everything to all). By default, Permission creates a "whitelist" rule (deny everything to all), and this method would return FALSE unless this default has been overridden (i.e., by executing $acl->allow()).

If a $privilege is not provided, then this method returns FALSE if and only if the Role is denied access to at least one privilege upon the Resource. In other words, this method returns TRUE if and only if the Role is allowed all privileges on the Resource.

This method checks Role inheritance using a depth-first traversal of the Role list. The highest priority parent (i.e., the parent most recently added) is checked first, and its respective parents are checked similarly before the lower-priority parents of the Role are checked.

Implementation of:

Input
string|Permission::ALL|IRole $role role
string|Permission::ALL|IResource $resource resource
string|Permission::ALL $privilege privilege
Output
bool  
Throws
throws InvalidStateException

line 510

removeAllow

public Permission removeAllow ([string|array|Permission::ALL $roles = self::ALL], [string|array|Permission::ALL $resources = self::ALL], [string|array|Permission::ALL $privileges = self::ALL])

Removes "allow" permissions from the list. The rule is removed only in the context of the given Roles, Resources, and privileges. Existing rules to which the remove operation does not apply would remain in the

Input
string|array|Permission::ALL $roles roles
string|array|Permission::ALL $resources resources
string|array|Permission::ALL $privileges privileges
Output
Permission provides a fluent interface

line 422

removeAllResources

public Permission removeAllResources ()

Removes all Resources.

Output
Permission provides a fluent interface

line 251

removeAllRoles

public Permission removeAllRoles ()

Removes all Roles from the list.

Output
Permission provides a fluent interface

line 528

removeDeny

public Permission removeDeny ([string|array|Permission::ALL $roles = self::ALL], [string|array|Permission::ALL $resources = self::ALL], [string|array|Permission::ALL $privileges = self::ALL])

Removes "deny" restrictions from the list. The rule is removed only in the context of the given Roles, Resources, and privileges. Existing rules to which the remove operation does not apply would remain in the

Input
string|array|Permission::ALL $roles roles
string|array|Permission::ALL $resources resources
string|array|Permission::ALL $privileges privileges
Output
Permission provides a fluent interface

line 387

removeResource

public Permission removeResource (string $resource)

Removes a Resource and all of its children.

Input
string $resource
Output
Permission provides a fluent interface
Throws
throws InvalidStateException

line 215

removeRole

public Permission removeRole (string $role)

Removes the Role from the list.

Input
string $role
Output
Permission provides a fluent interface
Throws
throws InvalidStateException

line 351

resourceInheritsFrom

public bool resourceInheritsFrom (string $resource, string $inherit, [boolean $onlyParent = FALSE])

Returns TRUE if $resource inherits from $inherit.

If $onlyParents is TRUE, then $resource must inherit directly from $inherit in order to return TRUE. By default, this method looks through the entire inheritance tree to determine whether $resource inherits from $inherit through its ancestor Resources.

Input
string $resource
string $inherit
boolean $onlyParent
Output
bool  
Throws
throws InvalidStateException

line 186

roleInheritsFrom

public bool roleInheritsFrom (string $role, string $inherit, [boolean $onlyParents = FALSE])

Returns TRUE if $role inherits from $inherit.

If $onlyParents is TRUE, then $role must inherit directly from $inherit in order to return TRUE. By default, this method looks through the entire inheritance DAG to determine whether $role inherits from $inherit through its ancestor Roles.

Input
string $role
string $inherit
boolean $onlyParents
Output
bool  
Throws
throws InvalidStateException

line 548

setRule

protected void setRule (bool $toAdd, bool $type, string|array|Permission::ALL $roles, string|array|Permission::ALL $resources, string|array|Permission::ALL $privileges, [IPermissionAssertion $assertion = NULL])

Performs operations on Access Control List rules.

Input
bool $toAdd operation add?
bool $type type
string|array|Permission::ALL $roles roles
string|array|Permission::ALL $resources resources
string|array|Permission::ALL $privileges privileges
IPermissionAssertion $assertion assertion
Output
void  
Throws
throws InvalidStateException