0 关注者

抽象类 yii\rbac\BaseManager

继承yii\rbac\BaseManager » yii\base\Component » yii\base\BaseObject
实现yii\base\Configurable, yii\rbac\ManagerInterface
子类yii\rbac\DbManager, yii\rbac\PhpManager
可用版本2.0
源代码 https://github.com/yiisoft/yii2/blob/master/framework/rbac/BaseManager.php

BaseManager 是一个实现 yii\rbac\ManagerInterface 的基类,用于 RBAC 管理。

有关 DbManager 的更多详细信息和使用信息,请参阅 安全授权指南文章

公共属性

隐藏继承的属性

属性 类型 描述 定义于
$behaviors yii\base\Behavior[] 附加到此组件的行为列表。 yii\base\Component
$defaultRoleInstances yii\rbac\Role[] 默认角色。 yii\rbac\BaseManager
$defaultRoles array 角色名称列表,在没有调用 assign() 的情况下自动分配给每个用户。 yii\rbac\BaseManager
$permissions yii\rbac\Permission[] 系统中的所有权限。 yii\rbac\BaseManager
$roles yii\rbac\Role[] 系统中的所有角色。 yii\rbac\BaseManager
$rules yii\rbac\Rule[] 规则,索引为规则名称。 yii\rbac\ManagerInterface

受保护的属性

隐藏继承的属性

属性 类型 描述 定义于

公共方法

隐藏继承的方法

方法 描述 定义于
__call() 调用不是类方法的命名方法。 yii\base\Component
__clone() 此方法在通过克隆现有对象创建对象后调用。 yii\base\Component
__construct() 构造函数。 yii\base\BaseObject
__get() 返回组件属性的值。 yii\base\Component
__isset() 检查属性是否已设置,即已定义且不为空。 yii\base\Component
__set() 设置组件属性的值。 yii\base\Component
__unset() 将组件属性设置为 null。 yii\base\Component
add() 向 RBAC 系统添加角色、权限或规则。 yii\rbac\BaseManager
addChild() 将项目添加为另一个项目的子项。 yii\rbac\ManagerInterface
assign() 将角色分配给用户。 yii\rbac\ManagerInterface
attachBehavior() 将行为附加到此组件。 yii\base\Component
attachBehaviors() 将行为列表附加到组件。 yii\base\Component
behaviors() 返回此组件应表现出的行为列表。 yii\base\Component
canAddChild() 检查是否可以向父级添加子级。 yii\rbac\ManagerInterface
canGetProperty() 返回一个值,指示是否可以读取属性。 yii\base\Component
canSetProperty() 返回一个值,指示是否可以设置属性。 yii\base\Component
className() 返回此类的完全限定名称。 yii\base\BaseObject
createPermission() 创建新的 Permission 对象。 yii\rbac\BaseManager
createRole() 创建新的 Role 对象。 yii\rbac\BaseManager
detachBehavior() 从组件中分离行为。 yii\base\Component
detachBehaviors() 从组件中分离所有行为。 yii\base\Component
ensureBehaviors() 确保 behaviors() 中声明的行为已附加到此组件。 yii\base\Component
getAssignment() 返回有关角色和用户的分配信息。 yii\rbac\ManagerInterface
getAssignments() 返回指定用户的全部角色分配信息。 yii\rbac\ManagerInterface
getBehavior() 返回命名行为对象。 yii\base\Component
getBehaviors() 返回附加到此组件的所有行为。 yii\base\Component
getChildRoles() 返回指定角色的子角色。深度不受限制。 yii\rbac\ManagerInterface
getChildren() 返回子权限和/或角色。 yii\rbac\ManagerInterface
getDefaultRoleInstances() 返回作为 Role 对象数组的 defaultRoles。 yii\rbac\BaseManager
getDefaultRoles() 获取默认角色 yii\rbac\BaseManager
getPermission() 返回命名权限。 yii\rbac\BaseManager
getPermissions() 返回系统中的所有权限。 yii\rbac\BaseManager
getPermissionsByRole() 返回指定角色代表的所有权限。 yii\rbac\ManagerInterface
getPermissionsByUser() 返回用户拥有的所有权限。 yii\rbac\ManagerInterface
getRole() 返回命名角色。 yii\rbac\BaseManager
getRoles() 返回系统中的所有角色。 yii\rbac\BaseManager
getRolesByUser() 返回通过 assign() 分配给用户的角色。 yii\rbac\ManagerInterface
getRule() 返回指定名称的规则。 yii\rbac\ManagerInterface
getRules() 返回系统中可用的所有规则。 yii\rbac\ManagerInterface
getUserIdsByRole() 返回分配给指定角色的所有用户 ID。 yii\rbac\ManagerInterface
hasChild() 返回一个值,指示子项是否已存在于父项中。 yii\rbac\ManagerInterface
hasEventHandlers() 返回一个值,指示命名事件是否已附加任何处理程序。 yii\base\Component
hasMethod() 返回一个值,指示方法是否已定义。 yii\base\Component
hasProperty() 返回一个值,指示此组件是否已定义属性。 yii\base\Component
init() 初始化对象。 yii\base\BaseObject
off() 从此组件中分离现有的事件处理程序。 yii\base\Component
on() 将事件处理程序附加到事件。 yii\base\Component
remove() 从 RBAC 系统中删除角色、权限或规则。 yii\rbac\BaseManager
removeAll() 删除所有授权数据,包括角色、权限、规则和分配。 yii\rbac\ManagerInterface
removeAllAssignments() 删除所有角色分配。 yii\rbac\ManagerInterface
removeAllPermissions() 删除所有权限。 yii\rbac\ManagerInterface
removeAllRoles() 删除所有角色。 yii\rbac\ManagerInterface
removeAllRules() 删除所有规则。 yii\rbac\ManagerInterface
removeChild() 从其父级中删除子级。 yii\rbac\ManagerInterface
removeChildren() 从其父级中删除所有子级。 yii\rbac\ManagerInterface
revoke() 从用户撤销角色。 yii\rbac\ManagerInterface
revokeAll() 从用户撤销所有角色。 yii\rbac\ManagerInterface
setDefaultRoles() 设置默认角色 yii\rbac\BaseManager
trigger() 触发事件。 yii\base\Component
update() 更新系统中的指定角色、权限或规则。 yii\rbac\BaseManager

