0 フォロワー

クラス yii\rbac\PhpManager

継承yii\rbac\PhpManager » 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/PhpManager.php

PhpManager は、PHP スクリプトファイルで権限情報を格納する認可マネージャを表します。

認可データは、$itemFile$assignmentFile、および $ruleFile で指定された3つのファイルに保存およびロードされます。

PhpManager は、主に (例えば、個人のブログシステムの認可データのような) あまり大きくない認可データに適しています。より複雑な認可データには、yii\rbac\DbManager を使用してください。

PhpManager は、PHPファイルの書き込みとその後のインクルードに依存しているため、HHVM ではサポートされていません。そのため、PhpManager は Facebook の HHVM と互換性がないことに注意してください。

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

公開プロパティ

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

プロパティ 説明 定義元
$assignmentFile string 認可アサインメントを格納する PHP スクリプトのパス。 yii\rbac\PhpManager
$assignments array yii\rbac\PhpManager
$behaviors yii\base\Behavior[] このコンポーネントにアタッチされたビヘイビアのリスト。 yii\base\Component
$children array yii\rbac\PhpManager
$defaultRoleInstances yii\rbac\Role[] デフォルトロール。 yii\rbac\BaseManager
$defaultRoles array assign() を呼び出すことなく、すべてのユーザーに自動的に割り当てられるロール名のリスト。 yii\rbac\BaseManager
$itemFile string 認可アイテムを格納する PHP スクリプトのパス。 yii\rbac\PhpManager
$items yii\rbac\Item[] yii\rbac\PhpManager
$permissions yii\rbac\Permission[] システム内のすべてのパーミッション。 yii\rbac\BaseManager
$roles yii\rbac\Role[] システム内のすべてのロール。 yii\rbac\BaseManager
$ruleFile string 認可ルールを格納する PHP スクリプトのパス。 yii\rbac\PhpManager
$rules yii\rbac\Rule[] yii\rbac\PhpManager

保護されたプロパティ

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

プロパティ 説明 定義元

公開メソッド

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

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

保護されたメソッド

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

メソッド 説明 定義元
addItem() 認証項目をRBACシステムに追加します。 yii\rbac\PhpManager
addRule() ルールをRBACシステムに追加します。 yii\rbac\PhpManager
checkAccessRecursive() 指定されたユーザーのアクセスチェックを実行します。 yii\rbac\PhpManager
detectLoop() 認可項目階層にループがあるかどうかを確認します。 yii\rbac\PhpManager
executeRule() 指定された認証項目に関連付けられたルールを実行します。 yii\rbac\BaseManager
getChildrenRecursive() 指定された項目の全ての子要素と孫要素を再帰的に検索します。 yii\rbac\PhpManager
getDirectPermissionsByUser() ユーザーに直接割り当てられている全ての権限を返します。 yii\rbac\PhpManager
getInheritedPermissionsByUser() ユーザーが割り当てられたロールから継承した全ての権限を返します。 yii\rbac\PhpManager
hasNoAssignments() $assignments の配列が空であり、$defaultRoles プロパティも空であるかどうかを確認します。 yii\rbac\BaseManager
invalidateScriptCache() 指定されたファイルのプリコンパイルされたスクリプトキャッシュ (OPCache や APC など) を無効にします。 yii\rbac\PhpManager
load() 永続ストレージから認可データをロードします。 yii\rbac\PhpManager
loadFromFile() PHPスクリプトファイルから認可データをロードします。 yii\rbac\PhpManager
removeAllItems() 指定された型のすべての認証項目を削除します。 yii\rbac\PhpManager
removeRule() ルールをRBACシステムから削除します。 yii\rbac\PhpManager
save() 永続ストレージに認可データを保存します。 yii\rbac\PhpManager
saveAssignments() 割り当てデータを永続ストレージに保存します。 yii\rbac\PhpManager
saveItems() 項目データを永続ストレージに保存します。 yii\rbac\PhpManager
saveRules() ルールデータを永続ストレージに保存します。 yii\rbac\PhpManager
saveToFile() PHPスクリプトファイルに認可データを保存します。 yii\rbac\PhpManager
updateItem() RBACシステムの認証項目を更新します。 yii\rbac\PhpManager

