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;
}

}

 

posted @ 2018-03-10 16:02  Z灬笑语  阅读(756)  评论(0)    收藏  举报