千家信息网

怎么使用Casbin

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

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

安装

使用 Composer 安装:

composer require casbin/laravel-authz

Lauthz\LauthzServiceProvider 是 auto-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 。

使用中间件

该扩展包带有 EnforcerMiddleware 和 RequestMiddleware 中间件。 您可以将它们添加到您的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安全错误 数据库的锁怎样保障安全 互联网科技巨头监管 中国互联网科技股 互联网 科技公司 中正互联网科技招聘 海南购全球互联网科技 济南和联互联网科技有限公司 互联网汽车科技小镇 农村开互联网科技讲堂 互联网教育科技公司vipkid 创业天下互联网科技有限公司 受益于互联网科技的高速发展 朱啸虎曾投资哪些互联网科技企业 互联网公司高科技产品 互联网营销推广黑科技 宇信科技在杭州互联网排第几 互联网硬科技公司 银川新华互联网科技学校是国营吗 长沙易易互联网科技有限公司 高科技和互联网的现代国家 互联网 科技节活动 微视频大赛 中智农互联网科技 广东猪兼强互联网科技有限公司 睿民互联网科技 赫美联合互联网科技 互联网公司会议桌创意科技软装饰 哈尔滨新华互联网科技学院 中国的互联网科技企业的崛起 黑科技 体验场景 互联网大会 产业互联网科技服务公司 中国科技和美国互联网
0