0 フォロワー

クラス yii\rbac\DbManager

継承yii\rbac\DbManager » yii\rbac\BaseManager » yii\base\Component » yii\base\BaseObject
実装yii\base\Configurable, yii\rbac\ManagerInterface
利用可能なバージョン2.0
ソースコード https://github.com/yiisoft/yii2/blob/master/framework/rbac/DbManager.php

DbManager は、認証情報をデータベースに保存する認証マネージャーを表します。

データベース接続は $db で指定します。データベーススキーマはマイグレーションを適用することで初期化できます。

yii migrate --migrationPath=@yii/rbac/migrations/

マイグレーションを使いたくなく、代わりに SQL が必要な場合は、すべてのデータベースのファイルが migrations ディレクトリにあります。

認証とルールデータを保存するために使用するテーブルの名前を変更するには、$itemTable$itemChildTable$assignmentTable および $ruleTable を設定します。

DbManager の詳細および使用法については、セキュリティ認証に関するガイド記事を参照してください。

公開プロパティ

継承されたプロパティを隠す

プロパティ 説明 定義元
$assignmentTable string 認証アイテムの割り当てを保存するテーブルの名前。 yii\rbac\DbManager
$behaviors yii\base\Behavior[] このコンポーネントにアタッチされたビヘイビアのリスト。 yii\base\Component
$cache yii\caching\CacheInterface|array|string|null RBAC パフォーマンスを向上させるために使用されるキャッシュ。 yii\rbac\DbManager
$cacheKey string キャッシュに RBAC データを保存するために使用されるキー yii\rbac\DbManager
$checkAccessAssignments array ユーザーの割り当て (ユーザー ID => 割り当て[]) yii\rbac\DbManager
$db yii\db\Connection|array|string DB 接続オブジェクトまたは DB 接続のアプリケーションコンポーネント ID。 yii\rbac\DbManager
$defaultRoleInstances yii\rbac\Role[] デフォルトロール。 yii\rbac\BaseManager
$defaultRoles array assign() を呼び出すことなく、すべてのユーザーに自動的に割り当てられるロール名のリスト。 yii\rbac\BaseManager
$itemChildTable string 認証アイテムの階層を保存するテーブルの名前。 yii\rbac\DbManager
$itemTable string 認証アイテムを保存するテーブルの名前。 yii\rbac\DbManager
$items yii\rbac\Item[] すべての認証アイテム (名前 => アイテム) yii\rbac\DbManager
$parents array 認証アイテムの親子関係 (子名 => 親のリスト) yii\rbac\DbManager
$permissions yii\rbac\Permission[] システム内のすべてのパーミッション。 yii\rbac\BaseManager
$roles yii\rbac\Role[] システム内のすべてのロール。 yii\rbac\BaseManager
$rolesCacheSuffix string ユーザーの RBAC ロールをキャッシュに保存するために使用されるキー yii\rbac\DbManager
$ruleTable string ルールを保存するテーブルの名前。 yii\rbac\DbManager
$rules yii\rbac\Rule[] すべての認証ルール (名前 => ルール) yii\rbac\DbManager

保護されたプロパティ

継承されたプロパティを隠す

プロパティ 説明 定義元

公開メソッド

継承されたメソッドを隠す

メソッド 説明 定義元
__call() クラスメソッドではない名前付きメソッドを呼び出します。 yii\base\Component
__clone() このメソッドは、既存のオブジェクトを複製することによってオブジェクトが作成された後に呼び出されます。 yii\base\Component
__construct() コンストラクタ。 yii\base\BaseObject
__get() コンポーネントプロパティの値を返します。 yii\base\Component
__isset() プロパティが設定されている、つまり定義されており、null でないかどうかを確認します。 yii\base\Component
__set() コンポーネントプロパティの値を設定します。 yii\base\Component
__unset() コンポーネントプロパティを null に設定します。 yii\base\Component
add() ロール、パーミッション、またはルールを RBAC システムに追加します。 yii\rbac\BaseManager
addChild() アイテムを別のアイテムの子として追加します。 yii\rbac\DbManager
assign() ユーザーにロールを割り当てます。 yii\rbac\DbManager
attachBehavior() このコンポーネントにビヘイビアをアタッチします。 yii\base\Component
attachBehaviors() コンポーネントにビヘイビアのリストをアタッチします。 yii\base\Component
behaviors() このコンポーネントが動作するはずのビヘイビアのリストを返します。 yii\base\Component
canAddChild() 親に子を追加できるかどうかを確認します。 yii\rbac\DbManager
canGetProperty() プロパティを読み取ることができるかどうかを示す値を返します。 yii\base\Component
canSetProperty() プロパティを設定できるかどうかを示す値を返します。 yii\base\Component
checkAccess() yii\rbac\DbManager
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\DbManager
getAssignments() 指定されたユーザーのすべてのロール割り当て情報を返します。 yii\rbac\DbManager
getBehavior() 名前付きビヘイビアオブジェクトを返します。 yii\base\Component
getBehaviors() このコンポーネントにアタッチされたすべてのビヘイビアを返します。 yii\base\Component
getChildRoles() 指定されたロールの子ロールを返します。深さに制限はありません。 yii\rbac\DbManager
getChildren() 子パーミッションおよび/またはロールを返します。 yii\rbac\DbManager
getDefaultRoleInstances() Role オブジェクトの配列として defaultRoles を返します。 yii\rbac\BaseManager
getDefaultRoles() デフォルトロールを取得します yii\rbac\BaseManager
getPermission() 名前付きパーミッションを返します。 yii\rbac\BaseManager
getPermissions() システム内のすべてのパーミッションを返します。 yii\rbac\BaseManager
getPermissionsByRole() 指定されたロールが表すすべてのパーミッションを返します。 yii\rbac\DbManager
getPermissionsByUser() ユーザーが持つすべてのパーミッションを返します。 yii\rbac\DbManager
getRole() 名前付きロールを返します。 yii\rbac\BaseManager
getRoles() システム内のすべてのロールを返します。 yii\rbac\BaseManager
getRolesByUser() {@inheritdoc} このメソッドによって返されるロールには、$defaultRoles を介して割り当てられたロールが含まれます。 yii\rbac\DbManager
getRule() 指定された名前のルールを返します。 yii\rbac\DbManager
getRules() システムで利用可能なすべてのルールを返します。 yii\rbac\DbManager
getUserIdsByRole() 指定されたロールのすべてのロール割り当て情報を返します。 yii\rbac\DbManager
hasChild() 親に子がすでに存在するかどうかを示す値を返します。 yii\rbac\DbManager
hasEventHandlers() 名前付きイベントにアタッチされたハンドラーがあるかどうかを示す値を返します。 yii\base\Component
hasMethod() メソッドが定義されているかどうかを示す値を返します。 yii\base\Component
hasProperty() プロパティがこのコンポーネントで定義されているかどうかを示す値を返します。 yii\base\Component
init() アプリケーションコンポーネントを初期化します。 yii\rbac\DbManager
invalidateCache() yii\rbac\DbManager
loadFromCache() yii\rbac\DbManager
off() 既存のイベントハンドラーをこのコンポーネントから切り離します。 yii\base\Component
on() イベントにイベントハンドラーをアタッチします。 yii\base\Component
remove() RBACシステムからロール、パーミッション、またはルールを削除します。 yii\rbac\BaseManager
removeAll() ロール、パーミッション、ルール、および割り当てを含むすべての認証データを削除します。 yii\rbac\DbManager
removeAllAssignments() すべてのロール割り当てを削除します。 yii\rbac\DbManager
removeAllPermissions() すべてのパーミッションを削除します。 yii\rbac\DbManager
removeAllRoles() すべてのロールを削除します。 yii\rbac\DbManager
removeAllRules() すべてのルールを削除します。 yii\rbac\DbManager
removeChild() 子を親から削除します。 yii\rbac\DbManager
removeChildren() すべての子を親から削除します。 yii\rbac\DbManager
revoke() ユーザーからロールを取り消します。 yii\rbac\DbManager
revokeAll() ユーザーからすべてのロールを取り消します。 yii\rbac\DbManager
setDefaultRoles() デフォルトのロールを設定します。 yii\rbac\BaseManager
trigger() イベントをトリガーします。 yii\base\Component
update() システム内の指定されたロール、パーミッション、またはルールを更新します。 yii\rbac\BaseManager