受保护的方法

隐藏继承的方法

方法 描述 定义于
addItem() 向 RBAC 系统添加身份验证项目。 yii\rbac\BaseManager
addRule() 向 RBAC 系统添加规则。 yii\rbac\BaseManager
executeRule() 执行与指定身份验证项目关联的规则。 yii\rbac\BaseManager
getItem() 返回命名身份验证项目。 yii\rbac\BaseManager
getItems() 返回指定类型的项目。 yii\rbac\BaseManager
hasNoAssignments() 检查 $assignments 数组是否为空,以及 $defaultRoles 属性是否也为空。 yii\rbac\BaseManager
removeItem() 从 RBAC 系统中删除身份验证项目。 yii\rbac\BaseManager
removeRule() 从 RBAC 系统中删除规则。 yii\rbac\BaseManager
updateItem() 更新 RBAC 系统中的身份验证项目。 yii\rbac\BaseManager
updateRule() 更新 RBAC 系统中的规则。 yii\rbac\BaseManager

属性详细信息

隐藏继承的属性

$defaultRoleInstances 公共属性

默认角色。数组以角色名称为索引。

$defaultRoles 受保护属性

一个角色名称列表,这些角色名称会自动分配给每个用户,无需调用 assign()。请注意,无论用户的身份验证状态如何,这些角色都将应用于用户。

protected array $defaultRoles = []
$permissions 公共只读属性

系统中的所有权限。数组以权限名称为索引。

$roles 公共只读属性

系统中的所有角色。数组以角色名称为索引。

public yii\rbac\Role[] getRoles ( )

方法详情

隐藏继承的方法

__call() 公共方法

定义于: yii\base\Component::__call()

调用不是类方法的命名方法。

此方法将检查是否有任何附加的行为具有指定的名称,如果存在,则执行该行为的方法。

不要直接调用此方法,因为它是一个 PHP 魔术方法,当调用未知方法时会隐式调用。

public mixed __call ( $name, $params )
$name string

方法名称

$params array

方法参数

返回值 mixed

方法返回值

抛出 yii\base\UnknownMethodException

当调用未知方法时

                public function __call($name, $params)
{
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $object) {
        if ($object->hasMethod($name)) {
            return call_user_func_array([$object, $name], $params);
        }
    }
    throw new UnknownMethodException('Calling unknown method: ' . get_class($this) . "::$name()");
}

            
__clone() 公共方法

定义于: yii\base\Component::__clone()

此方法在通过克隆现有对象创建对象后调用。

它会移除所有行为,因为它们附加到旧对象上。

public void __clone ( )

                public function __clone()
{
    $this->_events = [];
    $this->_eventWildcards = [];
    $this->_behaviors = null;
}

            
__construct() 公共方法

定义于: yii\base\BaseObject::__construct()

构造函数。

默认实现执行两件事

  • 使用给定的配置 $config 初始化对象。
  • 调用 init()

如果在子类中重写此方法,建议

  • 构造函数的最后一个参数是一个配置数组,就像这里的 $config 一样。
  • 在构造函数的末尾调用父实现。
public void __construct ( $config = [] )
$config array

将用于初始化对象属性的名称-值对

                public function __construct($config = [])
{
    if (!empty($config)) {
        Yii::configure($this, $config);
    }
    $this->init();
}

            
__get() 公共方法

定义于: yii\base\Component::__get()

返回组件属性的值。

此方法将按照以下顺序进行检查并采取相应操作

  • 通过 getter 定义的属性:返回 getter 的结果
  • 行为的属性:返回行为的属性值

不要直接调用此方法,因为它是一个 PHP 魔术方法,当执行 $value = $component->property; 时会隐式调用。

另见 __set()

public mixed __get ( $name )
$name string

属性名称

返回值 mixed

属性值或行为属性的值

抛出 yii\base\UnknownPropertyException

如果未定义属性

抛出 yii\base\InvalidCallException

如果属性是只写的。

                public function __get($name)
{
    $getter = 'get' . $name;
    if (method_exists($this, $getter)) {
        // read property, e.g. getName()
        return $this->$getter();
    }
    // behavior property
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $behavior) {
        if ($behavior->canGetProperty($name)) {
            return $behavior->$name;
        }
    }
    if (method_exists($this, 'set' . $name)) {
        throw new InvalidCallException('Getting write-only property: ' . get_class($this) . '::' . $name);
    }
    throw new UnknownPropertyException('Getting unknown property: ' . get_class($this) . '::' . $name);
}

            
__isset() 公共方法

定义于: yii\base\Component::__isset()

检查属性是否已设置,即已定义且不为空。

此方法将按照以下顺序进行检查并采取相应操作

  • 通过 setter 定义的属性:返回属性是否已设置
  • 行为的属性:返回属性是否已设置
  • 对于不存在的属性,返回 false

不要直接调用此方法,因为它是一个 PHP 魔术方法,当执行 isset($component->property) 时会隐式调用。

另见 https://php.ac.cn/manual/en/function.isset.php

public boolean __isset ( $name )
$name string

属性名称或事件名称

返回值 boolean

命名的属性是否已设置

                public function __isset($name)
{
    $getter = 'get' . $name;
    if (method_exists($this, $getter)) {
        return $this->$getter() !== null;
    }
    // behavior property
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $behavior) {
        if ($behavior->canGetProperty($name)) {
            return $behavior->$name !== null;
        }
    }
    return false;
}

            
__set() 公共方法

定义于: yii\base\Component::__set()

设置组件属性的值。

