casbin / yii-permission
在 Yii2 PHP 框架中使用 Casbin,Casbin 是一个强大而高效的开放源代码访问控制库。
v1.6.0
2024-08-21 15:44 UTC
Requires
- casbin/casbin: ~3.1
- yiisoft/yii2: ~2.0.14
Requires (Dev)
- php-coveralls/php-coveralls: ^2.1
- phpunit/phpunit: ~7.0|~8.0|~9.0|~10.5
- yiisoft/yii2-app-basic: ~2.0.14
README
在 Yii 2.0 PHP 框架中使用 Casbin。
安装
获取 Composer 包
在您的 Yii 2.0 项目的 composer.json
中要求此包。这将下载此包。
composer require casbin/yii-permission
配置应用程序
要使用此扩展,您必须配置应用程序配置中的 Casbin
类
return [ //.... 'components' => [ 'permission' => [ 'class' => \yii\permission\Permission::class, /* * Casbin model setting. */ 'model' => [ // Available Settings: "file", "text" 'config_type' => 'file', 'config_file_path' => '/path/to/casbin-model.conf', 'config_text' => '', ], // Casbin adapter . 'adapter' => \yii\permission\Adapter::class, /* * Casbin database setting. */ 'database' => [ // Database connection for following tables. 'connection' => '', // CasbinRule tables and model. 'casbin_rules_table' => '{{%casbin_rule}}', ], ], ] ];
用法
快速入门
安装后,您可以执行类似以下操作
$permission = \Yii::$app->permission; // adds permissions to a user $permission->addPermissionForUser('eve', 'articles', 'read'); // adds a role for a user. $permission->addRoleForUser('eve', 'writer'); // adds permissions to a rule $permission->addPolicy('writer', 'articles','edit');
您可以使用这种方式检查用户是否有权限
// to check if a user has permission if ($permission->enforce("eve", "articles", "edit")) { // permit eve to edit articles } else { // deny the request, show an error }
使用 Enforcer Api
它提供了一个非常丰富的 API,以方便对策略的各种操作
获取所有角色
$permission->getAllRoles(); // ['writer', 'reader']
获取策略中的所有授权规则。
$permission->getPolicy();
获取用户拥有的角色。
$permission->getRolesForUser('eve'); // ['writer']
获取具有角色的用户。
$permission->getUsersForRole('writer'); // ['eve']
确定用户是否有角色。
$permission->hasRoleForUser('eve', 'writer'); // true or false
为用户添加角色。
$permission->addRoleForUser('eve', 'writer');
为用户或角色添加权限。
// to user $permission->addPermissionForUser('eve', 'articles', 'read'); // to role $permission->addPermissionForUser('writer', 'articles','edit');
为用户删除角色。
$permission->deleteRoleForUser('eve', 'writer');
删除用户的所有角色。
$permission->deleteRolesForUser('eve');
删除角色。
$permission->deleteRole('writer');
删除权限。
$permission->deletePermission('articles', 'read'); // returns false if the permission does not exist (aka not affected).
为用户或角色删除权限。
$permission->deletePermissionForUser('eve', 'articles', 'read');
删除用户或角色的权限。
// to user $permission->deletePermissionsForUser('eve'); // to role $permission->deletePermissionsForUser('writer');
获取用户或角色的权限。
$permission->getPermissionsForUser('eve'); // return array
确定用户是否有权限。
$permission->hasPermissionForUser('eve', 'articles', 'read'); // true or false
使用 Yii 授权
它允许您将 Yii 的授权与 Casbin 权限管理系统集成。
(1) AccessChecker
将 accessChecker 配置添加到应用程序的 config/web.php
文件中
$config = [ 'components' => [ 'user' => [ ... 'accessChecker' => 'yii\permission\components\PermissionChecker', ] ];
配置后,您可以使用 can()
方法来检查用户是否具有执行某些操作的权利
$user->can('acrticles,read');
(2) Behaviors
PermissionControl
行为允许您在控制器级别执行权限检查。将 PermissionControl 行为添加到控制器的方法 behaviors() 中
public function behaviors() { return [ 'permission' => [ 'class' => \yii\permission\components\PermissionControl::class, 'user' => $user, // optional, defaults to \Yii::$app->user 'only' => ['read-articles', 'write-articles'], 'policy' => [ [ 'allow' => true, 'actions' => ['read-articles'], 'enforce' => ['articles', 'read'] ], [ 'allow' => true, 'actions' => ['write-articles'], 'enforce' => ['articles', 'write'] ] ], 'denyCallback' => function ($policy, $action) { // custom action when access is denied } // optional, defaults to throwing an exception ] ]; }
注意:另外,您还可以为每个 policy
配置一个 denyCallback
,当用户不满足所需的权限时,将调用该回调。此回调具有优先权。配置类似于 Yii 的官方 AccessControl。
有关更多 API,请参阅 Casbin API。
定义自己的 model.conf
学习 Casbin
您可以在网站上找到 Casbin 的完整文档 在这里。