保護されたメソッド

継承されたメソッドを隠す

メソッド 説明 定義元
addItem() 認証項目をRBACシステムに追加します。 yii\rbac\DbManager
addRule() ルールをRBACシステムに追加します。 yii\rbac\DbManager
checkAccessFromCache() キャッシュからロードされたデータに基づいて、指定されたユーザーのアクセスチェックを実行します。 yii\rbac\DbManager
checkAccessRecursive() 指定されたユーザーのアクセスチェックを実行します。 yii\rbac\DbManager
detectLoop() 認証項目階層にループがあるかどうかをチェックします。 yii\rbac\DbManager
executeRule() 指定された認証項目に関連付けられたルールを実行します。 yii\rbac\BaseManager
getChildrenList() すべての親の子を返します。 yii\rbac\DbManager
getChildrenRecursive() 指定された項目のすべての子と孫を再帰的に検索します。 yii\rbac\DbManager
getDirectPermissionsByUser() ユーザーに直接割り当てられているすべてのパーミッションを返します。 yii\rbac\DbManager
getInheritedPermissionsByUser() ユーザーが割り当てられたロールから継承するすべてのパーミッションを返します。 yii\rbac\DbManager
getItem() 名前付き認証項目を返します。 yii\rbac\DbManager
getItems() 指定されたタイプの項目を返します。 yii\rbac\DbManager
hasNoAssignments() $assignmentsの配列が空かどうか、および$defaultRolesプロパティも空かどうかをチェックします。 yii\rbac\BaseManager
isEmptyUserId() $userIdが空かどうかをチェックします。 yii\rbac\DbManager
populateItem() データベースからフェッチされたデータで認証項目を埋めます。 yii\rbac\DbManager
removeAllItems() 指定されたタイプのすべての認証項目を削除します。 yii\rbac\DbManager
removeItem() RBACシステムから認証項目を削除します。 yii\rbac\DbManager
removeRule() RBACシステムからルールを削除します。 yii\rbac\DbManager
supportsCascadeUpdate() データベースがカスケード更新および削除をサポートするかどうかを示す値を返します。 yii\rbac\DbManager
updateItem() RBACシステム内の認証項目を更新します。 yii\rbac\DbManager
updateRule() ルールをRBACシステムに更新します。 yii\rbac\DbManager

プロパティの詳細

継承されたプロパティを隠す

$assignmentTable public プロパティ

認証項目の割り当てを格納するテーブルの名前。デフォルトは"auth_assignment"です。

public string $assignmentTable '{{%auth_assignment}}'
$cache public プロパティ (バージョン 2.0.3 以降)