此方法将按照以下顺序进行检查并采取相应操作

  • 通过 setter 定义的属性:设置属性值
  • 以 "on xyz" 格式的事件:将处理程序附加到 "xyz" 事件
  • 以 "as xyz" 格式的行为:附加名为 "xyz" 的行为
  • 行为的属性:设置行为的属性值

不要直接调用此方法,因为它是一个 PHP 魔术方法,当执行 $component->property = $value; 时会隐式调用。

另见 __get()

public void __set ( $name, $value )
$name string

属性名称或事件名称

$value mixed

属性值

抛出 yii\base\UnknownPropertyException

如果未定义属性

抛出 yii\base\InvalidCallException

如果属性是只读的。

                public function __set($name, $value)
{
    $setter = 'set' . $name;
    if (method_exists($this, $setter)) {
        // set property
        $this->$setter($value);
        return;
    } elseif (strncmp($name, 'on ', 3) === 0) {
        // on event: attach event handler
        $this->on(trim(substr($name, 3)), $value);
        return;
    } elseif (strncmp($name, 'as ', 3) === 0) {
        // as behavior: attach behavior
        $name = trim(substr($name, 3));
        $this->attachBehavior($name, $value instanceof Behavior ? $value : Yii::createObject($value));
        return;
    }
    // behavior property
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $behavior) {
        if ($behavior->canSetProperty($name)) {
            $behavior->$name = $value;
            return;
        }
    }
    if (method_exists($this, 'get' . $name)) {
        throw new InvalidCallException('Setting read-only property: ' . get_class($this) . '::' . $name);
    }
    throw new UnknownPropertyException('Setting unknown property: ' . get_class($this) . '::' . $name);
}

            
__unset() 公共方法

定义于: yii\base\Component::__unset()

将组件属性设置为 null。

此方法将按照以下顺序进行检查并采取相应操作

  • 通过 setter 定义的属性:将属性值设置为 null
  • 行为的属性:将属性值设置为 null

不要直接调用此方法,因为它是一个 PHP 魔术方法,当执行 unset($component->property) 时会隐式调用。

另见 https://php.ac.cn/manual/en/function.unset.php

public void __unset ( $name )
$name string

属性名称

抛出 yii\base\InvalidCallException

如果属性是只读的。

                public function __unset($name)
{
    $setter = 'set' . $name;
    if (method_exists($this, $setter)) {
        $this->$setter(null);
        return;
    }
    // behavior property
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $behavior) {
        if ($behavior->canSetProperty($name)) {
            $behavior->$name = null;
            return;
        }
    }
    throw new InvalidCallException('Unsetting an unknown or read-only property: ' . get_class($this) . '::' . $name);
}

            
add() 公共方法

向 RBAC 系统添加角色、权限或规则。

public boolean add ( $object )
$object yii\rbac\Role|yii\rbac\Permission|yii\rbac\Rule
返回值 boolean

是否成功将角色、权限或规则添加到系统中

抛出 异常

如果数据验证或保存失败(例如角色或权限的名称不唯一)

                public function add($object)
{
    if ($object instanceof Item) {
        if ($object->ruleName && $this->getRule($object->ruleName) === null) {
            $rule = \Yii::createObject($object->ruleName);
            $rule->name = $object->ruleName;
            $this->addRule($rule);
        }
        return $this->addItem($object);
    } elseif ($object instanceof Rule) {
        return $this->addRule($object);
    }
    throw new InvalidArgumentException('Adding unsupported object type.');
}

            
addChild() public abstract method

定义于: yii\rbac\ManagerInterface::addChild()

将项目添加为另一个项目的子项。

public abstract boolean addChild ( $parent, $child )
$parent yii\rbac\Item
$child yii\rbac\Item
返回值 boolean

子项是否成功添加

抛出 yii\base\Exception

如果父子关系已存在或检测到循环。

                public function addChild($parent, $child);

            
addItem() protected abstract method

向 RBAC 系统添加身份验证项目。

protected abstract boolean addItem ( $item )
$item yii\rbac\Item

要添加的项

返回值 boolean

是否成功将身份验证项添加到系统中

抛出 异常

如果数据验证或保存失败(例如角色或权限的名称不唯一)

                abstract protected function addItem($item);

            
addRule() protected abstract method

向 RBAC 系统添加规则。

protected abstract boolean addRule ( $rule )
$rule yii\rbac\Rule

要添加的规则

返回值 boolean

是否成功将规则添加到系统中

抛出 异常

如果数据验证或保存失败(例如规则的名称不唯一)

                abstract protected function addRule($rule);

            
assign() public abstract method

定义于: yii\rbac\ManagerInterface::assign()

将角色分配给用户。

public abstract yii\rbac\Assignment assign ( $role, $userId )
$role yii\rbac\Role|yii\rbac\Permission
$userId string|integer

