アプリに RBAC を実装しており、すべてがデータベースから管理されています。
たとえば、すべてのリソース/権限を というテーブルに格納しpermission
、すべてのロールをrole
テーブルに格納し、別のテーブルを呼び出しrole_permission
て、どのロールがどのリソース/権限にアクセスできるかを定義しています。
このアプローチを採用する目的は、アプリの管理者がrole
自分でロールを作成して権限を割り当ててもらいたいからです。
アプリのユーザーは、、、、などの複数の役割を持つことができadministrator
ます。supervisor
player
referee
Zend_Acl
ロールとリソースを追加し、権限を割り当てるためのモデル クラスを作成しました。
以下は私がしたことです。
foreach($this->_roles as $role) {
$this->addRole(new Zend_Acl_Role($role['id']));
}
foreach($this->_permissions as $permmission) {
$this->addResource(new Zend_Acl_Resource($permmission['id']));
}
foreach($this->_rolePermissions as $value) {
$this->allow($value['role_id'], $value['permmission_id']);
}
$this->allow($this->_roleAdmin);
たとえば、このコードを使用して、特定の役割に対してアクセス許可が存在するかどうかを確認したい場合は、正常に機能します。
echo $acl->isAllowed($role, $permission) ? 'allowed' : 'denied';
ただし、複数のロールを持つユーザーに対して現在の権限が存在するかどうかを複数のロールで確認したい。
referee
などの複数のロールを持つユーザーsupervisor
がリソースにアクセスできるかどうかを確認するにはどうすればよいですかcreate report
。isAllowed() を使用すると、1 つのロールの権限のみを確認できます。