ThinkPHP中可以通过使用RBAC(基于角色的访问控制)插件来实现动态权限控制。以下是具体实现步骤:
引入RBAC插件
在ThinkPHP中,可以通过composer安装RBAC插件,使用命令composer require topthink/think-auth
进行安装。安装完成后,在config目录下的app.php文件中配置'auth' => [ 'auth_on' => true, // 认证开关 'auth_type' => 1, // 认证方式,1为实时认证;2为登录认证。 'auth_group' => 'auth_group', // 用户组数据表名 'auth_group_access' => 'auth_group_access', // 用户-用户组关系表 'auth_rule' => 'auth_rule', // 权限规则表 'auth_user' => 'user', // 用户信息表 ]
。
创建权限规则表 在数据库中创建权限规则表,包含字段id、name、title、type、status、condition、create_time和update_time。其中,id为主键,name表示权限规则唯一标识,title表示权限规则中文名称,type表示权限规则类型(1为URL规则,2为菜单规则),status为状态(1为正常,0为禁用),condition为规则表达式,create_time和update_time为创建时间和更新时间。
创建用户组表和用户-用户组关系表 在数据库中创建用户组表和用户-用户组关系表,分别包含字段id、title、status、rules、create_time和update_time,和uid、group_id、create_time和update_time。其中,id为主键,title表示用户组名称,status为状态(1为正常,0为禁用),rules为权限规则ID,uid和group_id分别是用户ID和用户组ID,create_time和update_time为创建时间和更新时间。
添加权限规则 在权限规则表中添加需要控制的权限规则。
创建控制器
创建需要控制的控制器,使用$this->middleware(['CheckAuth'])
进行中间件的注册。
创建中间件
创建中间件CheckAuth,判断当前用户是否有权限访问该控制器。在中间件中,可以使用$auth = new \think\Auth();
来实例化Auth类,使用$auth->check($rule, $uid, $type, $mode, $relation)
方法进行权限验证。其中,$rule表示需要验证的规则名称,$uid表示用户ID,$type表示验证方式(1为角色验证,2为规则验证),$mode表示执行check的模式(1为全为true才为true,0为有一个为true就为true),$relation表示多个规则的关系(and表示全部验证通过才为true,or表示只要有一个验证通过就为true)。
注册中间件 在app\http\middleware.php文件中注册CheckAuth中间件。
验证权限
在使用需要控制权限的控制器中,使用$this->middleware(['CheckAuth:ruleName'])
来验证权限。其中,ruleName为需要验证的规则名称。
以上是使用ThinkPHP实现动态权限控制的步骤。