用户 ID(参见 yii\web\User::$id

返回值 yii\rbac\Assignment

角色分配信息。

抛出 异常

如果角色已经分配给用户

                public function assign($role, $userId);

            
attachBehavior() public method

定义于: yii\base\Component::attachBehavior()

将行为附加到此组件。

此方法将根据给定的配置创建行为对象。之后,行为对象将通过调用 yii\base\Behavior::attach() 方法附加到此组件。

另见 detachBehavior()

public yii\base\Behavior attachBehavior ( $name, $behavior )
$name string

行为的名称。

$behavior string|array|yii\base\Behavior

行为配置。可以是以下之一

返回值 yii\base\Behavior

行为对象

                public function attachBehavior($name, $behavior)
{
    $this->ensureBehaviors();
    return $this->attachBehaviorInternal($name, $behavior);
}

            
attachBehaviors() public method

定义于: yii\base\Component::attachBehaviors()

将行为列表附加到组件。

每个行为都由其名称索引,并且应该是一个 yii\base\Behavior 对象、一个指定行为类的字符串,或者一个用于创建行为的配置数组。

另见 attachBehavior()

public void attachBehaviors ( $behaviors )
$behaviors array

要附加到组件的行为列表

                public function attachBehaviors($behaviors)
{
    $this->ensureBehaviors();
    foreach ($behaviors as $name => $behavior) {
        $this->attachBehaviorInternal($name, $behavior);
    }
}

            
behaviors() public method

定义于: yii\base\Component::behaviors()

返回此组件应表现出的行为列表。

子类可以重写此方法以指定它们想要表现的行为。

此方法的返回值应该是一个行为对象或配置数组,由行为名称索引。行为配置可以是一个指定行为类的字符串,也可以是一个具有以下结构的数组

'behaviorName' => [
    'class' => 'BehaviorClass',
    'property1' => 'value1',
    'property2' => 'value2',
]

请注意,行为类必须扩展自 yii\base\Behavior。行为可以使用名称或匿名方式附加。当使用名称作为数组键时,可以使用此名称,行为稍后可以使用 getBehavior() 获取,或使用 detachBehavior() 分离。匿名行为无法检索或分离。

在此方法中声明的行为将自动(按需)附加到组件。

public array behaviors ( )
返回值 array

行为配置。

                public function behaviors()
{
    return [];
}

            
canAddChild() public abstract method (available since version 2.0.8)

定义于: yii\rbac\ManagerInterface::canAddChild()

检查是否可以向父级添加子级。

public abstract boolean canAddChild ( $parent, $child )
$parent yii\rbac\Item

父项

$child yii\rbac\Item

要添加到层次结构中的子项

返回值 boolean

添加的可能性

                public function canAddChild($parent, $child);

            
canGetProperty() public method

定义于: yii\base\Component::canGetProperty()

返回一个值,指示是否可以读取属性。

属性可以读取,如果

  • 类具有与指定名称关联的 getter 方法(在这种情况下,属性名称不区分大小写);
  • 类具有与指定名称相同的成员变量(当 $checkVars 为 true 时);
  • 附加的行为具有给定名称的可读属性(当 $checkBehaviors 为 true 时)。

另见 canSetProperty()

public boolean canGetProperty ( $name, $checkVars true, $checkBehaviors true )
$name string

属性名称

$checkVars boolean

是否将成员变量视为属性

$checkBehaviors boolean

是否将行为的属性视为此组件的属性

返回值 boolean

属性是否可读

                public function canGetProperty($name, $checkVars = true, $checkBehaviors = true)
{
    if (method_exists($this, 'get' . $name) || $checkVars && property_exists($this, $name)) {
        return true;
    } elseif ($checkBehaviors) {
        $this->ensureBehaviors();
        foreach ($this->_behaviors as $behavior) {
            if ($behavior->canGetProperty($name, $checkVars)) {
                return true;
            }
        }
    }
    return false;
}

            
canSetProperty() public method

定义于: yii\base\Component::canSetProperty()

返回一个值,指示是否可以设置属性。

属性可以写入,如果

  • 类具有与指定名称关联的 setter 方法(在这种情况下,属性名称不区分大小写);
  • 类具有与指定名称相同的成员变量(当 $checkVars 为 true 时);
  • 附加的行为具有给定名称的可写属性(当 $checkBehaviors 为 true 时)。

另见 canGetProperty()

public boolean canSetProperty ( $name, $checkVars true, $checkBehaviors true )
$name string

属性名称

$checkVars boolean

是否将成员变量视为属性

$checkBehaviors boolean

是否将行为的属性视为此组件的属性

返回值 boolean

属性是否可写

                public function canSetProperty($name, $checkVars = true, $checkBehaviors = true)
{
    if (method_exists($this, 'set' . $name) || $checkVars && property_exists($this, $name)) {
        return true;
    } elseif ($checkBehaviors) {
        $this->ensureBehaviors();
        foreach ($this->_behaviors as $behavior) {
            if ($behavior->canSetProperty($name, $checkVars)) {
                return true;
            }
        }
    }
    return false;
}

            
className() 公共静态方法
自 2.0.14 起已弃用。在 PHP >=5.5 上,请使用 ::class 代替。

定义于: yii\base\BaseObject::className()

返回此类的完全限定名称。

public static string className ( )
返回值 string

此类的完全限定名称。

                public static function className()
{
    return get_called_class();
}

            
createPermission() 公共方法

创建新的 Permission 对象。

请注意,新创建的权限尚未添加到 RBAC 系统中。您必须填写所需的数据并调用 add() 以将其添加到系统中。

public yii\rbac\Permission createPermission ( $name )
$name string

权限名称

返回值 yii\rbac\Permission

新的 Permission 对象

                public function createPermission($name)
{
    $permission = new Permission();
    $permission->name = $name;
    return $permission;
}

            
createRole() 公共方法

创建新的 Role 对象。

请注意,新创建的角色尚未添加到 RBAC 系统中。您必须填写所需的数据并调用 add() 以将其添加到系统中。

public yii\rbac\Role createRole ( $name )
$name string

角色名称

返回值 yii\rbac\Role

新的 Role 对象

                public function createRole($name)
{
    $role = new Role();
    $role->name = $name;
    return $role;
}

            
detachBehavior() 公共方法

定义于: yii\base\Component::detachBehavior()

从组件中分离行为。

将调用行为的 yii\base\Behavior::detach() 方法。

public yii\base\Behavior|null detachBehavior ( $name )
$name string

行为的名称。

返回值 yii\base\Behavior|null

分离的行为。如果行为不存在,则为 Null。

                public function detachBehavior($name)
{
    $this->ensureBehaviors();
    if (isset($this->_behaviors[$name])) {
        $behavior = $this->_behaviors[$name];
        unset($this->_behaviors[$name]);
        $behavior->detach();
        return $behavior;
    }
    return null;
}

            
detachBehaviors() 公共方法

定义于: yii\base\Component::detachBehaviors()

从组件中分离所有行为。

public void detachBehaviors ( )

                public function detachBehaviors()
{
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $name => $behavior) {
        $this->detachBehavior($name);
    }
}

            
ensureBehaviors() 公共方法

