ThinkPHP扩展RBAC权限分配

今天晚上把ThinkPHP的权限分配弄明白了,心里的包袱立刻放下了,感觉那个爽啊!稍微记录一下。

背景:CMS系统开发(17do)。

项目分组:Admin(后台管理)、Home(前台显示)。Admin组中包含ManagerAction、UserActin、ArticleAction三个控制器

部分:表关系对应(箭头是指数据来源)

其中表结构式根据RBAC规定的结构创建的。

定义结果:站长1能访问项目用户和文章的所有操作,管理员3只能对文章模块操作不能访问用户模块。

第二部分:项目配置项目的config.php文件中添加

//权限分配设置USER_AUTH_ON=true,//是否需要认证USER_AUTH_TYPE=1,//认证类型USER_AUTH_KEY=userId,//认证识别号USER_AUTH_MODEL=user,//模型实例(用户表名)REQUIRE_AUTH_MODULE=User,//需要认证模块NOT_AUTH_MODULE=,//无需认证模块USER_AUTH_GATEWAY=/Public/login,//认证网关//RBAC_DB_DSN数据库连接DSNRBAC_ROLE_TABLE=do_role,//角色表名称RBAC_USER_TABLE=do_role_user,//用户和角色对应关系表名称RBAC_ACCESS_TABLE=do_access,//权限分配表名称RBAC_NODE_TABLE=do_node,//权限表名称

第三部分:权限信息写入控制器

publicfunctioncheckUser(){//表单数据不能为空if($this-_post(username)$this-_post(password)$this-_post(verifycode)){$pwd=$this-_post(password);$username=$this-_post(username);//验证码是否正确$verify=$this-_post(verifycode);if($this-_session(verify)!=md5($verify)){$this-error(验证码错误);}else{//创建数据库对象$user=M(user);//根据用户名查询$cond[username]=$username;$cond[active]=array(gt,0);//加载RBAC类import(ORG.Util.RBAC);//通过authenticate读取用户信息$result=RBAC::authenticate($cond);//dump($result);if($result){if($result[password]==md5($pwd)){$_SESSION[C(USER_AUTH_KEY)]=$result[id];$_SESSION[name]=$result[name];//使用saveAccessList缓存访问权限RBAC::saveAccessList();$this-display(Manager:index);}else{$this-error(用户密码错误);}}else{$this-error(用户名不存在或已经被禁用);}

}

第四部分:创建验证权限控制器

classCommonActionextendsAction{

//_initialize()方法是ThinkPHP提供的入口方法,类似于原PHP中__condition()构造函数。可以存放所有公用信息。function_initialize(){//判断是否开启认证,并且当前模块需要验证if(C(USER_AUTH_ON)!in_array(MODULE_NAME,explode(,,C(NOT_AUTH_MODULE)))){//导入RBAC类,开始验证import(ORG.Util.RBAC);//通过accessDecision获取权限信息if(!RBAC::AccessDecision()){//没有获取到权限信息时需要执行的代码//1、用户没有登录if(!$_SESSION[C(USER_AUTH_KEY)]){$url=U(Public/login);$this-error(您还没有登录不能访问,$url);}$this-error(您没有操作权限);}}}}

第五部分:验证控制器调用

只要需要权限验证的控制器继承CommonAction就可以啦!

使用admin账号登陆能正常访问

使用xiaoxiao账号登陆后不能访问用户列表页面









































白癜风医院昆明哪家好
北京中科医院忽悠



转载请注明:http://www.xxcyfilter.com/zyxz/5693.html