RBACのパフォーマンスを向上させるために使用されるキャッシュ。これは次のいずれかになります

  • アプリケーションコンポーネントID(例:cache
  • 構成配列
  • yii\caching\Cacheオブジェクト

これが設定されていない場合、キャッシュが無効になっていることを意味します。

RBACキャッシュを有効にすると、すべての認証項目、ルール、および認証項目の親子関係がキャッシュされ、メモリにロードされることに注意してください。これにより、RBAC権限チェックのパフォーマンスが向上します。ただし、余分なメモリが必要になるため、RBACシステムに多数の認証項目が含まれている場合は適切ではない可能性があります。この場合は、他のRBAC実装(例:Redisストレージに基づくRBAC)を検討する必要があります。

また、このコンポーネントの外部からRBAC項目、ルール、または親子関係を変更する場合は、データの整合性を確保するために手動でinvalidateCache()を呼び出す必要があることに注意してください。

$cacheKey public プロパティ (バージョン 2.0.3 以降)

キャッシュに RBAC データを保存するために使用されるキー

$cacheも参照してください。

public string $cacheKey 'rbac'
$checkAccessAssignments protected プロパティ

ユーザーの割り当て (ユーザー ID => 割り当て[])

$db public プロパティ

DB接続オブジェクト、またはDB接続のアプリケーションコンポーネントID。DbManagerオブジェクトを作成した後でこのプロパティを変更する場合は、DB接続オブジェクトのみを割り当てる必要があります。バージョン2.0.2以降では、オブジェクトを作成するための構成配列にすることもできます。

$itemChildTable public プロパティ

認証項目階層を格納するテーブルの名前。デフォルトは"auth_item_child"です。

public string $itemChildTable '{{%auth_item_child}}'
$itemTable public プロパティ

認証項目を格納するテーブルの名前。デフォルトは"auth_item"です。

public string $itemTable '{{%auth_item}}'
$items protected プロパティ

すべての認証アイテム (名前 => アイテム)

protected yii\rbac\Item[] $items null
$parents protected プロパティ

認証アイテムの親子関係 (子名 => 親のリスト)

protected array $parents null
$rolesCacheSuffix public プロパティ (バージョン 2.0.48 以降)

ユーザーの RBAC ロールをキャッシュに保存するために使用されるキー

public string $rolesCacheSuffix 'roles'
$ruleTable public プロパティ

ルールを格納するテーブルの名前。デフォルトは "auth_rule" です。

public string $ruleTable '{{%auth_rule}}'
$rules protected プロパティ

すべての認証ルール (名前 => ルール)

protected yii\rbac\Rule[] $rules null

メソッドの詳細

継承されたメソッドを隠す

__call() public メソッド

定義元: yii\base\Component::__call()

クラスメソッドではない名前付きメソッドを呼び出します。

このメソッドは、アタッチされたビヘイビアに指定された名前のメソッドがあるかどうかをチェックし、あればそれを実行します。

このメソッドは、不明なメソッドが呼び出されたときに暗黙的に呼び出される PHP のマジックメソッドであるため、直接呼び出さないでください。

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

メソッド名

$params array

メソッドのパラメータ

return mixed

メソッドの戻り値

throws 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() public メソッド

定義元: yii\base\Component::__clone()

このメソッドは、既存のオブジェクトを複製することによってオブジェクトが作成された後に呼び出されます。

古いオブジェクトにアタッチされているため、すべてのビヘイビアを削除します。

public void __clone ( )

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

            
__construct() public メソッド

定義元: yii\base\BaseObject::__construct()

コンストラクタ。

デフォルトの実装では、次の2つの処理を行います。

  • 与えられた設定 $config でオブジェクトを初期化します。
  • init() を呼び出します。

このメソッドが子クラスでオーバーライドされる場合、次のことが推奨されます。

  • コンストラクタの最後のパラメータは、ここでの $config のように設定配列であること。
  • コンストラクタの最後に親の実装を呼び出すこと。
public void __construct ( $config = [] )
$config array

オブジェクトのプロパティを初期化するために使用される名前と値のペア

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

            
__get() public メソッド

定義元: yii\base\Component::__get()

コンポーネントプロパティの値を返します。

このメソッドは、以下の順序でチェックし、それに応じて動作します。

  • ゲッターによって定義されたプロパティ:ゲッターの結果を返します
  • ビヘイビアのプロパティ:ビヘイビアのプロパティ値を返します

このメソッドは、$value = $component->property; を実行したときに暗黙的に呼び出される PHP のマジックメソッドであるため、直接呼び出さないでください。

関連項目: __set()

public mixed __get ( $name )
$name string

プロパティ名

return mixed

プロパティ値、またはビヘイビアのプロパティの値

throws yii\base\UnknownPropertyException

プロパティが定義されていない場合

throws 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() public メソッド

定義元: yii\base\Component::__isset()

プロパティが設定されている、つまり定義されており、null でないかどうかを確認します。

このメソッドは、以下の順序でチェックし、それに応じて動作します。

  • セッターによって定義されたプロパティ:プロパティが設定されているかどうかを返します
  • ビヘイビアのプロパティ:プロパティが設定されているかどうかを返します
  • 存在しないプロパティに対しては false を返します

このメソッドは、isset($component->property) を実行したときに暗黙的に呼び出される PHP のマジックメソッドであるため、直接呼び出さないでください。

関連項目: https://www.php.net/manual/en/function.isset.php

public boolean __isset ( $name )
$name string

プロパティ名またはイベント名

return 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() public メソッド

定義元: yii\base\Component::__set()

コンポーネントプロパティの値を設定します。

このメソッドは、以下の順序でチェックし、それに応じて動作します。

  • セッターによって定義されたプロパティ:プロパティ値を設定します
  • "on xyz" の形式のイベント:ハンドラをイベント "xyz" にアタッチします
  • "as xyz" の形式のビヘイビア:"xyz" という名前のビヘイビアをアタッチします
  • ビヘイビアのプロパティ:ビヘイビアのプロパティ値を設定します

このメソッドは、$component->property = $value; を実行したときに暗黙的に呼び出される PHP のマジックメソッドであるため、直接呼び出さないでください。

関連項目: __get()

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

プロパティ名またはイベント名

$value mixed

プロパティ値

throws yii\base\UnknownPropertyException

プロパティが定義されていない場合

throws 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() public メソッド

定義元: yii\base\Component::__unset()

コンポーネントプロパティを null に設定します。

このメソッドは、以下の順序でチェックし、それに応じて動作します。

  • セッターによって定義されたプロパティ:プロパティ値を null に設定します
  • ビヘイビアのプロパティ:プロパティ値を null に設定します

このメソッドは、unset($component->property) を実行したときに暗黙的に呼び出される PHP のマジックメソッドであるため、直接呼び出さないでください。

関連項目: https://www.php.net/manual/en/function.unset.php

public void __unset ( $name )
$name string

プロパティ名

throws 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() public メソッド

定義元: yii\rbac\BaseManager::add()

ロール、パーミッション、またはルールを RBAC システムに追加します。

public boolean add ( $object )
$object yii\rbac\Role|yii\rbac\Permission|yii\rbac\Rule
return boolean

ロール、パーミッション、またはルールがシステムに正常に追加されたかどうか

throws 例外

データ検証または保存に失敗した場合(ロールまたはパーミッションの名前が一意でない場合など)

                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 メソッド

アイテムを別のアイテムの子として追加します。

public boolean addChild ( $parent, $child )
$parent yii\rbac\Item
$child yii\rbac\Item
return boolean

子要素が正常に追加されたかどうか

throws yii\base\Exception

親と子の関係がすでに存在する場合、またはループが検出された場合。

                public function addChild($parent, $child)
{
    if ($parent->name === $child->name) {
        throw new InvalidArgumentException("Cannot add '{$parent->name}' as a child of itself.");
    }
    if ($parent instanceof Permission && $child instanceof Role) {
        throw new InvalidArgumentException('Cannot add a role as a child of a permission.');
    }
    if ($this->detectLoop($parent, $child)) {
        throw new InvalidCallException("Cannot add '{$child->name}' as a child of '{$parent->name}'. A loop has been detected.");
    }
    $this->db->createCommand()
        ->insert($this->itemChildTable, ['parent' => $parent->name, 'child' => $child->name])
        ->execute();
    $this->invalidateCache();
    return true;
}

            
addItem() protected メソッド

認証項目をRBACシステムに追加します。

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

追加するアイテム

return boolean

認証アイテムがシステムに正常に追加されたかどうか

throws 例外

データ検証または保存に失敗した場合(ロールまたはパーミッションの名前が一意でない場合など)

                protected function addItem($item)
{
    $time = time();
    if ($item->createdAt === null) {
        $item->createdAt = $time;
    }
    if ($item->updatedAt === null) {
        $item->updatedAt = $time;
    }
    $this->db->createCommand()
        ->insert($this->itemTable, [
            'name' => $item->name,
            'type' => $item->type,
            'description' => $item->description,
            'rule_name' => $item->ruleName,
            'data' => $item->data === null ? null : serialize($item->data),
            'created_at' => $item->createdAt,
            'updated_at' => $item->updatedAt,
        ])->execute();
    $this->invalidateCache();
    return true;
}

            
addRule() protected メソッド

ルールをRBACシステムに追加します。

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

追加するルール

return boolean

ルールがシステムに正常に追加されたかどうか

throws 例外

データ検証または保存に失敗した場合(ルールの名前が一意でない場合など)

                protected function addRule($rule)
{
    $time = time();
    if ($rule->createdAt === null) {
        $rule->createdAt = $time;
    }
    if ($rule->updatedAt === null) {
        $rule->updatedAt = $time;
    }
    $this->db->createCommand()
        ->insert($this->ruleTable, [
            'name' => $rule->name,
            'data' => serialize($rule),
            'created_at' => $rule->createdAt,
            'updated_at' => $rule->updatedAt,
        ])->execute();
    $this->invalidateCache();
    return true;
}

            
assign() public メソッド

ユーザーにロールを割り当てます。

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

ユーザーID(yii\web\User::$idを参照)

return yii\rbac\Assignment

ロール割り当て情報。

throws 例外

ロールがすでにユーザーに割り当てられている場合

                public function assign($role, $userId)
{
    $assignment = new Assignment([
        'userId' => $userId,
        'roleName' => $role->name,
        'createdAt' => time(),
    ]);
    $this->db->createCommand()
        ->insert($this->assignmentTable, [
            'user_id' => $assignment->userId,
            'item_name' => $assignment->roleName,
            'created_at' => $assignment->createdAt,
        ])->execute();
    unset($this->checkAccessAssignments[(string) $userId]);
    $this->invalidateCache();
    return $assignment;
}

            
attachBehavior() public メソッド

定義元: 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オブジェクト
  • ビヘイビアクラスを指定する文字列
  • Yii::createObject()に渡してビヘイビアオブジェクトを作成するオブジェクト構成配列。
return yii\base\Behavior

ビヘイビアオブジェクト

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

            
attachBehaviors() public メソッド

定義元: 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 メソッド

定義元: yii\base\Component::behaviors()

このコンポーネントが動作するはずのビヘイビアのリストを返します。

子クラスは、このメソッドをオーバーライドして、動作させたいビヘイビアを指定できます。

このメソッドの戻り値は、ビヘイビア名でインデックス付けされたビヘイビアオブジェクトまたは構成の配列である必要があります。ビヘイビア構成は、ビヘイビアクラスを指定する文字列、または次の構造の配列のいずれかになります。

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

ビヘイビアクラスはyii\base\Behaviorを継承する必要があることに注意してください。ビヘイビアは、名前付きまたは匿名でアタッチできます。名前が配列キーとして使用されている場合、この名前を使用して、後でgetBehavior()を使用してビヘイビアを取得したり、detachBehavior()を使用してデタッチしたりできます。匿名ビヘイビアは、取得またはデタッチできません。

このメソッドで宣言されたビヘイビアは、コンポーネントに自動的にアタッチされます(オンデマンドで)。

public array behaviors ( )
return array

ビヘイビア構成。

                public function behaviors()
{
    return [];
}

            
canAddChild() public メソッド (バージョン 2.0.8 以降で利用可能)

親に子を追加できるかどうかを確認します。

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

親アイテム

$child yii\rbac\Item

階層に追加する子アイテム

return boolean

追加の可能性

                public function canAddChild($parent, $child)
{
    return !$this->detectLoop($parent, $child);
}

            
canGetProperty() public メソッド

定義元: yii\base\Component::canGetProperty()

プロパティを読み取ることができるかどうかを示す値を返します。

プロパティは、以下の場合に読み取ることができます。

  • クラスに、指定された名前に関連付けられたゲッターメソッドがある場合(この場合、プロパティ名は大文字と小文字が区別されません)。
  • クラスに、指定された名前のメンバ変数がある場合($checkVarsがtrueの場合)。
  • アタッチされたビヘイビアに、指定された名前の読み取り可能なプロパティがある場合($checkBehaviorsがtrueの場合)。

canSetProperty()も参照してください。

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

プロパティ名

$checkVars boolean

メンバ変数をプロパティとして扱うかどうか

$checkBehaviors boolean

ビヘイビアのプロパティをこのコンポーネントのプロパティとして扱うかどうか

return 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 メソッド

定義元: yii\base\Component::canSetProperty()

プロパティを設定できるかどうかを示す値を返します。

プロパティは、以下の場合に書き込み可能です。

  • クラスが指定された名前に関連付けられた setter メソッドを持っている場合 (この場合、プロパティ名は大小文字を区別しません);
  • クラスに、指定された名前のメンバ変数がある場合($checkVarsがtrueの場合)。
  • アタッチされたビヘイビアが、指定された名前の書き込み可能なプロパティを持っている場合 ($checkBehaviors が true の場合)。

参照: canGetProperty()

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

プロパティ名

$checkVars boolean

メンバ変数をプロパティとして扱うかどうか

$checkBehaviors boolean

ビヘイビアのプロパティをこのコンポーネントのプロパティとして扱うかどうか

return 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;
}

            
checkAccess() public メソッド

