侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

thinkphp自定义权限管理之名称判断方法

ThinkPHP  /  管理员 发布于 8年前   215

权限管理,就是给不同的用户分配不同的权限。当用户登录或者操作时候进行判断,来阻止用户进行权限以外的操作。本次讲的是当用户登录一刻,只显示权限开启的内容。

一、建立数据库。

1、权限表funcla。来存储录入所有权限,也是避免因权限名称修改了,权限失效的问题。

      

    

2、管理员表admin。主要存储管理员用户名等信息。

      

 

3、管理员对应权限表funadmin。主要存储已开启的管理员id与权限id。

      

 

二、输出权限列表。

1、通过管理员列表进入权限分配。

      

2、权限分配列表。

      

关于权限分配列表,因为权限板块的不同,我们需要区别顶级分类与其子集。并且还需要显示权限状态。在权限状态判断中也使用了一层循环判断。代码中采用了三层嵌套循环输出。

具体代码如下

         分配管理员{$username}的权限                           
权限名称 状态
{$v.claname} checked type="checkbox" id="{$v.id}" name="{$userid}" onchange="return setfun(this,seturl)" />
{$vo.claname} checked type="checkbox" id="{$vo.id}" name="{$userid}" onchange="return setfun(this,seturl)" />
循环示例图如:

3、具体控制器如下:

       public function setfun(){    $uid=I('get.id',0,'int');    $a=M('admin');    $user=$a->where(array(id=>$uid))->field('username,id')->find();    $this->username=$user['username'];    $this->userid=$user['id'];    $m=M('funcla');    $funcla=$m->where(array(clapid=>'0'))->field(true)->select();    $fun=$m->field(true)->select();    $this->fun=$fun;    $this->funcla=$funcla;    $fd=M('funadmin');    $funadmin=$fd->where(array(adminid=>$uid))->field(true)->select();    $this->funadmin=$funadmin;    $this->display();  }

4、js。当用户权限发生改变时,即触发js提交json,向控制器传递数据参数。

       function setfun(t,u){  var id=$(t).attr('id');  var uid=$(t).attr('name');  var type=$(t).is(":checked")?1:0;  var url=u;  $.ajax({    url:url,    type:'post',    data:{      id:id,      type:type,      uid:uid    },    success:function(data){    },    error:function(data){    }  })}

json传递的url地址用过页面中实例化地址获取。如:

三、控制器获取json的数据参数,判断权限的添加与修改。如果是添加,就向funadmin表中添加受理权限人id与要授权的权限id作为一条数据。修改即删除符合条件的一条数据。同理。

        public function chanefun(){    $m=M('funadmin');    $where['funclaid']=I('post.id',0,'int');    $where['adminid']=I('post.uid',0,'int');    $type=I('post.type',0,'int');    if(empty($type)){      $oid=$m->where($where)->getfield('id');      $m->delete($oid);      return;    }    $m->data($where)->add();  }

四、真实权限判断。前面都是为权限判断做准备的,现在才是真正的判断,基本原理是把要判断的权限名称与当前登录用户id拿到funadmin表中对比,如有发现则,说明该用户有权限,即显示,否则影藏。影藏了是看不到链接地址,但是如果知道地址则可以通过地址直接访问。

(1)前台判断显示与否。调用了自定义方法chackQ();

   
  • 任务管理
  • (2) 具体对比操作。

           function chackQ($name,$state=false){  if(!$state){ exit; }  $fun=M('funcla');  $funclaid=$fun->where(array(claname=>$name))->getfield('id');  $m=M('funadmin');  $adminid=session('admin_userid');  $reset=$m->where(array(funclaid=>$funclaid,adminid=>$adminid))->find();  if(empty($reset)){    echo "你没有权限";    exit;  }  return $reset;}

    至此,整个权限控制基本完成。

    以上这篇thinkphp自定义权限管理之名称判断方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。

    您可能感兴趣的文章:

    • ThinkPHP中RBAC类的四种用法分析
    • ThinkPHP的RBAC(基于角色权限控制)深入解析
    • ThinkPHP权限认证Auth实例详解
    • thinkPHP5 ACL用户权限模块用法详解
    • thinkPHP5框架auth权限控制类与用法示例
    • thinkphp关于简单的权限判定方法
    • thinkPHP框架RBAC实现原理分析


  • 上一条:
    thinkphp关于简单的权限判定方法
    下一条:
    浅谈ThinkPHP中initialize和construct的区别
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • thinkphp + mongodb项目中数据加载慢问题分析及解决(0个评论)
    • thinkphp6框架中封装redis操作类(0个评论)
    • thinkphp6框架中实现定时任务功能流程步骤(0个评论)
    • Thinkphp5.1框架中实现Session+Redis会话共享流程步骤(0个评论)
    • TP5框架版本5.0.10安全漏洞根据官方补丁修复,也是本站安全漏洞修复(0个评论)
    • 近期文章
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 在go语言中实现IP/CIDR的ip和netmask互转及IP段形式互转及ip是否存在IP/CIDR(0个评论)
    • PHP 8.4 Alpha 1现已发布!(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2017-07
    • 2017-08
    • 2017-09
    • 2017-10
    • 2017-12
    • 2018-01
    • 2018-02
    • 2020-03
    • 2021-07
    • 2021-12
    • 2022-05
    • 2022-06
    • 2022-09
    • 2023-01
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客