プロパティの詳細

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

$assignmentFile public プロパティ

認可割り当てを含むPHPスクリプトのパス。これはファイルパス、またはファイルへのパスエイリアスのいずれかです。オンラインで認可を変更する必要がある場合は、このファイルがWebサーバープロセスで書き込み可能であることを確認してください。

こちらも参照

public string $assignmentFile '@app/rbac/assignments.php'
$assignments protected プロパティ
protected array $assignments = []
$children protected プロパティ
protected array $children = []
$itemFile public プロパティ

認可項目を含むPHPスクリプトのパス。これはファイルパス、またはファイルへのパスエイリアスのいずれかです。オンラインで認可を変更する必要がある場合は、このファイルがWebサーバープロセスで書き込み可能であることを確認してください。

こちらも参照

public string $itemFile '@app/rbac/items.php'
$items protected プロパティ
protected yii\rbac\Item[] $items = []
$ruleFile public プロパティ

認可ルールを含むPHPスクリプトのパス。これはファイルパス、またはファイルへのパスエイリアスのいずれかです。オンラインで認可を変更する必要がある場合は、このファイルがWebサーバープロセスで書き込み可能であることを確認してください。

こちらも参照

public string $ruleFile '@app/rbac/rules.php'
$rules protected プロパティ
protected yii\rbac\Rule[] $rules = []

メソッドの詳細

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

__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()

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

このメソッドは、次の順序で確認し、それに応じて動作します。

  • getterによって定義されたプロパティ: getterの結果を返す
  • ビヘイビアのプロパティ: ビヘイビアのプロパティ値を返す

$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 でないかを確認します。

このメソッドは、次の順序で確認し、それに応じて動作します。

  • setterによって定義されたプロパティ: プロパティが設定されているかどうかを返す
  • ビヘイビアのプロパティ: プロパティが設定されているかどうかを返す
  • 存在しないプロパティの場合は 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()

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

このメソッドは、次の順序で確認し、それに応じて動作します。

  • setterによって定義されたプロパティ: プロパティ値を設定する
  • "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 に設定します。

このメソッドは、次の順序で確認し、それに応じて動作します。

  • setterによって定義されたプロパティ: プロパティ値を 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 (!isset($this->items[$parent->name], $this->items[$child->name])) {
        throw new InvalidArgumentException("Either '{$parent->name}' or '{$child->name}' does not exist.");
    }
    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.");
    }
    if (isset($this->children[$parent->name][$child->name])) {
        throw new InvalidCallException("The item '{$parent->name}' already has a child '{$child->name}'.");
    }
    $this->children[$parent->name][$child->name] = $this->items[$child->name];
    $this->saveItems();
    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->items[$item->name] = $item;
    $this->saveItems();
    return true;
}

            
addRule() protected メソッド

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

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

追加するルール

return boolean

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

throws 例外

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

                protected function addRule($rule)
{
    $this->rules[$rule->name] = $rule;
    $this->saveRules();
    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)
{
    if (!isset($this->items[$role->name])) {
        throw new InvalidArgumentException("Unknown role '{$role->name}'.");
    } elseif (isset($this->assignments[$userId][$role->name])) {
        throw new InvalidArgumentException("Authorization item '{$role->name}' has already been assigned to user '$userId'.");
    }
    $this->assignments[$userId][$role->name] = new Assignment([
        'userId' => $userId,
        'roleName' => $role->name,
        'createdAt' => time(),
    ]);
    $this->saveAssignments();
    return $this->assignments[$userId][$role->name];
}

            
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()

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

