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

   一、建立数据库。

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

      

    

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

      

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

      

   二、输出权限列表。

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

      

    2、权限分配列表。

      

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

        

  1. <div>分配管理员{$username}的权限</div>
  2. <table width="100%" border="0" cellpadding="0" cellspacing="0" class="list_table mt10">
  3. <tr>
  4. <th>权限名称</th>
  5. <th>状态</th>
  6.  
  7. </tr>
  8. <volist name="funcla" id="v" key="j">
  9. <tr class="tr">
  10. <td>{$v.claname}</td>
  11. <td><input <volist name="funadmin" id="d"><if condition="$d['funclaid'] eq $v['id']">checked</if></volist> type="checkbox" id="{$v.id}" name="{$userid}" onchange="return setfun(this,seturl)" /></td>
  12. </tr>
  13. <volist name="fun" id="vo">
  14. <if condition="$vo['clapid'] eq $v['id']">
  15. <tr class="tr">
  16. <td style="padding-left: 40px;" >{$vo.claname}</td>
  17.  
  18. <td>
  19.  
  20. <input <volist name="funadmin" id="d"><if condition="$d['funclaid'] eq $vo['id']">checked</if></volist> type="checkbox" id="{$vo.id}" name="{$userid}" onchange="return setfun(this,seturl)" />
  21.  
  22. </td>
  23.  
  24. </tr>
  25. </if>
  26. </volist>
  27. </volist>
  28. </table>

      循环示例图如:

    3、具体控制器如下:

      

  1. public function setfun(){
  2. $uid=I('get.id',0,'int');
  3. $a=M('admin');
  4. $user=$a->where(array(id=>$uid))->field('username,id')->find();
  5.  
  6. $this->username=$user['username'];
  7. $this->userid=$user['id'];
  8.  
  9. $m=M('funcla');
  10. $funcla=$m->where(array(clapid=>'0'))->field(true)->select();
  11. $fun=$m->field(true)->select();
  12. $this->fun=$fun;
  13. $this->funcla=$funcla;
  14.  
  15. $fd=M('funadmin');
  16. $funadmin=$fd->where(array(adminid=>$uid))->field(true)->select();
  17. $this->funadmin=$funadmin;
  18. $this->display();
  19. }

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

      

      

  1. function setfun(t,u){
  2. var id=$(t).attr('id');
  3. var uid=$(t).attr('name');
  4. var type=$(t).is(":checked")?1:0;
  5. var url=u;
  6. $.ajax({
  7. url:url,
  8. type:'post',
  9. data:{
  10. id:id,
  11. type:type,
  12. uid:uid
  13. },
  14. success:function(data){
  15. },
  16. error:function(data){
  17. }
  18.  
  19. })
  20. }

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

      

      

  1. <script type="text/javascript">
  2. var seturl="{:U("Admin/chanefun")}";
  3. </script>

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

    

      

  1. public function chanefun(){
  2.  
  3. $m=M('funadmin');
  4. $where['funclaid']=I('post.id',0,'int');
  5. $where['adminid']=I('post.uid',0,'int');
  6. $type=I('post.type',0,'int');
  7. if(empty($type)){
  8. $oid=$m->where($where)->getfield('id');
  9. $m->delete($oid);
  10. return;
  11. }
  12. $m->data($where)->add();
  13. }

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

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

      

  1. <if condition="chackQ('任务管理')">
  2. <li><a href="{:U('taskinfo/dir')}">任务管理</a></li>
  3. </if>

      (2) 具体对比操作。

      

  1. function chackQ($name,$state=false){
  2. if(!$state){ exit; }
  3. $fun=M('funcla');
  4. $funclaid=$fun->where(array(claname=>$name))->getfield('id');
  5. $m=M('funadmin');
  6. $adminid=session('admin_userid');
  7. $reset=$m->where(array(funclaid=>$funclaid,adminid=>$adminid))->find();
  8. if(empty($reset)){
  9. echo "你没有权限";
  10. exit;
  11. }
  12. return $reset;
  13. }

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

        

  

   