定义于: yii\base\Component::ensureBehaviors()

确保 behaviors() 中声明的行为已附加到此组件。

public void ensureBehaviors ( )

                public function ensureBehaviors()
{
    if ($this->_behaviors === null) {
        $this->_behaviors = [];
        foreach ($this->behaviors() as $name => $behavior) {
            $this->attachBehaviorInternal($name, $behavior);
        }
    }
}

            
executeRule() 受保护方法

执行与指定身份验证项目关联的规则。

如果项目没有指定规则,此方法将返回 true。否则,它将返回 yii\rbac\Rule::execute() 的值。

protected boolean executeRule ( $user, $item, $params )
$user string|integer

用户 ID。这应该是一个整数或一个字符串,代表用户的唯一标识符。参见 yii\web\User::$id

$item yii\rbac\Item

需要执行其规则的授权项目

$params array

传递给 yii\rbac\CheckAccessInterface::checkAccess() 的参数,并将传递给规则

返回值 boolean

yii\rbac\Rule::execute() 的返回值。如果授权项目没有指定规则,则将返回 true。

抛出 yii\base\InvalidConfigException

如果授权项目具有无效规则。

                protected function executeRule($user, $item, $params)
{
    if ($item->ruleName === null) {
        return true;
    }
    $rule = $this->getRule($item->ruleName);
    if ($rule instanceof Rule) {
        return $rule->execute($user, $item, $params);
    }
    throw new InvalidConfigException("Rule not found: {$item->ruleName}");
}

            
getAssignment() 公共抽象方法

定义于: yii\rbac\ManagerInterface::getAssignment()

返回有关角色和用户的分配信息。

public abstract yii\rbac\Assignment|null getAssignment ( $roleName, $userId )
$roleName string

角色名称

$userId string|integer