public void checkAccess ( $userId, $permissionName, $params = [] )
$userId
$permissionName
$params

                public function checkAccess($userId, $permissionName, $params = [])
{
    if (isset($this->checkAccessAssignments[(string) $userId])) {
        $assignments = $this->checkAccessAssignments[(string) $userId];
    } else {
        $assignments = $this->getAssignments($userId);
        $this->checkAccessAssignments[(string) $userId] = $assignments;
    }
    if ($this->hasNoAssignments($assignments)) {
        return false;
    }
    $this->loadFromCache();
    if ($this->items !== null) {
        return $this->checkAccessFromCache($userId, $permissionName, $params, $assignments);
    }
    return $this->checkAccessRecursive($userId, $permissionName, $params, $assignments);
}

            
checkAccessFromCache() protected メソッド (バージョン 2.0.3 から利用可能)

キャッシュからロードされたデータに基づいて、指定されたユーザーのアクセスチェックを実行します。

このメソッドは、$cache が有効になっている場合に checkAccess() によって内部的に呼び出されます。

protected boolean checkAccessFromCache ( $user, $itemName, $params, $assignments )
$user string|integer

ユーザー ID。これは、ユーザーの一意の識別子を表す整数または文字列のいずれかである必要があります。 yii\web\User::$id を参照してください。

$itemName string

アクセスチェックが必要な操作の名前

$params array

ユーザーに割り当てられたタスクおよびロールに関連付けられたルールに渡される名前と値のペア。 'user' という名前のパラメーターがこの配列に追加され、$userId の値を保持します。

$assignments yii\rbac\Assignment[]

指定されたユーザーへの割り当て

return boolean

操作がユーザーによって実行可能かどうか。

                protected function checkAccessFromCache($user, $itemName, $params, $assignments)
{
    if (!isset($this->items[$itemName])) {
        return false;
    }
    $item = $this->items[$itemName];
    Yii::debug($item instanceof Role ? "Checking role: $itemName" : "Checking permission: $itemName", __METHOD__);
    if (!$this->executeRule($user, $item, $params)) {
        return false;
    }
    if (isset($assignments[$itemName]) || in_array($itemName, $this->defaultRoles)) {
        return true;
    }
    if (!empty($this->parents[$itemName])) {
        foreach ($this->parents[$itemName] as $parent) {
            if ($this->checkAccessFromCache($user, $parent, $params, $assignments)) {
                return true;
            }
        }
    }
    return false;
}

            
checkAccessRecursive() protected メソッド

指定されたユーザーのアクセスチェックを実行します。

このメソッドは、checkAccess() によって内部的に呼び出されます。

protected boolean checkAccessRecursive ( $user, $itemName, $params, $assignments )
$user string|integer

ユーザー ID。これは、ユーザーの一意の識別子を表す整数または文字列のいずれかである必要があります。 yii\web\User::$id を参照してください。

$itemName string

アクセスチェックが必要な操作の名前

$params array

ユーザーに割り当てられたタスクおよびロールに関連付けられたルールに渡される名前と値のペア。 'user' という名前のパラメーターがこの配列に追加され、$userId の値を保持します。

$assignments yii\rbac\Assignment[]

指定されたユーザーへの割り当て

return boolean

操作がユーザーによって実行可能かどうか。

                protected function checkAccessRecursive($user, $itemName, $params, $assignments)
{
    if (($item = $this->getItem($itemName)) === null) {
        return false;
    }
    Yii::debug($item instanceof Role ? "Checking role: $itemName" : "Checking permission: $itemName", __METHOD__);
    if (!$this->executeRule($user, $item, $params)) {
        return false;
    }
    if (isset($assignments[$itemName]) || in_array($itemName, $this->defaultRoles)) {
        return true;
    }
    $query = new Query();
    $parents = $query->select(['parent'])
        ->from($this->itemChildTable)
        ->where(['child' => $itemName])
        ->column($this->db);
    foreach ($parents as $parent) {
        if ($this->checkAccessRecursive($user, $parent, $params, $assignments)) {
            return true;
        }
    }
    return false;
}

            
className() public static メソッド
2.0.14 から非推奨。PHP >=5.5 では、代わりに ::class を使用してください。

定義元: yii\base\BaseObject::className()

このクラスの完全修飾名を返します。

public static string className ( )
return string

このクラスの完全修飾名。

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

            
createPermission() public メソッド

定義元: yii\rbac\BaseManager::createPermission()

新しい Permission オブジェクトを作成します。

新しく作成されたパーミッションは、まだ RBAC システムに追加されていないことに注意してください。必要なデータを入力し、add() を呼び出してシステムに追加する必要があります。

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

パーミッション名

return yii\rbac\Permission

新しい Permission オブジェクト

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

            
createRole() public メソッド

定義元: yii\rbac\BaseManager::createRole()

新しい Role オブジェクトを作成します。

新しく作成されたロールは、まだ RBAC システムに追加されていないことに注意してください。必要なデータを入力し、add() を呼び出してシステムに追加する必要があります。

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

ロール名

return yii\rbac\Role

新しい Role オブジェクト

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

            
detachBehavior() public メソッド

定義元: yii\base\Component::detachBehavior()

コンポーネントからビヘイビアをデタッチします。

ビヘイビアの yii\base\Behavior::detach() メソッドが呼び出されます。

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

ビヘイビアの名前。

return 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() public メソッド

定義元: yii\base\Component::detachBehaviors()

コンポーネントからすべてのビヘイビアをデタッチします。

public void detachBehaviors ( )

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

            
detectLoop() protected メソッド

認証項目階層にループがあるかどうかをチェックします。

protected boolean detectLoop ( $parent, $child )
$parent yii\rbac\Item

親アイテム

$child yii\rbac\Item

階層に追加する子アイテム

return boolean

