Casbin入门
简介
Casbin 是一个强大的、高效的开源访问控制框架,其权限管理机制支持多种访问控制模型。支持的语言也很多,例如:PHP、go、java、node.js、python等等.
支持编程语言
2022
Casbin | jCasbin | node-Casbin | PHP-Casbin |
可用于生产环境 | 可用于生产环境 | 可用于生产环境 | 可用于生产环境 |
PyCasbin | Casbin4D | Casbin-Net | Casbin-RS |
可用于生产环境 | experimental | WIP | WIP |
特性
Casbin 做了什么?
-
自定义请求的格式,默认的请求格式为 {subject, object, action}
。 -
访问控制模型及其策略的存储。 -
支持RBAC中的多层角色继承,不止主体可以有角色,资源也可以具有角色。 -
支持超级用户,如 root 或 Administrator,超级用户可以不受授权策略的约束访问任意资源。 -
支持多种内置的操作符,如 keyMatch,方便对路径式的资源进行管理,如 /foo/bar 可以映射到 /foo*。
Casbin 不做的事情
身份认证 authentication(即验证用户的用户名、密码),casbin只负责访问控制。应该有其他专门的组件负责身份认证,然后由casbin进行访问控制,二者是相互配合的关系。管理用户列表或角色列表。
Casbin 认为由项目自身来管理用户、角色列表更为合适, 用户通常有他们的密码,但是 Casbin的设计思想并不是把它作为一个存储密码的容器。而是存储RBAC方案中用户和角色之间的映射关系。
插件应用
安装
composer require -W casbin/webman-permission
使用
1. 依赖注入配置
修改配置config/container.php
,其最终内容如下:
$builder = new DIContainerBuilder();
$builder->addDefinitions(config('dependence', []));
$builder->useAutowiring(true);
return $builder->build();
2. 数据库配置
默认策略存储是使用的ThinkORM。如使用 laravel的数据库 illuminate/database,请按照官方文档按照相应的依赖包:https://www.workerman.net/doc/webman/db/tutorial.html
1、模型配置
以下模型可以二选一,ThinkORM(默认)
使用ThinkORM(默认)
修改数据库 thinkorm.php
配置
使用laravel数据库(可选)
-
修改数据库 database.php
配置 -
修改数据库 permission.php
的adapter
适配器为laravel适配器
2、创建 casbin_rule
数据表
CREATE TABLE `casbin_rule` (
`id` BIGINT ( 20 ) UNSIGNED NOT NULL AUTO_INCREMENT,
`ptype` VARCHAR ( 128 ) NOT NULL DEFAULT '',
`v0` VARCHAR ( 128 ) NOT NULL DEFAULT '',
`v1` VARCHAR ( 128 ) NOT NULL DEFAULT '',
`v2` VARCHAR ( 128 ) NOT NULL DEFAULT '',
`v3` VARCHAR ( 128 ) NOT NULL DEFAULT '',
`v4` VARCHAR ( 128 ) NOT NULL DEFAULT '',
`v5` VARCHAR ( 128 ) NOT NULL DEFAULT '',
PRIMARY KEY ( `id` ) USING BTREE,
KEY `idx_ptype` ( `ptype` ) USING BTREE,
KEY `idx_v0` ( `v0` ) USING BTREE,
KEY `idx_v1` ( `v1` ) USING BTREE,
KEY `idx_v2` ( `v2` ) USING BTREE,
KEY `idx_v3` ( `v3` ) USING BTREE,
KEY `idx_v4` ( `v4` ) USING BTREE,
KEY `idx_v5` ( `v5` ) USING BTREE
) ENGINE = INNODB CHARSET = utf8mb4 COMMENT = '策略规则表';
3、配置 config/redis
配置
4、重启webman
php start.php restart
或者
php start.php restart -d
快速开始
安装成功后,可以这样使用:
use CasbinWebmanPermissionPermission;
// 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');
你可以检查一个用户是否拥有某个权限:
if (Permission::enforce("eve", "articles", "edit")) {
echo '恭喜你!通过权限认证';
} else {
echo '对不起,您没有该资源访问权限';
}
多套驱动配置
需要插件大于版本
webman-permission >=1.2.0
use CasbinWebmanPermissionPermission;
$permission = Permission::driver("other_conf")
// 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');
if ($permission->enforce("eve", "articles", "edit")) {
echo '恭喜你!通过权限认证';
} else {
echo '对不起,您没有该资源访问权限';
}
更多 API
参考 Casbin API 。
原文始发于微信公众号(开源技术小栈):Webman实战教程:基于Casbin的权限管理访问控制插件应用
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/248272.html