Thinkphp5.0权限管理( 控制器模型 )

节点表(Rule)

id name(名称) pid(父id) level(等级) controllor(控/方) sort(排序) status(状态)

角色表(Group)

id name(名称) rules(节点id,逗号分隔) status(状态)

用户表(Admin)

id name(名称) r_id(权限id) name(账号) pwd(密码) status(状态)  

 

 

# 公共控制器 

 

 1 <?php
 2    namespace app\admin\controller;
 3    use think\Controller;
 4    use think\Request;
 5    class Base extends Controller{
 6    public function _initialize(){
7   if(!session('id') || !session('name')){ 8     $this->error('您尚未登录系统',url('login/index')); } 9     $auth=new Auth(); 10     $request=Request::instance(); 11     $con=$request->controller();//当前控制器 12     $action=$request->action(); //当前方法 13     $name=$con.'/'.$action; 14     $notCheck=array('Index/index','Admin/lst','Admin/logout'); 15     if(session('id')!=1){ 16     if(!in_array($name, $notCheck)){ 17     if(!$auth->check($name,session('id'))){ 18     $this->error('没有权限',url('index/index')); 19   } 20   } 21   } 22   } 23  }

 

 

 

# 登陆账号_ADMIN 

 1 <?php
 2    namespace app\admin\controller;
 3    use app\admin\model\AuthGroupAccess;
 4    use app\admin\controller\Common; 
 5    class Admin extends Common{
 6 
 7    //视图
 8   public function lst(){ 
 9       $authid=session('id');
10       //查询所有用户
11       $d=db('bk_auth_group_access')->alias('a')
12           ->join('bk_auth_group b','a.group_id=b.id','LEFT')
13           ->select();
14          $this->assign('list',$d);
15          return view();
16       }
17 
18    //添加
19   public function add(){
20   if(request()->isPost()){
21   $data=input('post.');
22   if(AuthGroupAccess::addadmin($data)){
23   $this->success('添加管理员成功!',url('lst'));
24   }else{
25   $this->error('添加管理员失败!');
26   }
27   return;
28      }
29   $authGroupRes=db('bk_auth_group')->select();//所有分组
30   $this->assign('authGroupRes',$authGroupRes);
31   return view();
32 }
33 
34 //编辑
35 public function edit(){
36   $admins=db('admin')->find($id);
37   if(request()->isPost()){
38   $data=input('post.');
39   $validate = \think\Loader::validate('Admin');
40   if(!$validate->scene('edit')->check($data)){
41   $this->error($validate->getError());
42     }
43 
44   $savenum=AuthGroupAccess::saveadmin($data,$admins);
45   if($savenum == '2'){
46   $this->error('管理员用户名不得为空!');
47     }
48   if($savenum !== false){
49        $this->success('修改成功!',url('lst'));
50     }else{
51        $this->error('修改失败!');
52    }
53        return;
54    }
55 
56    if(!$admins){
57        $this->error('该管理员不存在');
58 }
59        $authGroupAccess=db('auth_group_access')->where(array('uid'=>$id))->find();
60   $authGroupRes=db('auth_group')->select();
61   $this->assign('authGroupRes',$authGroupRes);
62   $this->assign('admin',$admins);
63   $this->assign('groupId',$authGroupAccess['group_id']);
64   return view();
65 }
66 
67 //删除
68 public function del($id){
69   $delnum=AuthGroupAccess::deladmin($id);
70   if($delnum == '1'){
71   $this->success('删除管理员成功!',url('lst'));
72       }else{
73   $this->error('删除管理员失败!');
74     }
75 }

 

# 用户组 _AuthGroup

 1 <?php
 2 namespace app\admin\controller;
 3 use app\admin\model\AuthGroup as _AuthGroup;
 4 use app\admin\model\AuthRule;
 5 use app\admin\controller\Common;
 6 class AuthGroup extends Common{ 
 7 
 8 //用户组 
 9 public function lst(){
10   $authGroupRes=_AuthGroup::paginate(6);
11   $this->assign('list',$authGroupRes);
12   return view(); 
13  }
14 
15 // 添加用户组 
16 public function add(){
17   if(request()->isPost()){
18   $data=input('post.');
19   if($data['rules']){
20        $data['rules']=implode(',', $data['rules']);//节点,分隔
21  }
22        $add=db('auth_group')->insert($data);
23   if($add){
24   $this->success('添加用户组成功!',url('lst'));
25  }else{
26        $this->error('添加用户组失败!');
27    }
28        return;
29  }
30   $Group=AuthRule::authRuleTree();
31   return view('add',['list'=>$Group]);
32 }
33 
34   /* 编辑用户组 */
35   public function edit(){
36   if(request()->isPost()){
37   $data=input('post.');
38   if($data['rules']){
39   $data['rules']=implode(',', $data['rules']);
40      }
41   $data['status']=isset($data['status'])?'1':'0'; //状态
42   $save=db('auth_group')->update($data);
43   if($save!==false){
44   $this->success('修改用户组成功!',url('lst'));
45      }else{
46   $this->error('修改用户组失败!');
47      }
48        return;
49     }
50   $da=db('auth_group')->find(input('id'));
51   $Group=AuthRule::authRuleTree(); 
52   return view('edit',['list'=>$Group,'info'=>$da]);
53     }
54 
55   //删除
56   public function del(){
57   $del=db('auth_group')->delete(input('id'));
58   if($del){
59   $this->success('删除用户组成功!',url('lst'));
60      }else{
61   $this->error('删除用户组失败!');
62      }
63     }

 

# 权限列表_AuthRule 

 1 <?php
 2 namespace app\admin\controller;
 3 use app\admin\model\AuthRule as _AuthRule;
 4 use app\admin\controller\Common;
 5 class AuthRule extends Common {
 6 
 7   /* 权限 */
 8   public function lst(){
 9   if(request()->isPost()){
10   $sort=input('post.');//排序接收全部 id
11   foreach($sort as $k=>$v){
12   _AuthRule::update(['id'=>$k,'sort'=>$v]);
13      }
14   $this->success('更新排序成功!',url('lst'));
15   return;
16      }
17   $info=_AuthRule::authRuleTree(); //查询所有的权限
18   return view('lst',['list'=>$info]);
19      }
20 
21    /* 添加权限 */
22    public function add(){
23   if(request()->isPost()){
24   $data=input('post.');
25   $plevel=db('auth_rule')->field('level')->where('id',$data['pid'])->find();
26   if($plevel==null){
27   $data['level']=0; 
28    }else{
29        $data['level']=$plevel['level']+1; 
30    }
31   $add=db('auth_rule')->insert($data);
32   if($add){
33   $this->success('添加权限成功!',url('lst'));
34       }else{
35   $this->error('添加权限失败!');
36       }
37      }
38   $info=_AuthRule::authRuleTree(); //查询所有的权限
39   return view('add',['list'=>$info]);
40      }
41 
42   /* 修改 */
43   public function edit(){
44   if(request()->isPost()){
45   $data=input('post.');
46   $plevel=db('auth_rule')->field('level')->where('id',$data['pid'])->find();
47   if($plevel==null){
48   $data['level']=0; 
49       }else{
50   $data['level']=$plevel['level']+1; 
51       }
52   $add=db('auth_rule')->where('id',$data['id'])->update($data);
53   if($add){
54   $this->success('添加权限成功!',url('lst'));
55      }else{
56   $this->error('添加权限失败!');
57      }
58    return;
59     }
60         $info=_AuthRule::authRuleTree(); //查询所有的权限
61         $data=_AuthRule::get(input('id'))->toArray();
62         return view('edit',['list'=>$info,'data'=>$data]);
63    }
64 
65   /* 删除 */
66   public function del(){
67   $id=input('id');
68   //$authRule->getparentid($id); authRule
69   $authRuleIds=_AuthRule::getchilrenid($id);
70   $authRuleIds[]=input($id);
71   $del= _AuthRule::destroy($authRuleIds);
72   if($del){
73   $this->success('删除权限成功!',url('lst'));
74       }else{
75   $this->error('删除权限失败!');
76       }
77      }
78     }

 

/***  MODEL   ***/
#  登陆用户表_AuthGroupAccess

 1 <?php
 2    namespace app\admin\model;
 3    use think\Model;
 4    class AuthGroupAccess extends Model{
 5 
 6       public static function addadmin($data){
 7           if(empty($data) || !is_array($data)){
 8           return false;
 9          }
10          if($data['password']){
11           $data['password']=md5($data['password']);
12          }
13   $adminData=array();
14   $adminData['name']=$data['name'];
15   $adminData['password']=$data['password'];
16   if($this->save($adminData)){
17   $groupAccess['uid']=$this->id;
18   $groupAccess['group_id']=$data['group_id'];
19   db('auth_group_access')->insert($groupAccess);
20   return true;
21    }else{
22   return false;
23    }
24 
25    }
26 
27   public static function getadmin(){
28      return static::paginate(5,false,['type'=>'boot','var_page' => 'page',]);
29    }
30 
31   public function saveadmin($data,$admins){
32   if(!$data['name']){
33   return 2;//管理员用户名为空
34   }
35   if(!$data['password']){
36   $data['password']=$admins['password'];
37       }else{
38   $data['password']=md5($data['password']);
39       }
40   db('auth_group_access')->where(array('uid'=>$data['id']))->update(['group_id'=>$data['group_id']]);
41   return $this::update(['name'=>$data['name'],'password'=>$data['password']],['id'=>$data['id']]);
42    }
43 
44    public function deladmin($id){
45   if($this::destroy($id)){
46   return 1;
47    }else{
48   return 2;
49   }
50   }
51 
52 //登陆 
53 public static function login($data){
54   $admin=AuthGroupAccess::getByName($data['name'])->toArray();
55   if($admin){
56   if($admin['password']==md5($data['password'])){
57   session('id', $admin['id']);
58   session('name', $admin['name']);
59   return 2; //登录密码正确的情况
60   }else{
61   return 3; //登录密码错误
62   }
63   }else{
64   return 1; //用户不存在的情况
65   }
66 
67   }

 

#  权限模型_AuthRule

 1 <?php
 2 namespace app\admin\model;
 3 use think\Model;
 4 class AuthRule extends Model{
 5 
 6   /* 全部权限 */
 7  public static function authRuleTree(){
 8   $con=static::order('sort desc')->select();
 9   return self::sort($con);
10   }
11   // 排序
12   public static function sort($data,$pid=0){
13   static $arr=array();
14   foreach ($data as $k => $v) {
15   if($v['pid']==$pid){
16   $v['dataid']=self::getparentid($v['id']); //查找上id
17   $arr[]=$v;
18   self::sort($data,$v['id']);
19   }
20   }
21   return $arr;
22   }
23   /* 查找下面 Id */
24   public static function getchilrenid($id){
25    $AuthRuleRes=static::select();
26    return static::_getchilrenid($AuthRuleRes,$id);
27    }
28 
29   public static function _getchilrenid($AuthRuleRes,$id){
30    static $arr=array();
31    foreach ($AuthRuleRes as $k => $v) {
32    if($v['pid'] == $id){
33    $arr[]=$v['id'];
34    static::_getchilrenid($AuthRuleRes,$v['id']);
35     }
36    }
37 
38        return $arr;
39   }
40 
41  /* 查找上面ID */ 
42  public static function getparentid($id){
43   $AuthRuleRes=AuthRule::select();
44   return self::_getparentid($AuthRuleRes,$id,True);
45    }
46 
47   public static function _getparentid($AuthRuleRes,$id,$clear=False){
48   static $arr=array();
49   if($clear){
50   $arr=array();
51   }
52   foreach ($AuthRuleRes as $k => $v) {
53   if($v['id'] == $id){
54   $arr[]=$v['id'];
55   self::_getparentid($AuthRuleRes,$v['pid'],False);
56   }
57   }
58   asort($arr);
59   $arrStr=implode('-', $arr);
60   return $arrStr;
61   }
62 
63 }
posted @ 2018-03-10 16:52  Z灬笑语  阅读(272)  评论(0)    收藏  举报