casbin / codeigniter-permission
将用户与角色和权限关联,在 CodeIgniter4 Web 框架中使用 Casbin。
v1.1.0
2024-04-20 16:38 UTC
Requires
- php: >=7.2
- casbin/casbin: ^3.21.6
- casbin/psr3-bridge: ^1.1
- codeigniter4/framework: ^4
Requires (Dev)
- php-coveralls/php-coveralls: ^2.1
- phpunit/phpunit: ^7.0|^8.0|^9.0
This package is auto-updated.
Last update: 2024-09-20 17:58:07 UTC
README
CodeIgniter Permission
CodeIgniter Permission 是 CodeIgniter4 框架的授权库。
它基于 Casbin,这是一个支持访问控制模型如 ACL、RBAC、ABAC 的授权库。
首先您需要学习如何使用 Casbin
。
安装
在您的 CodeIgniter 4
项目的 composer.json
中包含此包。这将下载该包。
composer require casbin/codeigniter-permission
要迁移迁移,运行迁移命令
php spark migrate -n "Casbin\CodeIgniter"
这将创建一个名为 rules
的新表
用法
快速入门
安装完成后,您可以进行类似这样的操作
$enforcer = \Config\Services::enforcer(); // adds permissions to a user $enforcer->addPermissionForUser('eve', 'articles', 'read'); // adds a role for a user. $enforcer->addRoleForUser('eve', 'writer'); // adds permissions to a rule $enforcer->addPolicy('writer', 'articles','edit');
您可以通过这种方式检查用户是否有权限
// to check if a user has permission if ($enforcer->enforce("eve", "articles", "edit")) { // permit eve to edit articles } else { // deny the request, show an error }
使用 Enforcer Api
它提供了一个非常丰富的 API,以方便对策略进行各种操作
获取所有角色
$enforcer->getAllRoles(); // ['writer', 'reader']
获取策略中的所有授权规则。
$enforcer->getPolicy();
获取用户拥有的角色。
$enforcer->getRolesForUser('eve'); // ['writer']
获取具有角色的用户。
$enforcer->getUsersForRole('writer'); // ['eve']
确定用户是否具有角色。
$enforcer->hasRoleForUser('eve', 'writer'); // true or false
为用户添加角色。
$enforcer->addRoleForUser('eve', 'writer');
为用户或角色添加权限。
// to user $enforcer->addPermissionForUser('eve', 'articles', 'read'); // to role $enforcer->addPermissionForUser('writer', 'articles','edit');
删除用户的角色。
$enforcer->deleteRoleForUser('eve', 'writer');
删除用户的所有角色。
$enforcer->deleteRolesForUser('eve');
删除角色。
$enforcer->deleteRole('writer');
删除权限。
$enforcer->deletePermission('articles', 'read'); // returns false if the permission does not exist (aka not affected).
删除用户或角色的权限。
$enforcer->deletePermissionForUser('eve', 'articles', 'read');
删除用户或角色的权限。
// to user $enforcer->deletePermissionsForUser('eve'); // to role $enforcer->deletePermissionsForUser('writer');
获取用户或角色的权限。
$enforcer->getPermissionsForUser('eve'); // return array
确定用户是否具有权限。
$enforcer->hasPermissionForUser('eve', 'articles', 'read'); // true or false
有关更多 API,请参阅 Casbin API。
多个执行器
如果您在项目中需要多个权限控制,您可以配置多个执行器。
在 Config\Enforcer.php
文件中,应该是这样的
namespace Config; use Casbin\CodeIgniter\Config\Enforcer as BaseConfig; use Casbin\CodeIgniter\Adapters\DatabaseAdapter; class Enforcer extends BaseConfig { /* * Default Enforcer driver * * @var string */ public $default = 'basic'; public $basic = [ /* * Casbin model setting. */ 'model' => [ // Available Settings: "file", "text" 'config_type' => 'file', 'config_file_path' => __DIR__.'/rbac-model.conf', 'config_text' => '', ], /* * Casbin adapter . */ 'adapter' => DatabaseAdapter::class, /* * Database setting. */ 'database' => [ // Database connection for following tables. 'connection' => '', // Rule table name. 'rules_table' => 'rules', ], 'log' => [ // changes whether Casbin will log messages to the Logger. 'enabled' => false, // Casbin Logger 'logger' => \Casbin\CodeIgniter\Logger::class, ], 'cache' => [ // changes whether Casbin will cache the rules. 'enabled' => false, // cache Key 'key' => 'rules', // ttl int|null 'ttl' => 24 * 60, ], ]; public $second = [ 'model' => [ // ... ], 'adapter' => DatabaseAdapter::class, // ... ]; }
然后您可以选择使用哪些执行器。
$enforcer->guard('second')->enforce("eve", "articles", "edit");
使用缓存
授权规则被缓存以加快性能。默认是关闭的。
在 Config\Enforcer.php
中设置您自己的缓存配置。
'cache' => [ // changes whether Casbin will cache the rules. 'enabled' => false, // cache Key 'key' => 'rules', // ttl int|null 'ttl' => 24 * 60, ]
思考
PHP-Casbin。您可以在网站上找到 Casbin 的完整文档 在这里。
许可证
该项目采用 Apache 2.0 许可证。