ループが存在するかどうか

                protected function detectLoop($parent, $child)
{
    if ($child->name === $parent->name) {
        return true;
    }
    foreach ($this->getChildren($child->name) as $grandchild) {
        if ($this->detectLoop($parent, $grandchild)) {
            return true;
        }
    }
    return false;
}

            
ensureBehaviors() public メソッド

定義元: 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() protected メソッド

定義元: yii\rbac\BaseManager::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()に渡され、ルールに渡されるパラメータ

return boolean

yii\rbac\Rule::execute()の戻り値。認証アイテムがルールを指定していない場合は、trueが返されます。

throws 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() public method

ロールとユーザーに関する割り当て情報を返します。

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

ロール名

$userId string|integer

ユーザーID(yii\web\User::$idを参照)

return yii\rbac\Assignment|null

アサインメント情報。ロールがユーザーに割り当てられていない場合はnullが返されます。

                public function getAssignment($roleName, $userId)
{
    if ($this->isEmptyUserId($userId)) {
        return null;
    }
    $row = (new Query())->from($this->assignmentTable)
        ->where(['user_id' => (string) $userId, 'item_name' => $roleName])
        ->one($this->db);
    if ($row === false) {
        return null;
    }
    return new Assignment([
        'userId' => $row['user_id'],
        'roleName' => $row['item_name'],
        'createdAt' => $row['created_at'],
    ]);
}

            
getAssignments() public method

指定されたユーザーのすべてのロール割り当て情報を返します。

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

ユーザーID(yii\web\User::$idを参照)

return yii\rbac\Assignment[]

ロール名でインデックス付けされたアサインメント。ユーザーにロールが割り当てられていない場合は空の配列が返されます。

                public function getAssignments($userId)
{
    if ($this->isEmptyUserId($userId)) {
        return [];
    }
    $query = (new Query())
        ->from($this->assignmentTable)
        ->where(['user_id' => (string) $userId]);
    $assignments = [];
    foreach ($query->all($this->db) as $row) {
        $assignments[$row['item_name']] = new Assignment([
            'userId' => $row['user_id'],
            'roleName' => $row['item_name'],
            'createdAt' => $row['created_at'],
        ]);
    }
    return $assignments;
}

            
getBehavior() public method

定義元: yii\base\Component::getBehavior()

名前付きビヘイビアオブジェクトを返します。

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

ビヘイビア名

return yii\base\Behavior|null

ビヘイビアオブジェクト。ビヘイビアが存在しない場合はnull

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

            
getBehaviors() public method

定義元: yii\base\Component::getBehaviors()

このコンポーネントにアタッチされたすべてのビヘイビアを返します。

public yii\base\Behavior[] getBehaviors ( )
return yii\base\Behavior[]

このコンポーネントにアタッチされたビヘイビアのリスト

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

            
getChildRoles() public method (available since version 2.0.10)

指定されたロールの子ロールを返します。深さに制限はありません。

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

子ロールを検索するロールの名前

return yii\rbac\Role[]

子ロール。配列はロール名でインデックス付けされています。最初の要素は親ロール自身のインスタンスです。

throws yii\base\InvalidParamException

$roleNameで取得されるロールが見つからなかった場合

                public function getChildRoles($roleName)
{
    $role = $this->getRole($roleName);
    if ($role === null) {
        throw new InvalidArgumentException("Role \"$roleName\" not found.");
    }
    $result = [];
    $this->getChildrenRecursive($roleName, $this->getChildrenList(), $result);
    $roles = [$roleName => $role];
    $roles += array_filter($this->getRoles(), function (Role $roleItem) use ($result) {
        return array_key_exists($roleItem->name, $result);
    });
    return $roles;
}

            
getChildren() public method

子パーミッションおよび/またはロールを返します。

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

親の名前

return yii\rbac\Item[]

子パーミッションおよび/またはロール

                public function getChildren($name)
{
    $query = (new Query())
        ->select(['name', 'type', 'description', 'rule_name', 'data', 'created_at', 'updated_at'])
        ->from([$this->itemTable, $this->itemChildTable])
        ->where(['parent' => $name, 'name' => new Expression('[[child]]')]);
    $children = [];
    foreach ($query->all($this->db) as $row) {
        $children[$row['name']] = $this->populateItem($row);
    }
    return $children;
}

            
getChildrenList() protected method

すべての親の子を返します。

protected array getChildrenList ( )
return array

子リスト。各配列キーは親アイテム名であり、対応する配列値は子アイテム名のリストです。

                protected function getChildrenList()
{
    $query = (new Query())->from($this->itemChildTable);
    $parents = [];
    foreach ($query->all($this->db) as $row) {
        $parents[$row['parent']][] = $row['child'];
    }
    return $parents;
}

            
getChildrenRecursive() protected method

指定された項目のすべての子と孫を再帰的に検索します。

protected void getChildrenRecursive ( $name, $childrenList, &$result )
$name string

子を検索するアイテムの名前。

$childrenList array

getChildrenList()を介して構築された子リスト

$result array

子と孫(配列キー内)

                protected function getChildrenRecursive($name, $childrenList, &$result)
{
    if (isset($childrenList[$name])) {
        foreach ($childrenList[$name] as $child) {
            $result[$child] = true;
            $this->getChildrenRecursive($child, $childrenList, $result);
        }
    }
}

            
getDefaultRoleInstances() public method (available since version 2.0.12)

定義元: yii\rbac\BaseManager::getDefaultRoleInstances()

Role オブジェクトの配列として defaultRoles を返します。

public yii\rbac\Role[] getDefaultRoleInstances ( )
return yii\rbac\Role[]

デフォルトロール。配列はロール名でインデックス付けされています

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

            
getDefaultRoles() public method (available since version 2.0.14)

定義元: yii\rbac\BaseManager::getDefaultRoles()

デフォルトロールを取得します

public string[] getDefaultRoles ( )
return string[]

デフォルトロール

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

            
getDirectPermissionsByUser() protected method (available since version 2.0.7)

ユーザーに直接割り当てられているすべてのパーミッションを返します。

protected yii\rbac\Permission[] getDirectPermissionsByUser ( $userId )
$userId string|integer

ユーザーID(yii\web\User::$idを参照)

return yii\rbac\Permission[]

ユーザーが持つすべてのダイレクトパーミッション。配列はパーミッション名でインデックス付けされています。

                protected function getDirectPermissionsByUser($userId)
{
    $query = (new Query())->select('b.*')
        ->from(['a' => $this->assignmentTable, 'b' => $this->itemTable])
        ->where('{{a}}.[[item_name]]={{b}}.[[name]]')
        ->andWhere(['a.user_id' => (string) $userId])
        ->andWhere(['b.type' => Item::TYPE_PERMISSION]);
    $permissions = [];
    foreach ($query->all($this->db) as $row) {
        $permissions[$row['name']] = $this->populateItem($row);
    }
    return $permissions;
}

            
getInheritedPermissionsByUser() protected method (available since version 2.0.7)

ユーザーが割り当てられたロールから継承するすべてのパーミッションを返します。

protected yii\rbac\Permission[] getInheritedPermissionsByUser ( $userId )
$userId string|integer

ユーザーID(yii\web\User::$idを参照)

return yii\rbac\Permission[]

ユーザーが持つすべての継承されたパーミッション。配列はパーミッション名でインデックス付けされています。

                protected function getInheritedPermissionsByUser($userId)
{
    $query = (new Query())->select('item_name')
        ->from($this->assignmentTable)
        ->where(['user_id' => (string) $userId]);
    $childrenList = $this->getChildrenList();
    $result = [];
    foreach ($query->column($this->db) as $roleName) {
        $this->getChildrenRecursive($roleName, $childrenList, $result);
    }
    if (empty($result)) {
        return [];
    }
    $query = (new Query())->from($this->itemTable)->where([
        'type' => Item::TYPE_PERMISSION,
        'name' => array_keys($result),
    ]);
    $permissions = [];
    foreach ($query->all($this->db) as $row) {
        $permissions[$row['name']] = $this->populateItem($row);
    }
    return $permissions;
}

            
getItem() protected method

