当前位置: 首页 > 后端技术 > PHP

PHP-Casbin:一个支持ACL、RBAC、ABAC模型的PHP权限管理框架

时间:2023-03-30 05:36:28 PHP

PHP-Casbin是一个轻量级的开源PHP访问控制框架(https://github.com/php-casbin...),目前在GitHub上开源。PHP-Casbin采用元模型的设计思想,支持多种经典的访问控制方案,如基于角色的访问控制RBAC、基于属性的访问控制ABAC等。PHP-Casbin的主要特点包括1.支持自定义请求格式,默认请求格式为{subject,object,action};2.拥有访问控制模型model和policy策略两大核心概念;3、支持RBAC多层角色继承,不仅主体可以有角色,资源也可以有角色;4.支持超级用户,如root或Administrator,超级用户可以访问任意资源,不受授权策略的限制;5.支持多种内置操作符,比如keyMatch,方便管理基于路径的资源,比如/foo/bar可以映射到/foo*PHP-Casbin做不到的:1.身份认证(即,验证用户的用户名和密码),PHP-CasbinCasbin只负责访问控制。应该有其他专门的组件负责身份认证,然后是PHP-Casbin做访问控制,两者是合作关系;2.管理用户列表或角色列表。PHP-Casbin认为由项目自己来管理用户和角色列表比较合适。PHP-Casbin假定策略和请求中出现的所有用户、角色和资源都是合法有效的。安装composerrequirecasbin/casbinHelloWorld示例1.初始化一个enforcer,传入两个参数:model文件路径和policy文件路径;$e=newEnforcer(__DIR__.'/examples/modelandpolicy/basic_model.conf',__DIR__."/examples/modelandpolicy/basic_policy.csv");2.在你的代码需要访问控制的地方添加如下钩子;$sub="爱丽丝";//想要访问资源的用户。$obj="data1";//将要访问的资源。$act="阅读";//用户对资源执行的操作。if($e->enforce($sub,$obj,$act)===true){//允许alice读取数据1}else{//拒绝请求,显示错误}3.使用管理API来管理权限,例如获取用户拥有的角色;$roles=$e->getRoles('爱丽丝');在框架中使用Laravel:ThePHPframeworkforwebartisans,viaplugin:laravel-casbinYiiPHPFramework:Afast,secure,andefficientPHPframework,viaplugin:yii-casbinThinkPHP:TheThinkPHPframework,viaplugin:think-casbincommunity进展PHP-Casbin目前正在积极向社区推送,目前支持通过插件的方式与Laravel等Web框架集成,未来会扩展到更多的Web框架和社区。Casbin已经有Golang版本、Java版本、PHP版本和Node.js版本。有跨语言需求的开发者可以只使用Casbin框架实现多个不同语言项目的权限管理任务。Casbin(Go):https://github.com/casbin/casbinjCasbin(Java):https://github.com/casbin/jca...PHP-Casbin(PHP):https://github.com/php-casbin...Node-Casbin(Node.js):https://github.com/casbin/nod...协议PHP-Casbin在Apache2.0开源协议下发布。有问题联系作者,请提交Issues:https://github.com/php-casbin...