php权限管理自己实现,基于Thinkphp权限管理的实现​

基于Thinkphp权限管理的实现

基本思路,用户,角色,权限,三层管理结构

对所有的控制器和方法进行注册写入权限表,不同的角色分配不同权限,不同用户划分入不同角色

在登录时查询用户角色所拥有权限并进行缓存

数据表

核心代码

角色中分配权限部分

RoleController.class.php

/**

* 权限分配弹框

*/

public function juris(){

if (IS_POST){

$data=I('post.');

$data['id'] = $data['role_id'];

unset($data['role_id']);

$data['juris'] = implode(",",$data['juris']);

$res = M('roles')->save($data);

if ($res){

//删除权限缓存

S(session("uname")."_juris",null);

$this->success("权限分配成功!");

}else{

$this->error("权限分配失败!");

}

return ;

}

$id = I('get.id');

//1、获取所有权限

$juris = M('jurisdiction')->field("id,name,controller,action")->select();

//已获得的权限

$juris_done = M('roles')->field("juris")->find($id);

foreach ($juris as &$temp){

$isset = array_search($temp['id'],explode(",", $juris_done['juris']));

if ($isset!==false){

$temp['checked']=true;

}else{

$temp['checked']=false;

}

if($temp['controller'] == "Index"){

$temp['checked'] =true;

}

}

$this->assign("role_id",$id);

$this->assign("juris",$juris);

$this->display();

}

base控制器权限验证部分,带缓存,可在用户注销或分配权限时清除缓存

//获取权限

$juris = S(session("uname")."_juris");

if (empty($juris)){

$juris_done = M('roles')->field("juris")->find(session("user")['roleid']);

if (empty($juris_done['juris'])){

$this->error("你没有这个系统的任何权限,请联系管理员为你分配权限!",U('Login/logout'));

}

//权限缓存

$juris = M('jurisdiction')->field("controller,action")->where("id in (".$juris_done['juris'].")")->select();

S(session("uname")."_juris",$juris);

}

$array=['controller'=>CONTROLLER_NAME,'action'=>ACTION_NAME];

$array2 = ['controller'=>CONTROLLER_NAME,'action'=>""];

//判断是否具有权限

$res = array_search($array, $juris)!==false||array_search($array2, $juris)!==false;

if ($res===false){

$this->error("你无权访问本页面!");

return ;

}

判断是否拥有某权限

function.php

/**

* 判断是否拥有权限

* @param 权限ID $id或者多id数组 传入数组时有一个满足则返回true

* @return boolean 拥有该权限返回true 否则返回false

*/

function hasJuris($id){

$flag = false;

$roleID = session('user')['roleid'];

$juris = M('roles')->field("juris")->find($roleID);

$juris = explode(",", $juris['juris']);

$res = false;

//传入为数组

if(is_array($id)){

foreach ($id as $vo){

$res = $res||array_search($vo, $juris)!==false;

}

}

//传入为单个id

else{

$res = array_search($id, $juris);

}

if ($res===false){

$flag = false;

}else{

$flag =  true;

}

return $flag;

}

权限管理截图:

5a276013a73c2.png

分配角色权限截图:

5a276047e3d55.png

注:权限项中只填写了控制器名没有方法名,则代表拥有该控制器的所有权限

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值