プロパティは、以下の場合に書き込むことができます。

  • クラスに、指定された名前に関連付けられたセッターメソッドがある場合(この場合、プロパティ名はケースインセンシティブです)。
  • クラスには、指定された名前のメンバ変数がある場合($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 = [])
{
    $assignments = $this->getAssignments($userId);
    if ($this->hasNoAssignments($assignments)) {
        return false;
    }
    return $this->checkAccessRecursive($userId, $permissionName, $params, $assignments);
}

            
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 (!isset($this->items[$itemName])) {
        return false;
    }
    /* @var $item Item */
    $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;
    }
    foreach ($this->children as $parentName => $children) {
        if (isset($children[$itemName]) && $this->checkAccessRecursive($user, $parentName, $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() パブリックメソッド

定義場所: 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() パブリックメソッド

定義場所: 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() パブリックメソッド

定義場所: 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() パブリックメソッド

定義場所: yii\base\Component::detachBehaviors()

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

public void detachBehaviors ( )

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

            
detectLoop() プロテクトメソッド

認可項目階層にループがあるかどうかを確認します。

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;
    }
    if (!isset($this->children[$child->name], $this->items[$parent->name])) {
        return false;
    }
    foreach ($this->children[$child->name] as $grandchild) {
        /* @var $grandchild Item */
        if ($this->detectLoop($parent, $grandchild)) {
            return true;
        }
    }
    return false;
}

            
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() プロテクトメソッド

定義場所: 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 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)
{
    return isset($this->assignments[$userId][$roleName]) ? $this->assignments[$userId][$roleName] : null;
}

            
getAssignments() パブリックメソッド

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

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

ユーザーID ( yii\web\User::$id を参照してください)

return yii\rbac\Assignment[]

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

                public function getAssignments($userId)
{
    return isset($this->assignments[$userId]) ? $this->assignments[$userId] : [];
}

            
getBehavior() パブリックメソッド

定義場所: 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() パブリックメソッド

定義場所: yii\base\Component::getBehaviors()

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

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

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

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

            
getChildRoles() パブリックメソッド (バージョン2.0.10以降で利用可能)

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

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

子ロールの取得対象となるロールの名前

return yii\rbac\Role[]

子ロール。配列はロール名でインデックス付けされます。最初の要素は、親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, $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 yii\rbac\Item[] getChildren ( $name )
$name string

親の名前

return yii\rbac\Item[]

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

                public function getChildren($name)
{
    return isset($this->children[$name]) ? $this->children[$name] : [];
}

            
getChildrenRecursive() protected メソッド

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

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

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

$result array