名前付き認証項目を返します。

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

認証アイテム名。

return yii\rbac\Item|null

指定された名前に対応する認証アイテム。そのようなアイテムがない場合はNullが返されます。

                protected function getItem($name)
{
    if (empty($name)) {
        return null;
    }
    if (!empty($this->items[$name])) {
        return $this->items[$name];
    }
    $row = (new Query())->from($this->itemTable)
        ->where(['name' => $name])
        ->one($this->db);
    if ($row === false) {
        return null;
    }
    return $this->populateItem($row);
}

            
getItems() protected メソッド

指定されたタイプの項目を返します。

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

認証アイテムのタイプ(yii\rbac\Item::TYPE_ROLE または yii\rbac\Item::TYPE_PERMISSION のいずれか)

return yii\rbac\Item[]

指定されたタイプの認証アイテム。

                protected function getItems($type)
{
    $query = (new Query())
        ->from($this->itemTable)
        ->where(['type' => $type]);
    $items = [];
    foreach ($query->all($this->db) as $row) {
        $items[$row['name']] = $this->populateItem($row);
    }
    return $items;
}

            
getPermission() public メソッド

定義元: yii\rbac\BaseManager::getPermission()

名前付きパーミッションを返します。

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

パーミッション名。

return 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\BaseManager::getPermissions()

システム内のすべてのパーミッションを返します。

public yii\rbac\Permission[] getPermissions ( )
return yii\rbac\Permission[]

システム内のすべてのパーミッション。配列はパーミッション名でインデックス付けされています。

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

            
getPermissionsByRole() public メソッド

指定されたロールが表すすべてのパーミッションを返します。

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

ロール名

return yii\rbac\Permission[]

ロールが表すすべてのパーミッション。配列はパーミッション名でインデックス付けされています。

                public function getPermissionsByRole($roleName)
{
    $childrenList = $this->getChildrenList();
    $result = [];
    $this->getChildrenRecursive($roleName, $childrenList, $result);
    if (empty($result)) {
        return [];
    }
    $query = (new Query())->from($this->itemTable)->where([
        'type' => Item::TYPE_PERMISSION,
        'name' => array_keys($result),
    ]);
    $permissions = [];
    foreach ($query->all($this->db) as $row) {
        $permissions[$row['name']] = $this->populateItem($row);
    }
    return $permissions;
}

            
getPermissionsByUser() public メソッド

ユーザーが持つすべてのパーミッションを返します。

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

ユーザーID(yii\web\User::$idを参照)

return yii\rbac\Permission[]

ユーザーが持つすべてのパーミッション。配列はパーミッション名でインデックス付けされています。

                public function getPermissionsByUser($userId)
{
    if ($this->isEmptyUserId($userId)) {
        return [];
    }
    $directPermission = $this->getDirectPermissionsByUser($userId);
    $inheritedPermission = $this->getInheritedPermissionsByUser($userId);
    return array_merge($directPermission, $inheritedPermission);
}

            
getRole() public メソッド

定義元: yii\rbac\BaseManager::getRole()

名前付きロールを返します。

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

ロール名。

return 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\BaseManager::getRoles()

システム内のすべてのロールを返します。

public yii\rbac\Role[] getRoles ( )
return yii\rbac\Role[]

システム内のすべてのロール。配列はロール名でインデックス付けされています。

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

            
getRolesByUser() public メソッド

{@inheritdoc} このメソッドによって返されるロールには、$defaultRoles を介して割り当てられたロールが含まれます。

public void getRolesByUser ( $userId )
$userId

                public function getRolesByUser($userId)
{
    if ($this->isEmptyUserId($userId)) {
        return [];
    }
    if ($this->cache !== null) {
        $data = $this->cache->get($this->getUserRolesCacheKey($userId));
        if ($data !== false) {
            return $data;
        }
    }
    $query = (new Query())->select('b.*')
        ->from(['a' => $this->assignmentTable, 'b' => $this->itemTable])
        ->where('{{a}}.[[item_name]]={{b}}.[[name]]')
        ->andWhere(['a.user_id' => (string) $userId])
        ->andWhere(['b.type' => Item::TYPE_ROLE]);
    $roles = $this->getDefaultRoleInstances();
    foreach ($query->all($this->db) as $row) {
        $roles[$row['name']] = $this->populateItem($row);
    }
    if ($this->cache !== null) {
        $this->cacheUserRolesData($userId, $roles);
    }
    return $roles;
}

            
getRule() public メソッド

指定された名前のルールを返します。

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

ルール名

return yii\rbac\Rule|null

ルールオブジェクト。指定された名前がルールに対応しない場合は null。

                public function getRule($name)
{
    if ($this->rules !== null) {
        return isset($this->rules[$name]) ? $this->rules[$name] : null;
    }
    $row = (new Query())->select(['data'])
        ->from($this->ruleTable)
        ->where(['name' => $name])
        ->one($this->db);
    if ($row === false) {
        return null;
    }
    $data = $row['data'];
    if (is_resource($data)) {
        $data = stream_get_contents($data);
    }
    if (!$data) {
        return null;
    }
    return unserialize($data);
}

            
getRules() public メソッド

システムで利用可能なすべてのルールを返します。

public yii\rbac\Rule[] getRules ( )
return yii\rbac\Rule[]

ルール名でインデックス付けされたルール

                public function getRules()
{
    if ($this->rules !== null) {
        return $this->rules;
    }
    $query = (new Query())->from($this->ruleTable);
    $rules = [];
    foreach ($query->all($this->db) as $row) {
        $data = $row['data'];
        if (is_resource($data)) {
            $data = stream_get_contents($data);
        }
        if ($data) {
            $rules[$row['name']] = unserialize($data);
        }
    }
    return $rules;
}

            
getUserIdsByRole() public メソッド (バージョン 2.0.7 から利用可能)

指定されたロールのすべてのロール割り当て情報を返します。

public string[] getUserIdsByRole ( $roleName )
$roleName string
return string[]

ID。ロールがいずれのユーザーにも割り当てられていない場合は、空の配列が返されます。

                public function getUserIdsByRole($roleName)
{
    if (empty($roleName)) {
        return [];
    }
    return (new Query())->select('[[user_id]]')
        ->from($this->assignmentTable)
        ->where(['item_name' => $roleName])->column($this->db);
}

            
hasChild() public メソッド

親に子がすでに存在するかどうかを示す値を返します。

public boolean hasChild ( $parent, $child )
$parent yii\rbac\Item
$child yii\rbac\Item
return boolean

$child がすでに $parent の子であるかどうか

                public function hasChild($parent, $child)
{
    return (new Query())
        ->from($this->itemChildTable)
        ->where(['parent' => $parent->name, 'child' => $child->name])
        ->one($this->db) !== false;
}

            
hasEventHandlers() public メソッド

定義元: yii\base\Component::hasEventHandlers()

名前付きイベントにアタッチされたハンドラーがあるかどうかを示す値を返します。

public boolean hasEventHandlers ( $name )
$name string

イベント名

return 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 メソッド

定義元: yii\base\Component::hasMethod()

メソッドが定義されているかどうかを示す値を返します。

メソッドが定義されているのは以下の場合です。

  • クラスが指定された名前のメソッドを持っている
  • アタッチされたビヘイビアが指定された名前のメソッドを持っている($checkBehaviors が true の場合)。
public boolean hasMethod ( $name, $checkBehaviors true )
$name string

プロパティ名

$checkBehaviors boolean

