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 }

浙公网安备 33010602011771号