thinkphp自定义权限管理之名称判断的更多相关文章

  1. DRF内置权限组件之自定义权限管理类

    DRF内置权限组件permissions 权限控制可以限制用户对于视图的访问和对于具体数据对象的访问. 在执行视图的dispatch()方法前,会先进行视图访问权限的判断 在通过get_object( ...

  2. ThinkPHP RBAC权限管理机制

    RBAC是ThinkPHP很好用的后台权限管理的,话不多说,实现方法如下,也方便以后自己查询使用: 1.新建4个数据库表 self_role权限表 CREATE TABLE `self_role` ( ...

  3. android 自定义权限管理

    在Android6.0后有些权限就需要进行询问,虽然可以将targetSdkVersion设置成小于等于23,但是这样可能有些东西无法使用,所以要进行权限的管理. 实现逻辑:打开页面就询问权限,如果没 ...

  4. 关于 DotNetCore 的自定义权限管理

    1.自定义权限需要扩展 Microsoft.AspNetCore.Authentication 实现一套接口 IAuthenticationHandler, IAuthenticationSignIn ...

  5. Android : M 与 N 的权限管理

    从 M 开始,permission 分为 Normal permission Runtime permission Normal permission 直接在 manifest 里声明就可以用了. a ...

  6. Asp.net Core 系列之--5.认证、授权与自定义权限的实现

    ChuanGoing 2019-11-24 asp.net core系列已经来到了第五篇,通过之前的基础介绍,我们了解了事件订阅/发布的eventbus整个流程,初探dapper ORM实现,并且简单 ...

  7. C#_MVC 自定义AuthorizeAttribute实现权限管理

    随笔- 28  文章- 31  评论- 16 MVC 自定义AuthorizeAttribute实现权限管理   在上一节中提到可以使用AuthorizeAttribute进行权限管理: [Autho ...

  8. MVC 自定义AuthorizeAttribute实现权限管理

    在上一节中提到可以使用AuthorizeAttribute进行权限管理: [Authorize] public ActionResult TestAuthorize() { return View() ...

  9. 权限管理(java+struts2(自定义标签)实现)--------->全代码演示

    地址:http://blog.chinaunix.net/uid-24343152-id-3673026.html 最近由于项目不是很紧所以总结了之前做了n遍的权限管理功能.以便之后系统copy之用. ...

随机推荐

  1. URL编码表%20Base64编码表%20HTTP消息含义

    URL编码表 backspace 8% A 41% a 61% § %A7 Õ %D5   tab 9% B 42% b 62% « %AB Ö %D6   linefeed %0A C 43% c ...

  2. 性能测试-ORACLE性能监控

    通过lr做性能测试的过程,通过监控Oracle数据库的性能 采用的监控工具:PeOny PeOny安装 1. 安装服务端 1) LINUX平台安装 解压缩peony3.x.0.x.tar.gz文件,b ...

  3. 计数排序-java

    今天看了一本书,书里有道题,题目很常见,排序,明了点说: 需求:输入:最多有n个正整数,每个数都小于n, n为107 ,没有重复的整数 输出:按升序排列 思路:假设有一组集合 {1,3,5,6,11, ...

  4. HDU 5769 后缀数组

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5769 [2016多校contest-4] 题意:给定一个字符,还有一个字符串,问这个字符串存在多少个不 ...

  5. 【虚拟机】苹果虚拟机mac10.11.6+Xcode8.1

    [虚拟机]苹果虚拟机mac10.11.6+Xcode8.1本虚拟机加装Xcode8.1,方便大家更好学习Swift3.0语言以及iOS开发.安装注意事项:第一步:确认硬件:1.确认主板以及cpu支持虚 ...

  6. [xsd学习]xsd介绍

    一直以来项目中对xml格式的判断使用的都是dtd格式,直到最近才发现,不知何时都已经转为xsd来进行判断和校验,于是今天专门找资料看下,不得不说,对于这类资料的入门,w3cschool真是个不错的资料 ...

  7. js实现冒泡排序

    冒泡排序 冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法. 它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到 ...

  8. JavaScript中的apply()方法和call()方法使用介绍

    1.每个函数都包含两个非继承而来的方法:apply()和call(). 2.他们的用途相同,都是在特定的作用域中调用函数. 3.接收参数方面不同,apply()接收两个参数,一个是函数运行的作用域(t ...

  9. js点击a链接弹出alert对话框

    代码 <html> <head> <meta charset="utf-8"> <meta name="generator&qu ...

  10. 代码审查工具StyleCop

    “代码审查”或是“代码评审”(Code Review),这是一个流程,当开发人员写好代码后,需要让别人来review一下他的代码,这是一种有效发现BUG的方法.由此,我们可以审查代码的风格.逻辑.思路 ...