千家信息网

怎么使用Casbin

发表于:2025-02-07 作者:千家信息网编辑
千家信息网最后更新 2025年02月07日,这篇文章主要介绍"怎么使用Casbin",在日常操作中,相信很多人在怎么使用Casbin问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"怎么使用Casbin"的疑惑有所帮
千家信息网最后更新 2025年02月07日怎么使用Casbin

这篇文章主要介绍"怎么使用Casbin",在日常操作中,相信很多人在怎么使用Casbin问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"怎么使用Casbin"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

安装

使用 Composer 安装:

composer require casbin/laravel-authz

Lauthz\LauthzServiceProviderauto-discovered 的,并且默认情况下已注册,但是如果您想自己注册,可以在 config/app.php 中添加 ServiceProvider:

'providers' => [    /*     * Package Service Providers...     */    Lauthz\LauthzServiceProvider::class,]

Enforcer facade 也是 auto-discovered,但是如果您想手动添加它,在 config/app.php添加:

'aliases' => [    // ...    'Enforcer' => Lauthz\Facades\Enforcer::class,]

要发布配置,请运行 vendor:publish 命令:

php artisan vendor:publish

这就自动创建 Model 配置文件 config/lauthz-rbac-model.conf 和 一个新的 Lauthz 配置文件 config/lauthz.php

要迁移迁移,请运行migrate命令:

php artisan migrate

这将创建一个 rules 数据表。

用法

快速开始

安装后,您可以执行以下操作:

use Enforcer;// adds permissions to a userEnforcer::addPermissionForUser('eve', 'articles', 'read');// adds a role for a user.Enforcer::addRoleForUser('eve', 'writer');// adds permissions to a ruleEnforcer::addPolicy('writer', 'articles','edit');

您可以校验用户的权限,如下:

// to check if a user has permissionif (Enforcer::enforce("eve", "articles", "edit")) {    // permit eve to edit articles} else {    // deny the request, show an error}

使用 Enforcer Api

它提供了非常丰富的 API,以促进对 Policy 的各种操作:

获取所有角色:

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 userEnforcer::addPermissionForUser('eve', 'articles', 'read');// to roleEnforcer::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 userEnforcer::deletePermissionsForUser('eve');// to roleEnforcer::deletePermissionsForUser('writer');

获取用户或角色的所有权限:

Enforcer::getPermissionsForUser('eve'); // return array

觉得某个用户是否拥有某个权限:

Enforcer::hasPermissionForUser('eve', 'articles', 'read');  // true or false

更多 API 参考 Casbin API 。

使用中间件

该扩展包带有 EnforcerMiddlewareRequestMiddleware 中间件。 您可以将它们添加到您的app/Http/Kernel.php文件中:

protected $routeMiddleware = [    // ...    // a basic Enforcer Middleware    'enforcer' => \Lauthz\Middlewares\EnforcerMiddleware::class,    // an HTTP Request Middleware    'http_request' => \Lauthz\Middlewares\RequestMiddleware::class,];
基本 Enforcer 中间件

然后就可以使用它们来保护路由了:

Route::group(['middleware' => ['enforcer:articles,read']], function () {    // pass});
HTTP 请求中间件 ( 支持RESTful )

如果需要授权一个请求,则需要首先在 config/lauthz-rbac-model.conf 中定义模型配置:

[request_definition]r = sub, obj, act[policy_definition]p = sub, obj, act[role_definition]g = _, _[policy_effect]e = some(where (p.eft == allow))[matchers]m = g(r.sub, p.sub) && keyMatch3(r.obj, p.obj) && regexMatch(r.act, p.act)

然后,使用中间件规则:

Route::group(['middleware' => ['http_request']], function () {    Route::resource('photo', 'PhotoController');});

多个决策器

如果您的项目中需要多个权限控制,则可以配置多个 决策器

lauthz 配置文件中, 应该这样配置:

return [    'default' => 'basic',    'basic' => [        'model' => [            // ...        ],        'adapter' => Lauthz\Adapters\DatabaseAdapter::class,        // ...    ],    'second' => [        'model' => [            // ...        ],        'adapter' => Lauthz\Adapters\DatabaseAdapter::class,        // ...    ],];

然后选择使用哪一个决策器:

Enforcer::guard('second')->enforce("eve", "articles", "edit");

Artisan 命令行

你可以在 控制台 使用 artisan 命令创建策略:

给用户添加策略:

php artisan policy:add eve,articles,read

给角色添加策略:

php artisan policy:add writer,articles,edit

给用户赋予角色:

php artisan role:assign eve writer

缓存

缓存 授权 规则可以提升性能,默认是关闭的。

在 Laravel 的 config/lauthz.php 中设置自己的缓存配置:

'cache' => [    // changes whether Lauthz will cache the rules.    'enabled' => false,    // cache store    'store' => 'default',    // cache Key    'key' => 'rules',    // ttl \DateTimeInterface|\DateInterval|int|null    'ttl' => 24 * 60,],

到此,关于"怎么使用Casbin"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

角色 用户 权限 配置 中间件 命令 文件 学习 多个 更多 策略 缓存 规则 决策 帮助 控制 运行 实用 接下来 单个 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 白云物联网软件开发哪家好 长宁区服务器回收厂家哪家便宜 美国网络安全漏洞 网络安全与病毒的防范措施 电脑方舟怎么加入非官方服务器 天津渣打银行软件开发 小学网络安全讲课稿 安全数据库加密存储 西安云师港互联网科技有限公司 华为软件开发对算法要求高么 uu加速器链接服务器 数据库系统教程第三章课后答案 林业科技互联网 学生专业表数据库如何设计 计算机网络技术好找工作 django 同步数据库 擎天软件数据库无法识别 网络安全大比武试题 昆明网络安全比赛 dayz怎么进入俄罗斯服务器 服务器内存对系统有要求么 航空嵌入式软件开发 网络安全初始化配置失败 计算机网络技术对社会作用 软件开发违约了怎么处理 数据库关系的码 壁挂式边缘计算服务器多少钱 大型超市一般用什么数据库 自学网络技术要多久 废旧手机改造成linux服务器
0