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 public function lst(){ 8 $authid=session('id'); 9 //查询所有用户 10 $d=db('bk_auth_group_access') 11 ->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 }
1 #添加 2 public function add(){ 3 if(request()->isPost()){ 4 $data=input('post.'); 5 if(AuthGroupAccess::addadmin($data)){ 6 $this->success('添加管理员成功!',url('lst')); 7 }else{ 8 $this->error('添加管理员失败!'); 9 } 10 return; 11 } 12 $authGroupRes=db('bk_auth_group')->select();//所有分组 13 $this->assign('authGroupRes',$authGroupRes); 14 return view(); 15 } 16 17 //编辑 18 public function edit(){ 19 $admins=db('admin')->find($id); 20 if(request()->isPost()){ 21 $data=input('post.'); 22 $validate = \think\Loader::validate('Admin'); 23 if(!$validate->scene('edit')->check($data)){ 24 $this->error($validate->getError()); 25 } 26 27 $savenum=AuthGroupAccess::saveadmin($data,$admins); 28 if($savenum == '2'){ 29 $this->error('管理员用户名不得为空!'); 30 } 31 if($savenum !== false){ 32 $this->success('修改成功!',url('lst')); 33 }else{ 34 $this->error('修改失败!'); 35 } 36 return; 37 } 38 39 if(!$admins){ 40 $this->error('该管理员不存在'); 41 } 42 $authGroupAccess=db('auth_group_access')->where(array('uid'=>$id))->find(); 43 $authGroupRes=db('auth_group')->select(); 44 $this->assign('authGroupRes',$authGroupRes); 45 $this->assign('admin',$admins); 46 $this->assign('groupId',$authGroupAccess['group_id']); 47 return view(); 48 } 49 50 //删除 51 public function del($id){ 52 $delnum=AuthGroupAccess::deladmin($id); 53 if($delnum == '1'){ 54 $this->success('删除管理员成功!',url('lst')); 55 }else{ 56 $this->error('删除管理员失败!'); 57 } 58 59 }
# 用户组 _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 64 }
# 权限列表_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 } 79 }
/*** 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 45 public function deladmin($id){ 46 if($this::destroy($id)){ 47 return 1; 48 }else{ 49 return 2; 50 } 51 } 52 53 //登陆 54 public static function login($data){ 55 $admin=AuthGroupAccess::getByName($data['name'])->toArray(); 56 if($admin){ 57 if($admin['password']==md5($data['password'])){ 58 session('id', $admin['id']); 59 session('name', $admin['name']); 60 return 2; //登录密码正确的情况 61 }else{ 62 return 3; //登录密码错误 63 } 64 }else{ 65 return 1; //用户不存在的情况 66 } 67 68 }
# 权限模型_AuthRule */
<?php namespace app\admin\model; use think\Model; class AuthRule extends Model{ /* 全部权限 */ public static function authRuleTree(){ $con=static::order('sort desc')->select(); return self::sort($con); } // 排序 public static function sort($data,$pid=0){ static $arr=array(); foreach ($data as $k => $v) { if($v['pid']==$pid){ $v['dataid']=self::getparentid($v['id']); //查找上id $arr[]=$v; self::sort($data,$v['id']); } } return $arr; } /* 查找下面 Id */ public static function getchilrenid($id){ $AuthRuleRes=static::select(); return static::_getchilrenid($AuthRuleRes,$id); } public static function _getchilrenid($AuthRuleRes,$id){ static $arr=array(); foreach ($AuthRuleRes as $k => $v) { if($v['pid'] == $id){ $arr[]=$v['id']; static::_getchilrenid($AuthRuleRes,$v['id']); } } return $arr; } /* 查找上面ID */ public static function getparentid($id){ $AuthRuleRes=AuthRule::select(); return self::_getparentid($AuthRuleRes,$id,True); } public static function _getparentid($AuthRuleRes,$id,$clear=False){ static $arr=array(); if($clear){ $arr=array(); } foreach ($AuthRuleRes as $k => $v) { if($v['id'] == $id){ $arr[]=$v['id']; self::_getparentid($AuthRuleRes,$v['pid'],False); } } asort($arr); $arrStr=implode('-', $arr); return $arrStr; } }

浙公网安备 33010602011771号