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' //权限表名称
- );
- ?>
最后希望对大家有帮助。!!!!
1612

被折叠的 条评论
为什么被折叠?



