Rbac控制器代码

<?php class RBACAction extends PublicAction{ //用户列表 public function index(){ $res=D('UserRelation')->field('password',true)->relation(true)->select(); $this->assign('list',$res); $this->display(); } //用户锁定处理 public function indexlocked(){ $id=$_GET['id']; //锁定用户 if($id==1){//判断用户是否为超级管理员,如果是不能做任何操作(我的超级管理员ID为1) $this->error('对不起,您不能对此用户做任何操作!'); }else{ $i=M('User')->where(array('id'=>$id))->setField('lock','1'); $this->success('用户已关闭!'); } } //用户解锁处理 public function indexlock(){ $id=$_GET['id']; //解锁用户 if($id==1){//判断用户是否为超级管理员,如果是不能做任何操作(我的超级管理员ID为1) $this->error('对不起,您不能对此用户做任何操作!'); }else{ $i=M('User')->where(array('id'=>$id))->setField('lock','0'); $this->success('用户已开启!'); } } //角色列表 public function relo(){ $relo = M('role')->select(); $this->assign('relo',$relo); $this->display(); } //节点列表 public function node(){ $field=array('id','name','title','pid'); $node = M('node')->field($field)->order('sort')->select(); $node=node_merge($node); //print_r($node);die; $this->assign('node',$node); $this->display(); } //添加用户 public function addUser(){ $role=M('role')->select(); $this->assign('role',$role); $this->display(); } //添加用户表单接受 public function addUserHandle(){ //print_r($_POST); //判断注册用户是否存在 $w=htmlspecialchars(trim($_POST['username'])); $i=M('user')->where(array('username'=>$w))->select(); if($i!=''){ $this->error('用户名已存在!'); }else{ //组合用户信息并添加 $user=array( 'username'=>htmlspecialchars(trim($_POST['username'])), 'password'=>md5($_POST['password']), 'logintime'=>time(), 'loginip'=>get_client_ip(), 'lock'=>$_POST['lock'] ); //添加用户与角色关系 $role=array(); if($uid=M('user')->add($user)){ foreach($_POST['role_id'] as $v){ $role[]=array( 'role_id'=>$v, 'user_id'=>$uid ); } M('role_user')->addAll($role); $this->success('添加成功!',U('index')); }else{ $this->error('添加失败!'); } } } //添加角色 public function addRole(){ $this->display(); } //添加角色接受表单 public function addRoleHandle(){ if(M('Role')->add($_POST)){ $this->success('-_- yes!',U('relo')); }else{ $this->error('-_-。sorry!'); } } //添加节点 public function addNode(){ $pid=isset($_GET['pid'])?$_GET['pid']:0; $level=isset($_GET['level'])?$_GET['level']:1; $this->assign('pid',$pid); $this->assign('level',$level); switch($level){ case 1: $this->type='应用'; break; case 2: $this->type='控制器'; break; case 3: $this->type='动作方法'; break; } $this->display(); } //添加节点接受表单 public function addNodeHandle(){ //print_r($_POST); if(M('Node')->add($_POST)){ $this->success('-_- yes!',U('node')); }else{ $this->error('-_-。sorry!'); } } //配置权限 public function access(){ $rid=$_GET['rid']; //读取有用字段 $field=array('id','name','title','pid'); $node=M('node')->order('sort')->field($field)->select(); //读取用户原有权限 $access=M('access')->where(array('role_id'=>$rid))->getField('node_id',true); $node=node_merge($node,$access); $this->assign('rid',$rid); $this->assign('node',$node); $this->display(); } //配置权限接受表单 public function setAccess(){ $rid=$_POST['rid']; $db=M('access'); //删除原权限 $db->where(array('role_id' => $rid))->delete(); //组合新权限 $data=array(); foreach($_POST['access'] as $v){ $tmp=explode('_',$v); $data[]=array( 'role_id'=>$rid, 'node_id'=>$tmp[0], 'level'=>$tmp[1] ); } //插入新权限 if($db->addAll($data)){ $this->success('修改成功!',U('relo')); }else{ $this->error('修改失败!'); } } }//end ?>

这是判断后台每个页面权限的,判断用户是否登录,我每个控制器都是继承他所以每个页面都有判断是否登录的判断,也就不存在可以直接跳过登录直接进来

<?php class PublicAction extends Action{ //判断用户是否登录 public function _initialize(){ if(!isset($_SESSION[C('USER_AUTH_KEY')])){ $this->redirect('admin/Login/index'); } $notAuth=in_array(MODULE_NAME, explode(',', C('NOT_AUTH_MODULE')))||in_array(ACTION_NAME, explode(',', C('NOT_AUTH_ACTION'))); if(C('USER_AUTH_ON')&& !$notAuth){ import('ORG.Util.RBAC'); RBAC::AccessDecision(GROUP_NAME)||$this->error('sorry!您无权访问!'); } } }//end ?>

这个是登录模块判断

<?php //后台登录控制 class LoginAction extends Action{ //后台登录模板输出 public function index(){ $this->display(); } //登录方法 public function login (){ if(!IS_POST) _404('404,页面不存在!'); $yzm=$_POST['yzm']; $username=$_POST['username']; $pwd=md5($_POST['password']); if($_SESSION['verify']!=md5($yzm)){ $this->error('验证码错误!'); } $i=M('User')->where(array('username'=>$username))->find(); if(!$i|$i['password']!=$pwd){ $this->error('用户名或者密码错误!'); } if($i['lock']==1){ $this->error('-_-。抱歉!ID不合法!'); } $data=array( 'logintime'=>time(), 'loginip'=>get_client_ip(), 'id'=>$i['id'], ); M('User')->save($data); session(C('USER_AUTH_KEY'),$i['id']); session('username',$i['username']); session('logintime',date('Y-M-D H:i:s',$i['logintime'])); session('loginip',$i['loginip']); //验证超级管理员 if($i['username']==C('RBAC_SUPERADMIN')){ session(C('ADMIN_AUTH_KEY'),true); } //引入RBAC并读取验证权限 import('ORG.Util.RBAC'); RBAC::saveAccessList(); $this->redirect('admin/Index/index'); } //引入验证码 public function yzm(){ import('ORG.Util.Image'); Image::buildImageVerify(4,1,'png',80,32); } }//end ?>

这一块是后台配置文件

<?php return array( 'TMPL_PARSE_STRING'=>array( '__PUBLIC__'=>__ROOT__.'/'.APP_NAME.'./Tpl/Admin/Public', ), 'URL_HTML_SUFFIX' => '.html', /**********************************RBAC配置*******************************************/ 'RBAC_SUPERADMIN' => 'admin', //超级管理员名 'ADMIN_AUTH_KEY' => 'superadmin', //超级管理员识别 'USER_AUTH_ON' => true, //是否开启验证 'USER_AUTH_TYPE' => 1, //验证类型(1.登录验证2.实时验证) 'USER_AUTH_KEY' => 'uid', //用户认证识别号 'NOT_AUTH_MODULE' => 'Index', //无需认证的控制器 'NOT_AUTH_ACTION' => 'addUserHandle,addRoleHandle,addNodeHandle,setAccess', //无需验证的模块(动作方法) 'RBAC_ROLE_TABLE' => 'hd_role', //角色表名称 'RBAC_USER_TABLE' => 'hd_role_user', //角色与用户关联表名称 'RBAC_NODE_TABLE' => 'hd_node', //节点表名称 'RBAC_ACCESS_TABLE' => 'hd_access' //权限表名称 ); ?>

最后希望对大家有帮助。!!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值