ビヘイビアのメソッドをこのコンポーネントのメソッドとして扱うかどうか

return 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 メソッド (バージョン 2.0.11 から利用可能)

定義元: yii\rbac\BaseManager::hasNoAssignments()

$assignmentsの配列が空かどうか、および$defaultRolesプロパティも空かどうかをチェックします。

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

ユーザーのアサインメントの配列

return boolean

$assignments の配列が空で、かつ $defaultRoles プロパティも空かどうか

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

            
hasProperty() public メソッド

定義元: yii\base\Component::hasProperty()

プロパティがこのコンポーネントで定義されているかどうかを示す値を返します。

プロパティが定義されているのは以下の場合です。

  • クラスが指定された名前に関連付けられたゲッターまたはセッターメソッドを持っている(この場合、プロパティ名は case-insensitive です)。
  • クラスに、指定された名前のメンバ変数がある場合($checkVarsがtrueの場合)。
  • アタッチされたビヘイビアが指定された名前のプロパティを持っている($checkBehaviors が true の場合)。

こちらも参照

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

プロパティ名

$checkVars boolean

メンバ変数をプロパティとして扱うかどうか

$checkBehaviors boolean

ビヘイビアのプロパティをこのコンポーネントのプロパティとして扱うかどうか

return boolean

プロパティが定義されているかどうか

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

            
init() public メソッド

アプリケーションコンポーネントを初期化します。

このメソッドは、データベース接続を確立することにより、親の実装をオーバーライドします。

public void init ( )

                public function init()
{
    parent::init();
    $this->db = Instance::ensure($this->db, Connection::className());
    if ($this->cache !== null) {
        $this->cache = Instance::ensure($this->cache, 'yii\caching\CacheInterface');
    }
}

            
invalidateCache() public メソッド

public void invalidateCache ( )

                public function invalidateCache()
{
    if ($this->cache !== null) {
        $this->cache->delete($this->cacheKey);
        $this->items = null;
        $this->rules = null;
        $this->parents = null;
        $cachedUserIds = $this->cache->get($this->getUserRolesCachedSetKey());
        if ($cachedUserIds !== false) {
            foreach ($cachedUserIds as $userId) {
                $this->cache->delete($this->getUserRolesCacheKey($userId));
            }
            $this->cache->delete($this->getUserRolesCachedSetKey());
        }
    }
    $this->checkAccessAssignments = [];
}

            
isEmptyUserId() protected メソッド (バージョン 2.0.26 から利用可能)

$userIdが空かどうかをチェックします。

protected boolean isEmptyUserId ( $userId )
$userId mixed

                protected function isEmptyUserId($userId)
{
    return !isset($userId) || $userId === '';
}

            
loadFromCache() public メソッド

public void loadFromCache ( )

                public function loadFromCache()
{
    if ($this->items !== null || !$this->cache instanceof CacheInterface) {
        return;
    }
    $data = $this->cache->get($this->cacheKey);
    if (is_array($data) && isset($data[0], $data[1], $data[2])) {
        list($this->items, $this->rules, $this->parents) = $data;
        return;
    }
    $query = (new Query())->from($this->itemTable);
    $this->items = [];
    foreach ($query->all($this->db) as $row) {
        $this->items[$row['name']] = $this->populateItem($row);
    }
    $query = (new Query())->from($this->ruleTable);
    $this->rules = [];
    foreach ($query->all($this->db) as $row) {
        $data = $row['data'];
        if (is_resource($data)) {
            $data = stream_get_contents($data);
        }
        if ($data) {
            $this->rules[$row['name']] = unserialize($data);
        }
    }
    $query = (new Query())->from($this->itemChildTable);
    $this->parents = [];
    foreach ($query->all($this->db) as $row) {
        if (isset($this->items[$row['child']])) {
            $this->parents[$row['child']][] = $row['parent'];
        }
    }
    $this->cache->set($this->cacheKey, [$this->items, $this->rules, $this->parents]);
}

            
off() public メソッド

定義元: yii\base\Component::off()

既存のイベントハンドラーをこのコンポーネントから切り離します。

このメソッドは on() の反対です。

注意:イベント名にワイルドカードパターンが渡された場合、このワイルドカードで登録されたハンドラのみが削除され、このワイルドカードに一致するプレーン名で登録されたハンドラは残ります。

on() も参照してください。

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

イベント名

$handler callable|null

削除されるイベントハンドラ。null の場合、指定された名前のイベントにアタッチされたすべてのハンドラが削除されます。

return 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 メソッド

定義元: 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]);
    }
}

            
populateItem() protected メソッド

データベースからフェッチされたデータで認証項目を埋めます。

protected yii\rbac\Item populateItem ( $row )
$row array

auth_item テーブルからのデータ

return yii\rbac\Item

設定された auth アイテムインスタンス (Role または Permission のいずれか)

                protected function populateItem($row)
{
    $class = $row['type'] == Item::TYPE_PERMISSION ? Permission::className() : Role::className();
    if (!isset($row['data']) || ($data = @unserialize(is_resource($row['data']) ? stream_get_contents($row['data']) : $row['data'])) === false) {
        $data = null;
    }
    return new $class([
        'name' => $row['name'],
        'type' => $row['type'],
        'description' => $row['description'],
        'ruleName' => $row['rule_name'] ?: null,
        'data' => $data,
        'createdAt' => $row['created_at'],
        'updatedAt' => $row['updated_at'],
    ]);
}

            
remove() public メソッド

定義元: yii\rbac\BaseManager::remove()

RBACシステムからロール、パーミッション、またはルールを削除します。

public boolean remove ( $object )
$object yii\rbac\Role|yii\rbac\Permission|yii\rbac\Rule
return 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 メソッド

ロール、パーミッション、ルール、および割り当てを含むすべての認証データを削除します。

public void removeAll ( )

                public function removeAll()
{
    $this->removeAllAssignments();
    $this->db->createCommand()->delete($this->itemChildTable)->execute();
    $this->db->createCommand()->delete($this->itemTable)->execute();
    $this->db->createCommand()->delete($this->ruleTable)->execute();
    $this->invalidateCache();
}

            
removeAllAssignments() public メソッド

すべてのロール割り当てを削除します。

public void removeAllAssignments ( )

                public function removeAllAssignments()
{
    $this->checkAccessAssignments = [];
    $this->db->createCommand()->delete($this->assignmentTable)->execute();
}

            
removeAllItems() protected メソッド

指定されたタイプのすべての認証項目を削除します。

protected void removeAllItems ( $type )
$type integer

認証アイテムのタイプ (Item::TYPE_PERMISSION または Item::TYPE_ROLE のいずれか)

                protected function removeAllItems($type)
{
    if (!$this->supportsCascadeUpdate()) {
        $names = (new Query())
            ->select(['name'])
            ->from($this->itemTable)
            ->where(['type' => $type])
            ->column($this->db);
        if (empty($names)) {
            return;
        }
        $key = $type == Item::TYPE_PERMISSION ? 'child' : 'parent';
        $this->db->createCommand()
            ->delete($this->itemChildTable, [$key => $names])
            ->execute();
        $this->db->createCommand()
            ->delete($this->assignmentTable, ['item_name' => $names])
            ->execute();
    }
    $this->db->createCommand()
        ->delete($this->itemTable, ['type' => $type])
        ->execute();
    $this->invalidateCache();
}

            
removeAllPermissions() public メソッド

すべてのパーミッションを削除します。

すべての親子の関係は、それに応じて調整されます。

public void removeAllPermissions ( )

                public function removeAllPermissions()
{
    $this->removeAllItems(Item::TYPE_PERMISSION);
}

            
removeAllRoles() public メソッド

すべてのロールを削除します。

すべての親子の関係は、それに応じて調整されます。

