ThinkPHP扩展RBAC权限分配

北京去哪个医院看白癜风好 http://pf.39.net/bdfyy/bdfyc/160315/4789140.html

今天晚上把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.jiaju1314.com/jyqj/jyqj/13145.html

  • 上一篇文章:
  •   
  • 下一篇文章: 没有了