子要素と孫要素(配列のキーとして)

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

            
getDefaultRoleInstances() public メソッド (バージョン 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 メソッド (バージョン 2.0.14 以降)

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

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

public string[] getDefaultRoles ( )
return string[]

デフォルトのロール

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

            
getDirectPermissionsByUser() protected メソッド (バージョン 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)
{
    $permissions = [];
    foreach ($this->getAssignments($userId) as $name => $assignment) {
        $permission = $this->items[$assignment->roleName];
        if ($permission->type === Item::TYPE_PERMISSION) {
            $permissions[$name] = $permission;
        }
    }
    return $permissions;
}

            
getInheritedPermissionsByUser() protected メソッド (バージョン 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)
{
    $assignments = $this->getAssignments($userId);
    $result = [];
    foreach (array_keys($assignments) as $roleName) {
        $this->getChildrenRecursive($roleName, $result);
    }
    if (empty($result)) {
        return [];
    }
    $permissions = [];
    foreach (array_keys($result) as $itemName) {
        if (isset($this->items[$itemName]) && $this->items[$itemName] instanceof Permission) {
            $permissions[$itemName] = $this->items[$itemName];
        }
    }
    return $permissions;
}

            
getItem() public メソッド

名前付きの認証アイテムを返します。

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

認証アイテム名。

return yii\rbac\Item|null

指定された名前に対応する認証アイテム。該当するアイテムがない場合はnullが返されます。

                public function getItem($name)
{
    return isset($this->items[$name]) ? $this->items[$name] : null;
}

            
getItems() public メソッド

指定された型のアイテムを返します。

public yii\rbac\Item[] getItems ( $type )
$type 整数型

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

return yii\rbac\Item[]

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

                public function getItems($type)
{
    $items = [];
    foreach ($this->items as $name => $item) {
        /* @var $item Item */
        if ($item->type == $type) {
            $items[$name] = $item;
        }
    }
    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)
{
    $result = [];
    $this->getChildrenRecursive($roleName, $result);
    if (empty($result)) {
        return [];
    }
    $permissions = [];
    foreach (array_keys($result) as $itemName) {
        if (isset($this->items[$itemName]) && $this->items[$itemName] instanceof Permission) {
            $permissions[$itemName] = $this->items[$itemName];
        }
    }
    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)
{
    $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)
{
    $roles = $this->getDefaultRoleInstances();
    foreach ($this->getAssignments($userId) as $name => $assignment) {
        $role = $this->items[$assignment->roleName];
        if ($role->type === Item::TYPE_ROLE) {
            $roles[$name] = $role;
        }
    }
    return $roles;
}

            
getRule() public メソッド

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

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

ルール名

return yii\rbac\Rule|null

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

                public function getRule($name)
{
    return isset($this->rules[$name]) ? $this->rules[$name] : null;
}

            
getRules() public メソッド

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

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

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

                public function getRules()
{
    return $this->rules;
}

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

指定されたロールに割り当てられた全てのユーザーIDを返します。

public array getUserIdsByRole ( $roleName )
$roleName string
return array

ユーザー ID 文字列の配列

                public function getUserIdsByRole($roleName)
{
    $result = [];
    foreach ($this->assignments as $userID => $assignments) {
        foreach ($assignments as $userAssignment) {
            if ($userAssignment->roleName === $roleName && $userAssignment->userId == $userID) {
                $result[] = (string) $userID;
            }
        }
    }
    return $result;
}

            
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 isset($this->children[$parent->name][$child->name]);
}

            
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()

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

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

  • クラスに指定された名前に関連付けられた getter または setter メソッドがある(この場合、プロパティ名は大文字と小文字を区別しません)。
  • クラスには、指定された名前のメンバ変数がある場合($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 メソッド

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

このメソッドは、PHPスクリプトから認証データをロードすることで、親の実装をオーバーライドします。

public void init ( )

                public function init()
{
    parent::init();
    $this->itemFile = Yii::getAlias($this->itemFile);
    $this->assignmentFile = Yii::getAlias($this->assignmentFile);
    $this->ruleFile = Yii::getAlias($this->ruleFile);
    $this->load();
}

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

指定されたファイルのプリコンパイルされたスクリプトキャッシュ (OPCache や APC など) を無効にします。

protected void invalidateScriptCache ( $file )
$file string

ファイルパス。

                protected function invalidateScriptCache($file)
{
    if (function_exists('opcache_invalidate')) {
        opcache_invalidate($file, true);
    }
    if (function_exists('apc_delete_file')) {
        @apc_delete_file($file);
    }
}

            
load() protected メソッド

永続ストレージから認可データをロードします。

protected void load ( )

                protected function load()
{
    $this->children = [];
    $this->rules = [];
    $this->assignments = [];
    $this->items = [];
    $items = $this->loadFromFile($this->itemFile);
    $itemsMtime = @filemtime($this->itemFile);
    $assignments = $this->loadFromFile($this->assignmentFile);
    $assignmentsMtime = @filemtime($this->assignmentFile);
    $rules = $this->loadFromFile($this->ruleFile);
    foreach ($items as $name => $item) {
        $class = $item['type'] == Item::TYPE_PERMISSION ? Permission::className() : Role::className();
        $this->items[$name] = new $class([
            'name' => $name,
            'description' => isset($item['description']) ? $item['description'] : null,
            'ruleName' => isset($item['ruleName']) ? $item['ruleName'] : null,
            'data' => isset($item['data']) ? $item['data'] : null,
            'createdAt' => $itemsMtime,
            'updatedAt' => $itemsMtime,
        ]);
    }
    foreach ($items as $name => $item) {
        if (isset($item['children'])) {
            foreach ($item['children'] as $childName) {
                if (isset($this->items[$childName])) {
                    $this->children[$name][$childName] = $this->items[$childName];
                }
            }
        }
    }
    foreach ($assignments as $userId => $roles) {
        foreach ($roles as $role) {
            $this->assignments[$userId][$role] = new Assignment([
                'userId' => $userId,
                'roleName' => $role,
                'createdAt' => $assignmentsMtime,
            ]);
        }
    }
    foreach ($rules as $name => $ruleData) {
        $this->rules[$name] = unserialize($ruleData);
    }
}

            
loadFromFile() protected メソッド

PHPスクリプトファイルから認可データをロードします。

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

protected array loadFromFile ( $file )
$file string

ファイルパス。

return array

認証データ

                protected function loadFromFile($file)
{
    if (is_file($file)) {
        return require $file;
    }
    return [];
}

            
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]);
    }
}

            
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->children = [];
    $this->items = [];
    $this->assignments = [];
    $this->rules = [];
    $this->save();
}

            
removeAllAssignments() public メソッド

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