public void removeAllRoles ( )

                public function removeAllRoles()
{
    $this->removeAllItems(Item::TYPE_ROLE);
}

            
removeAllRules() public メソッド

すべてのルールを削除します。

ルールを持つすべてのロールとパーミッションは、それに応じて調整されます。

public void removeAllRules ( )

                public function removeAllRules()
{
    if (!$this->supportsCascadeUpdate()) {
        $this->db->createCommand()
            ->update($this->itemTable, ['rule_name' => null])
            ->execute();
    }
    $this->db->createCommand()->delete($this->ruleTable)->execute();
    $this->invalidateCache();
}

            
removeChild() public メソッド

子を親から削除します。

子アイテムは削除されないことに注意してください。親子関係のみが削除されます。

public boolean removeChild ( $parent, $child )
$parent yii\rbac\Item
$child yii\rbac\Item
return boolean

削除が成功したかどうか

                public function removeChild($parent, $child)
{
    $result = $this->db->createCommand()
        ->delete($this->itemChildTable, ['parent' => $parent->name, 'child' => $child->name])
        ->execute() > 0;
    $this->invalidateCache();
    return $result;
}

            
removeChildren() public メソッド

すべての子を親から削除します。

子アイテムは削除されないことに注意してください。親子関係のみが削除されます。

public boolean removeChildren ( $parent )
$parent yii\rbac\Item
return boolean

削除が成功したかどうか

                public function removeChildren($parent)
{
    $result = $this->db->createCommand()
        ->delete($this->itemChildTable, ['parent' => $parent->name])
        ->execute() > 0;
    $this->invalidateCache();
    return $result;
}

            
removeItem() protected メソッド

RBACシステムから認証項目を削除します。

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

削除するアイテム

return boolean

ロールまたはパーミッションが正常に削除されたかどうか

throws 例外

データ検証または保存に失敗した場合(ロールまたはパーミッションの名前が一意でない場合など)

                protected function removeItem($item)
{
    if (!$this->supportsCascadeUpdate()) {
        $this->db->createCommand()
            ->delete($this->itemChildTable, ['or', '[[parent]]=:parent', '[[child]]=:child'], [':parent' => $item->name, ':child' => $item->name])
            ->execute();
        $this->db->createCommand()
            ->delete($this->assignmentTable, ['item_name' => $item->name])
            ->execute();
    }
    $this->db->createCommand()
        ->delete($this->itemTable, ['name' => $item->name])
        ->execute();
    $this->invalidateCache();
    return true;
}

            
removeRule() protected メソッド

RBACシステムからルールを削除します。

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

削除するルール

return boolean

ルールが正常に削除されたかどうか

throws 例外

データ検証または保存に失敗した場合(ルールの名前が一意でない場合など)

                protected function removeRule($rule)
{
    if (!$this->supportsCascadeUpdate()) {
        $this->db->createCommand()
            ->update($this->itemTable, ['rule_name' => null], ['rule_name' => $rule->name])
            ->execute();
    }
    $this->db->createCommand()
        ->delete($this->ruleTable, ['name' => $rule->name])
        ->execute();
    $this->invalidateCache();
    return true;
}

            
revoke() public メソッド

ユーザーからロールを取り消します。

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

ユーザーID(yii\web\User::$idを参照)

return boolean

取り消しが成功したかどうか

                public function revoke($role, $userId)
{
    if ($this->isEmptyUserId($userId)) {
        return false;
    }
    unset($this->checkAccessAssignments[(string) $userId]);
    $result = $this->db->createCommand()
        ->delete($this->assignmentTable, ['user_id' => (string) $userId, 'item_name' => $role->name])
        ->execute() > 0;
    $this->invalidateCache();
    return $result;
}

            
revokeAll() public メソッド

ユーザーからすべてのロールを取り消します。

public boolean revokeAll ( $userId )
$userId mixed

ユーザーID(yii\web\User::$idを参照)

return boolean

取り消しが成功したかどうか

                public function revokeAll($userId)
{
    if ($this->isEmptyUserId($userId)) {
        return false;
    }
    unset($this->checkAccessAssignments[(string) $userId]);
    $result = $this->db->createCommand()
        ->delete($this->assignmentTable, ['user_id' => (string) $userId])
        ->execute() > 0;
    $this->invalidateCache();
    return $result;
}

            
setDefaultRoles() public メソッド (バージョン 2.0.14 から利用可能)

定義場所: yii\rbac\BaseManager::setDefaultRoles()

デフォルトのロールを設定します。

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

ロールの配列、またはそれを返す callable のいずれか

throws yii\base\InvalidArgumentException

$roles が配列でも Closure でもない場合

throws 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');
    }
}

            
supportsCascadeUpdate() protected メソッド

データベースがカスケード更新および削除をサポートするかどうかを示す値を返します。

デフォルトの実装では、SQLite データベースの場合は false を返し、他のすべてのデータベースの場合は true を返します。

protected boolean supportsCascadeUpdate ( )
return boolean

データベースがカスケード更新と削除をサポートするかどうか。

                protected function supportsCascadeUpdate()
{
    return strncmp($this->db->getDriverName(), 'sqlite', 6) !== 0;
}

            
trigger() public メソッド

定義元: 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 メソッド

定義元: yii\rbac\BaseManager::update()

システム内の指定されたロール、パーミッション、またはルールを更新します。

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

ロール、パーミッション、またはルールの古い名前

$object yii\rbac\Role|yii\rbac\Permission|yii\rbac\Rule
return boolean

更新が成功したかどうか

throws 例外

データ検証または保存に失敗した場合(ロールまたはパーミッションの名前が一意でない場合など)

                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 メソッド

RBACシステム内の認証項目を更新します。

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

更新されるアイテムの名前

$item yii\rbac\Item

更新されたアイテム

return boolean

認証アイテムが正常に更新されたかどうか

throws 例外

データ検証または保存に失敗した場合(ロールまたはパーミッションの名前が一意でない場合など)

                protected function updateItem($name, $item)
{
    if ($item->name !== $name && !$this->supportsCascadeUpdate()) {
        $this->db->createCommand()
            ->update($this->itemChildTable, ['parent' => $item->name], ['parent' => $name])
            ->execute();
        $this->db->createCommand()
            ->update($this->itemChildTable, ['child' => $item->name], ['child' => $name])
            ->execute();
        $this->db->createCommand()
            ->update($this->assignmentTable, ['item_name' => $item->name], ['item_name' => $name])
            ->execute();
    }
    $item->updatedAt = time();
    $this->db->createCommand()
        ->update($this->itemTable, [
            'name' => $item->name,
            'description' => $item->description,
            'rule_name' => $item->ruleName,
            'data' => $item->data === null ? null : serialize($item->data),
            'updated_at' => $item->updatedAt,
        ], [
            'name' => $name,
        ])->execute();
    $this->invalidateCache();
    return true;
}

            
updateRule() protected メソッド

ルールをRBACシステムに更新します。

protected boolean updateRule ( $name, $rule )
$name string

更新されるルールの名前

$rule yii\rbac\Rule

更新されたルール

return boolean

ルールが正常に更新されたかどうか

throws 例外

データ検証または保存に失敗した場合(ルールの名前が一意でない場合など)

                protected function updateRule($name, $rule)
{
    if ($rule->name !== $name && !$this->supportsCascadeUpdate()) {
        $this->db->createCommand()
            ->update($this->itemTable, ['rule_name' => $rule->name], ['rule_name' => $name])
            ->execute();
    }
    $rule->updatedAt = time();
    $this->db->createCommand()
        ->update($this->ruleTable, [
            'name' => $rule->name,
            'data' => serialize($rule),
            'updated_at' => $rule->updatedAt,
        ], [
            'name' => $name,
        ])->execute();
    $this->invalidateCache();
    return true;
}