用户 ID(参见 yii\web\User::$id

返回值 yii\rbac\Assignment|null

分配信息。如果该角色未分配给用户,则返回 Null。

                public function getAssignment($roleName, $userId);

            
getAssignments() 公共抽象方法

定义于: yii\rbac\ManagerInterface::getAssignments()

返回指定用户的全部角色分配信息。

public abstract yii\rbac\Assignment[] getAssignments ( $userId )
$userId string|integer

用户 ID(参见 yii\web\User::$id

返回值 yii\rbac\Assignment[]

以角色名称为索引的分配。如果用户没有分配任何角色,则将返回一个空数组。

                public function getAssignments($userId);

            
getBehavior() 公共方法

定义于: yii\base\Component::getBehavior()

返回命名行为对象。

public yii\base\Behavior|null getBehavior ( $name )
$name string

行为名称

返回值 yii\base\Behavior|null

行为对象,如果行为不存在则为 null

                public function getBehavior($name)
{
    $this->ensureBehaviors();
    return isset($this->_behaviors[$name]) ? $this->_behaviors[$name] : null;
}

            
getBehaviors() 公共方法

定义于: yii\base\Component::getBehaviors()

返回附加到此组件的所有行为。

public yii\base\Behavior[] getBehaviors ( )
返回值 yii\base\Behavior[]

附加到此组件的行为列表

                public function getBehaviors()
{
    $this->ensureBehaviors();
    return $this->_behaviors;
}

            
getChildRoles() 公共抽象方法 (自版本 2.0.10 起可用)

定义于: yii\rbac\ManagerInterface::getChildRoles()

返回指定角色的子角色。深度不受限制。

public abstract yii\rbac\Role[] getChildRoles ( $roleName )
$roleName string

要为其查找子角色的角色名称

返回值 yii\rbac\Role[]

子角色。该数组以角色名称为索引。第一个元素是父角色本身的实例。

抛出 yii\base\InvalidParamException

如果未找到通过 $roleName 获取的角色

                public function getChildRoles($roleName);

            
getChildren() 公共抽象方法

定义于: yii\rbac\ManagerInterface::getChildren()

返回子权限和/或角色。

public abstract yii\rbac\Item[] getChildren ( $name )
$name string

父项名称

返回值 yii\rbac\Item[]

子权限和/或角色

                public function getChildren($name);

            
getDefaultRoleInstances() 公共方法 (从版本 2.0.12 开始可用)

返回作为 Role 对象数组的 defaultRoles。

public yii\rbac\Role[] getDefaultRoleInstances ( )
返回值 yii\rbac\Role[]

默认角色。数组以角色名称为索引

                public function getDefaultRoleInstances()
{
    $result = [];
    foreach ($this->defaultRoles as $roleName) {
        $result[$roleName] = $this->createRole($roleName);
    }
    return $result;
}

            
getDefaultRoles() 公共方法 (从版本 2.0.14 开始可用)

获取默认角色

public string[] getDefaultRoles ( )
返回值 string[]

默认角色

                public function getDefaultRoles()
{
    return $this->defaultRoles;
}

            
getItem() 受保护抽象方法

返回命名身份验证项目。

protected abstract yii\rbac\Item|null getItem ( $name )
$name string

授权项名称。

返回值 yii\rbac\Item|null

与指定名称对应的授权项。如果不存在这样的项,则返回 null。

                abstract protected function getItem($name);

            
getItems() 受保护抽象方法

返回指定类型的项目。

protected abstract yii\rbac\Item[] getItems ( $type )
$type integer

授权项类型(yii\rbac\Item::TYPE_ROLEyii\rbac\Item::TYPE_PERMISSION

返回值 yii\rbac\Item[]

指定类型的授权项。

                abstract protected function getItems($type);

            
getPermission() 公共方法

返回命名权限。

public yii\rbac\Permission|null getPermission ( $name )
$name string

权限名称。

返回值 yii\rbac\Permission|null

与指定名称对应的权限。如果不存在这样的权限,则返回 null。

                public function getPermission($name)
{
    $item = $this->getItem($name);
    return $item instanceof Item && $item->type == Item::TYPE_PERMISSION ? $item : null;
}

            
getPermissions() 公共方法

返回系统中的所有权限。

public yii\rbac\Permission[] getPermissions ( )
返回值 yii\rbac\Permission[]

系统中的所有权限。数组以权限名称为索引。

                public function getPermissions()
{
    return $this->getItems(Item::TYPE_PERMISSION);
}

            
getPermissionsByRole() 公共抽象方法

定义于: yii\rbac\ManagerInterface::getPermissionsByRole()

返回指定角色代表的所有权限。

public abstract yii\rbac\Permission[] getPermissionsByRole ( $roleName )
$roleName string

角色名称

返回值 yii\rbac\Permission[]

角色代表的所有权限。数组以权限名称为索引。

                public function getPermissionsByRole($roleName);

            
getPermissionsByUser() 公共抽象方法

定义于: yii\rbac\ManagerInterface::getPermissionsByUser()

返回用户拥有的所有权限。

public abstract yii\rbac\Permission[] getPermissionsByUser ( $userId )
$userId string|integer

用户 ID(参见 yii\web\User::$id

返回值 yii\rbac\Permission[]

用户拥有的所有权限。数组以权限名称为索引。

                public function getPermissionsByUser($userId);

            
getRole() 公共方法

返回命名角色。

public yii\rbac\Role|null getRole ( $name )
$name string

角色名称。

返回值 yii\rbac\Role|null

与指定名称对应的角色。如果不存在这样的角色,则返回 null。

                public function getRole($name)
{
    $item = $this->getItem($name);
    return $item instanceof Item && $item->type == Item::TYPE_ROLE ? $item : null;
}

            
getRoles() 公共方法

返回系统中的所有角色。

public yii\rbac\Role[] getRoles ( )
返回值 yii\rbac\Role[]

系统中的所有角色。数组以角色名称为索引。

                public function getRoles()
{
    return $this->getItems(Item::TYPE_ROLE);
}

            
getRolesByUser() 公共抽象方法

定义于: yii\rbac\ManagerInterface::getRolesByUser()

返回通过 assign() 分配给用户的角色。

注意,不会返回未直接分配给用户的子角色。

public abstract yii\rbac\Role[] getRolesByUser ( $userId )
$userId string|integer

用户 ID(参见 yii\web\User::$id

返回值 yii\rbac\Role[]

直接分配给用户的所有角色。数组以角色名称为索引。

                public function getRolesByUser($userId);

            
getRule() 公共抽象方法

定义于: yii\rbac\ManagerInterface::getRule()

返回指定名称的规则。

public abstract yii\rbac\Rule|null getRule ( $name )
$name string

规则名称

返回值 yii\rbac\Rule|null

规则对象,如果指定名称不对应任何规则,则返回 null。

                public function getRule($name);

            
getRules() 公共抽象方法

定义于: yii\rbac\ManagerInterface::getRules()

返回系统中可用的所有规则。

public abstract yii\rbac\Rule[] getRules ( )
返回值 yii\rbac\Rule[]

规则,索引为规则名称。

                public function getRules();

            
getUserIdsByRole() 公共抽象方法 (从版本 2.0.7 开始可用)

定义于: yii\rbac\ManagerInterface::getUserIdsByRole()

返回分配给指定角色的所有用户 ID。

public abstract array getUserIdsByRole ( $roleName )
$roleName string
返回值 array

用户 ID 字符串数组

                public function getUserIdsByRole($roleName);

            
hasChild() public abstract method

定义于: yii\rbac\ManagerInterface::hasChild()

返回一个值,指示子项是否已存在于父项中。

public abstract boolean hasChild ( $parent, $child )
$parent yii\rbac\Item
$child yii\rbac\Item
返回值 boolean

是否 $child 已经是 $parent 的子节点

                public function hasChild($parent, $child);

            
hasEventHandlers() public method

定义于: yii\base\Component::hasEventHandlers()

返回一个值,指示命名事件是否已附加任何处理程序。

public boolean hasEventHandlers ( $name )
$name string

事件名称

返回值 boolean

事件是否有任何处理程序附加

                public function hasEventHandlers($name)
{
    $this->ensureBehaviors();
    if (!empty($this->_events[$name])) {
        return true;
    }
    foreach ($this->_eventWildcards as $wildcard => $handlers) {
        if (!empty($handlers) && StringHelper::matchWildcard($wildcard, $name)) {
            return true;
        }
    }
    return Event::hasHandlers($this, $name);
}

            
hasMethod() public method

定义于: yii\base\Component::hasMethod()

返回一个值,指示方法是否已定义。

方法定义于

  • 类具有指定名称的方法
  • 附加的行为具有给定名称的方法(当 $checkBehaviors 为 true 时)。
public boolean hasMethod ( $name, $checkBehaviors true )
$name string

属性名称

$checkBehaviors boolean

是否将行为的方法视为此组件的方法

返回值 boolean

方法是否已定义

                public function hasMethod($name, $checkBehaviors = true)
{
    if (method_exists($this, $name)) {
        return true;
    } elseif ($checkBehaviors) {
        $this->ensureBehaviors();
        foreach ($this->_behaviors as $behavior) {
            if ($behavior->hasMethod($name)) {
                return true;
            }
        }
    }
    return false;
}

            
hasNoAssignments() protected method (available since version 2.0.11)

检查 $assignments 数组是否为空,以及 $defaultRoles 属性是否也为空。

protected boolean hasNoAssignments ( array $assignments )
$assignments yii\rbac\Assignment[]

用户分配的数组

返回值 boolean

是否 $assignments 数组为空,且 $defaultRoles 属性也为空

                protected function hasNoAssignments(array $assignments)
{
    return empty($assignments) && empty($this->defaultRoles);
}

            
hasProperty() public method

定义于: yii\base\Component::hasProperty()

返回一个值,指示此组件是否已定义属性。

属性定义于

  • 类具有与指定名称关联的 getter 或 setter 方法(在这种情况下,属性名称不区分大小写);
  • 类具有与指定名称相同的成员变量(当 $checkVars 为 true 时);
  • 附加的行为具有给定名称的属性(当 $checkBehaviors 为 true 时)。

另见

public boolean hasProperty ( $name, $checkVars true, $checkBehaviors true )
$name string

属性名称

$checkVars boolean

是否将成员变量视为属性

$checkBehaviors boolean

是否将行为的属性视为此组件的属性

返回值 boolean

属性是否已定义

                public function hasProperty($name, $checkVars = true, $checkBehaviors = true)
{
    return $this->canGetProperty($name, $checkVars, $checkBehaviors) || $this->canSetProperty($name, false, $checkBehaviors);
}

            
init() public method

定义于: yii\base\BaseObject::init()

初始化对象。

此方法在构造函数结束时调用,在对象使用给定的配置初始化后。

public void init ( )

                public function init()
{
}

            
off() public method

定义于: yii\base\Component::off()

从此组件中分离现有的事件处理程序。

此方法是 on() 的反面。

注意:如果事件名称传递了通配符模式,则只会删除使用此通配符注册的处理程序,而使用与该通配符匹配的纯名称注册的处理程序将保留。

另见 on().

public boolean off ( $name, $handler null )
$name string

事件名称

$handler callable|null

要移除的事件处理程序。如果为 null,则将移除附加到该命名事件的所有处理程序。

返回值 boolean

如果找到并分离了处理程序

                public function off($name, $handler = null)
{
    $this->ensureBehaviors();
    if (empty($this->_events[$name]) && empty($this->_eventWildcards[$name])) {
        return false;
    }
    if ($handler === null) {
        unset($this->_events[$name], $this->_eventWildcards[$name]);
        return true;
    }
    $removed = false;
    // plain event names
    if (isset($this->_events[$name])) {
        foreach ($this->_events[$name] as $i => $event) {
            if ($event[0] === $handler) {
                unset($this->_events[$name][$i]);
                $removed = true;
            }
        }
        if ($removed) {
            $this->_events[$name] = array_values($this->_events[$name]);
            return true;
        }
    }
    // wildcard event names
    if (isset($this->_eventWildcards[$name])) {
        foreach ($this->_eventWildcards[$name] as $i => $event) {
            if ($event[0] === $handler) {
                unset($this->_eventWildcards[$name][$i]);
                $removed = true;
            }
        }
        if ($removed) {
            $this->_eventWildcards[$name] = array_values($this->_eventWildcards[$name]);
            // remove empty wildcards to save future redundant regex checks:
            if (empty($this->_eventWildcards[$name])) {
                unset($this->_eventWildcards[$name]);
            }
        }
    }
    return $removed;
}

            
on() public method

定义于: yii\base\Component::on()

将事件处理程序附加到事件。

事件处理程序必须是一个有效的 PHP 回调。以下是一些示例

function ($event) { ... }         // anonymous function
[$object, 'handleClick']          // $object->handleClick()
['Page', 'handleClick']           // Page::handleClick()
'handleClick'                     // global function handleClick()

事件处理程序必须使用以下签名定义,

function ($event)

其中 $event 是一个 yii\base\Event 对象,它包含与事件相关的参数。

从 2.0.14 开始,您可以将事件名称指定为通配符模式

$component->on('event.group.*', function ($event) {
    Yii::trace($event->name . ' is triggered.');
});

另见 off().

public void on ( $name, $handler, $data null, $append true )
$name string

事件名称

$handler callable

事件处理程序

$data mixed

触发事件时传递给事件处理程序的数据。当调用事件处理程序时,可以通过 yii\base\Event::$data 访问此数据。

$append boolean

是否将新的事件处理程序附加到现有处理程序列表的末尾。如果为 false,则新的处理程序将插入到现有处理程序列表的开头。

                public function on($name, $handler, $data = null, $append = true)
{
    $this->ensureBehaviors();
    if (strpos($name, '*') !== false) {
        if ($append || empty($this->_eventWildcards[$name])) {
            $this->_eventWildcards[$name][] = [$handler, $data];
        } else {
            array_unshift($this->_eventWildcards[$name], [$handler, $data]);
        }
        return;
    }
    if ($append || empty($this->_events[$name])) {
        $this->_events[$name][] = [$handler, $data];
    } else {
        array_unshift($this->_events[$name], [$handler, $data]);
    }
}

            
remove() public method

从 RBAC 系统中删除角色、权限或规则。

public boolean remove ( $object )
$object yii\rbac\Role|yii\rbac\Permission|yii\rbac\Rule
返回值 boolean

角色、权限或规则是否成功移除

                public function remove($object)
{
    if ($object instanceof Item) {
        return $this->removeItem($object);
    } elseif ($object instanceof Rule) {
        return $this->removeRule($object);
    }
    throw new InvalidArgumentException('Removing unsupported object type.');
}

            
removeAll() public abstract method

定义于: yii\rbac\ManagerInterface::removeAll()

删除所有授权数据,包括角色、权限、规则和分配。

public abstract void removeAll ( )

                public function removeAll();

            
removeAllAssignments() public abstract method

定义于: yii\rbac\ManagerInterface::removeAllAssignments()

删除所有角色分配。

public abstract void removeAllAssignments ( )

                public function removeAllAssignments();

            
removeAllPermissions() public abstract method

定义于: yii\rbac\ManagerInterface::removeAllPermissions()

删除所有权限。

所有父级子级关系将相应调整。

public abstract void removeAllPermissions ( )

                public function removeAllPermissions();

            
removeAllRoles() public abstract method

定义于: yii\rbac\ManagerInterface::removeAllRoles()

删除所有角色。

所有父级子级关系将相应调整。

public abstract void removeAllRoles ( )

                public function removeAllRoles();

            
removeAllRules() public abstract method

定义于: yii\rbac\ManagerInterface::removeAllRules()

删除所有规则。

所有具有规则的角色和权限将相应调整。

public abstract void removeAllRules ( )

                public function removeAllRules();

            
removeChild() public abstract method

定义于: yii\rbac\ManagerInterface::removeChild()

从其父级中删除子级。

注意,子项不会被删除。只有父子关系被移除。

public abstract boolean removeChild ( $parent, $child )
$parent yii\rbac\Item
$child yii\rbac\Item
返回值 boolean

移除是否成功

                public function removeChild($parent, $child);

            
removeChildren() public abstract method

定义于: yii\rbac\ManagerInterface::removeChildren()

从其父级中删除所有子级。

注意,子项不会被删除。只有父子关系被移除。

public abstract boolean removeChildren ( $parent )
$parent yii\rbac\Item
返回值 boolean

移除是否成功

                public function removeChildren($parent);

            
removeItem() protected abstract method

从 RBAC 系统中删除身份验证项目。

protected abstract boolean removeItem ( $item )
$item yii\rbac\Item

要移除的项

返回值 boolean

角色或权限是否成功移除

抛出 异常

如果数据验证或保存失败(例如角色或权限的名称不唯一)

                abstract protected function removeItem($item);

            
removeRule() protected abstract method

从 RBAC 系统中删除规则。

protected abstract boolean removeRule ( $rule )
$rule yii\rbac\Rule

要移除的规则

返回值 boolean

规则是否成功移除

抛出 异常

如果数据验证或保存失败(例如规则的名称不唯一)

                abstract protected function removeRule($rule);

            
revoke() public abstract method

定义于: yii\rbac\ManagerInterface::revoke()

从用户撤销角色。

public abstract boolean revoke ( $role, $userId )
$role yii\rbac\Role|yii\rbac\Permission
$userId string|integer

用户 ID(参见 yii\web\User::$id

返回值 boolean

撤销是否成功

                public function revoke($role, $userId);

            
revokeAll() public abstract method

定义于: yii\rbac\ManagerInterface::revokeAll()

从用户撤销所有角色。

public abstract boolean revokeAll ( $userId )
$userId mixed

用户 ID(参见 yii\web\User::$id

返回值 boolean

撤销是否成功

                public function revokeAll($userId);

            
setDefaultRoles() public method (available since version 2.0.14)

设置默认角色

public void setDefaultRoles ( $roles )
$roles string[]|Closure

角色数组或返回角色数组的可调用对象

抛出 yii\base\InvalidArgumentException

当 $roles 既不是数组也不是 Closure 时

抛出 yii\base\InvalidValueException

当 Closure 返回的不是数组时

                public function setDefaultRoles($roles)
{
    if (is_array($roles)) {
        $this->defaultRoles = $roles;
    } elseif ($roles instanceof \Closure) {
        $roles = call_user_func($roles);
        if (!is_array($roles)) {
            throw new InvalidValueException('Default roles closure must return an array');
        }
        $this->defaultRoles = $roles;
    } else {
        throw new InvalidArgumentException('Default roles must be either an array or a callable');
    }
}

            
trigger() public method

定义于: yii\base\Component::trigger()

触发事件。

此方法表示事件的发生。它调用事件的所有附加处理程序,包括类级处理程序。

public void trigger ( $name, yii\base\Event $event null )
$name string

事件名称

$event yii\base\Event|null

事件实例。如果未设置,将创建默认的 yii\base\Event 对象。

                public function trigger($name, Event $event = null)
{
    $this->ensureBehaviors();
    $eventHandlers = [];
    foreach ($this->_eventWildcards as $wildcard => $handlers) {
        if (StringHelper::matchWildcard($wildcard, $name)) {
            $eventHandlers[] = $handlers;
        }
    }
    if (!empty($this->_events[$name])) {
        $eventHandlers[] = $this->_events[$name];
    }
    if (!empty($eventHandlers)) {
        $eventHandlers = call_user_func_array('array_merge', $eventHandlers);
        if ($event === null) {
            $event = new Event();
        }
        if ($event->sender === null) {
            $event->sender = $this;
        }
        $event->handled = false;
        $event->name = $name;
        foreach ($eventHandlers as $handler) {
            $event->data = $handler[1];
            call_user_func($handler[0], $event);
            // stop further handling if the event is handled
            if ($event->handled) {
                return;
            }
        }
    }
    // invoke class-level attached handlers
    Event::trigger($this, $name, $event);
}

            
update() public method

更新系统中的指定角色、权限或规则。

public boolean update ( $name, $object )
$name string

角色、权限或规则的旧名称

$object yii\rbac\Role|yii\rbac\Permission|yii\rbac\Rule
返回值 boolean

更新是否成功

抛出 异常

如果数据验证或保存失败(例如角色或权限的名称不唯一)

                public function update($name, $object)
{
    if ($object instanceof Item) {
        if ($object->ruleName && $this->getRule($object->ruleName) === null) {
            $rule = \Yii::createObject($object->ruleName);
            $rule->name = $object->ruleName;
            $this->addRule($rule);
        }
        return $this->updateItem($name, $object);
    } elseif ($object instanceof Rule) {
        return $this->updateRule($name, $object);
    }
    throw new InvalidArgumentException('Updating unsupported object type.');
}

            
updateItem() protected abstract method

更新 RBAC 系统中的身份验证项目。

protected abstract boolean updateItem ( $name, $item )
$name string

正在更新的项的名称

$item yii\rbac\Item

更新后的项

返回值 boolean

授权项是否成功更新

抛出 异常

如果数据验证或保存失败(例如角色或权限的名称不唯一)

                abstract protected function updateItem($name, $item);

            
updateRule() 受保护的抽象方法

更新 RBAC 系统中的规则。

受保护的抽象 boolean updateRule ( $name, $rule )
$name string

要更新的规则的名称

$rule yii\rbac\Rule

更新后的规则

返回值 boolean

规则是否成功更新

抛出 异常

如果数据验证或保存失败(例如规则的名称不唯一)

                abstract protected function updateRule($name, $rule);