public void removeAllAssignments ( )

                public function removeAllAssignments()
{
    $this->assignments = [];
    $this->saveAssignments();
}

            
removeAllItems() protected メソッド

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

protected void removeAllItems ( $type )
$type 整数型

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

                protected function removeAllItems($type)
{
    $names = [];
    foreach ($this->items as $name => $item) {
        if ($item->type == $type) {
            unset($this->items[$name]);
            $names[$name] = true;
        }
    }
    if (empty($names)) {
        return;
    }
    foreach ($this->assignments as $i => $assignments) {
        foreach ($assignments as $n => $assignment) {
            if (isset($names[$assignment->roleName])) {
                unset($this->assignments[$i][$n]);
            }
        }
    }
    foreach ($this->children as $name => $children) {
        if (isset($names[$name])) {
            unset($this->children[$name]);
        } else {
            foreach ($children as $childName => $item) {
                if (isset($names[$childName])) {
                    unset($children[$childName]);
                }
            }
            $this->children[$name] = $children;
        }
    }
    $this->saveItems();
}

            
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()
{
    foreach ($this->items as $item) {
        $item->ruleName = null;
    }
    $this->rules = [];
    $this->saveRules();
}

            
removeChild() public メソッド

子要素を親要素から削除します。

注意: 子アイテムは削除されません。親子関係のみが削除されます。

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

削除が成功したかどうか

                public function removeChild($parent, $child)
{
    if (isset($this->children[$parent->name][$child->name])) {
        unset($this->children[$parent->name][$child->name]);
        $this->saveItems();
        return true;
    }
    return false;
}

            
removeChildren() public メソッド

全ての子要素を親要素から削除します。

注意: 子アイテムは削除されません。親子関係のみが削除されます。

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

削除が成功したかどうか

                public function removeChildren($parent)
{
    if (isset($this->children[$parent->name])) {
        unset($this->children[$parent->name]);
        $this->saveItems();
        return true;
    }
    return false;
}

            
removeItem() public メソッド

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

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

削除するアイテム

return boolean

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

throws 例外

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

                public function removeItem($item)
{
    if (isset($this->items[$item->name])) {
        foreach ($this->children as &$children) {
            unset($children[$item->name]);
        }
        foreach ($this->assignments as &$assignments) {
            unset($assignments[$item->name]);
        }
        unset($this->items[$item->name]);
        $this->saveItems();
        $this->saveAssignments();
        return true;
    }
    return false;
}

            
removeRule() protected メソッド

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

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

削除するルール

return boolean

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

throws 例外

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

                protected function removeRule($rule)
{
    if (isset($this->rules[$rule->name])) {
        unset($this->rules[$rule->name]);
        foreach ($this->items as $item) {
            if ($item->ruleName === $rule->name) {
                $item->ruleName = null;
            }
        }
        $this->saveRules();
        return true;
    }
    return false;
}

            
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 (isset($this->assignments[$userId][$role->name])) {
        unset($this->assignments[$userId][$role->name]);
        $this->saveAssignments();
        return true;
    }
    return false;
}

            
revokeAll() public メソッド

ユーザーから全てのロールを剥奪します。

public boolean revokeAll ( $userId )
$userId mixed

ユーザーID ( yii\web\User::$id を参照してください)

return boolean

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

                public function revokeAll($userId)
{
    if (isset($this->assignments[$userId]) && is_array($this->assignments[$userId])) {
        foreach ($this->assignments[$userId] as $itemName => $value) {
            unset($this->assignments[$userId][$itemName]);
        }
        $this->saveAssignments();
        return true;
    }
    return false;
}

            
save() protected メソッド

永続ストレージに認可データを保存します。

protected void save ( )

                protected function save()
{
    $this->saveItems();
    $this->saveAssignments();
    $this->saveRules();
}

            
saveAssignments() protected メソッド

割り当てデータを永続ストレージに保存します。

protected void saveAssignments ( )

                protected function saveAssignments()
{
    $assignmentData = [];
    foreach ($this->assignments as $userId => $assignments) {
        foreach ($assignments as $name => $assignment) {
            /* @var $assignment Assignment */
            $assignmentData[$userId][] = $assignment->roleName;
        }
    }
    $this->saveToFile($assignmentData, $this->assignmentFile);
}

            
saveItems() protected メソッド

項目データを永続ストレージに保存します。

protected void saveItems ( )

                protected function saveItems()
{
    $items = [];
    foreach ($this->items as $name => $item) {
        /* @var $item Item */
        $items[$name] = array_filter(
            [
                'type' => $item->type,
                'description' => $item->description,
                'ruleName' => $item->ruleName,
                'data' => $item->data,
            ]
        );
        if (isset($this->children[$name])) {
            foreach ($this->children[$name] as $child) {
                /* @var $child Item */
                $items[$name]['children'][] = $child->name;
            }
        }
    }
    $this->saveToFile($items, $this->itemFile);
}

            
saveRules() protected メソッド

ルールデータを永続ストレージに保存します。

protected void saveRules ( )

                protected function saveRules()
{
    $rules = [];
    foreach ($this->rules as $name => $rule) {
        $rules[$name] = serialize($rule);
    }
    $this->saveToFile($rules, $this->ruleFile);
}

            
saveToFile() protected メソッド

PHPスクリプトファイルに認可データを保存します。

参照: loadFromFile().

protected void saveToFile ( $data, $file )
$data array

認証データ

$file string

ファイルパス。

                protected function saveToFile($data, $file)
{
    file_put_contents($file, "<?php\n\nreturn " . VarDumper::export($data) . ";\n", LOCK_EX);
    $this->invalidateScriptCache($file);
}

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

            
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 ($name !== $item->name) {
        if (isset($this->items[$item->name])) {
            throw new InvalidArgumentException("Unable to change the item name. The name '{$item->name}' is already used by another item.");
        }
        // Remove old item in case of renaming
        unset($this->items[$name]);
        if (isset($this->children[$name])) {
            $this->children[$item->name] = $this->children[$name];
            unset($this->children[$name]);
        }
        foreach ($this->children as &$children) {
            if (isset($children[$name])) {
                $children[$item->name] = $children[$name];
                unset($children[$name]);
            }
        }
        foreach ($this->assignments as &$assignments) {
            if (isset($assignments[$name])) {
                $assignments[$item->name] = $assignments[$name];
                $assignments[$item->name]->roleName = $item->name;
                unset($assignments[$name]);
            }
        }
        $this->saveAssignments();
    }
    $this->items[$item->name] = $item;
    $this->saveItems();
    return true;
}

            
updateRule() public メソッド

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

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

更新されるルールの名前

$rule yii\rbac\Rule

更新されたルール

return boolean

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

throws 例外

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

                public function updateRule($name, $rule)
{
    if ($rule->name !== $name) {
        unset($this->rules[$name]);
    }
    $this->rules[$rule->name] = $rule;
    $this->saveRules();
    return true;
}