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


Posted in PHP onApril 01, 2017

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

一、建立数据库。

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

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

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

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

 

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

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

 

二、输出权限列表。

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

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

2、权限分配列表。

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

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

具体代码如下

<div>分配管理员{$username}的权限</div>
  <table width="100%" border="0" cellpadding="0" cellspacing="0" class="list_table mt10">
    <tr>
      <th>权限名称</th>
      <th>状态</th>

    </tr>
    <volist name="funcla" id="v" key="j">
       <tr class="tr">
         <td>{$v.claname}</td>
         <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>
       </tr>
      <volist name="fun" id="vo">
        <if condition="$vo['clapid'] eq $v['id']">
          <tr class="tr">
            <td style="padding-left: 40px;" >{$vo.claname}</td>

            <td>

              <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)" />

            </td>

          </tr>
        </if>
      </volist>
    </volist>
  </table>
循环示例图如:
thinkphp自定义权限管理之名称判断方法

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地址用过页面中实例化地址获取。如:

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

三、控制器获取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();

<if condition="chackQ('任务管理')">
   <li><a href="{:U('taskinfo/dir')}" rel="external nofollow" >任务管理</a></li>
</if>

(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自定义权限管理之名称判断方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
php查看session内容的函数
Aug 27 PHP
有道搜索和IP138的IP的API接口(PHP应用)
Nov 29 PHP
phpmailer发送gmail邮件实例详解
Jun 24 PHP
两级联动select刷新后其值保持不变的实现方法
Jan 27 PHP
PHPMailer发送HTML内容、带附件的邮件实例
Jul 01 PHP
PHP简单判断iPhone、iPad、Android及PC设备的方法
Oct 11 PHP
基于PHP常用文件函数和目录函数整理
Aug 17 PHP
PHP文件管理之实现网盘及压缩包的功能操作
Sep 20 PHP
PHP获取链表中倒数第K个节点的方法
Jan 18 PHP
PHP PDOStatement::fetchColumn讲解
Jan 31 PHP
laravel按天、按小时,查询数据的实例
Oct 09 PHP
jQuery+PHP实现图片上传并提交功能
Jul 27 PHP
浅谈ThinkPHP中initialize和construct的区别
Apr 01 #PHP
PHP房贷计算器实例代码,等额本息,等额本金
Apr 01 #PHP
PHP中file_put_contents追加和换行的实现方法
Apr 01 #PHP
centos下file_put_contents()无法写入文件的原因及解决方法
Apr 01 #PHP
php file_get_contents取文件中数组元素的方法
Apr 01 #PHP
PHP中Laravel 关联查询返回错误id的解决方法
Apr 01 #PHP
php获取ip及网址的简单方法(必看)
Apr 01 #PHP
You might like
PHP 开源框架22个简单简介
2009/08/24 PHP
thinkphp普通查询与表达式查询实例分析
2014/11/24 PHP
PHP中md5()函数的用法讲解
2019/03/30 PHP
thinkphp5修改view到根目录实例方法
2019/07/02 PHP
一些常用的JS功能函数代码
2009/06/23 Javascript
js取滚动条的尺寸的函数代码
2011/11/30 Javascript
24款热门实用的jQuery插件推荐
2014/12/24 Javascript
javascript类型系统 Window对象学习笔记
2016/01/07 Javascript
javascript时间排序算法实现活动秒杀倒计时效果
2021/01/28 Javascript
JS采用绝对定位实现回到顶部效果完整实例
2016/06/20 Javascript
AngularJS实现使用路由切换视图的方法
2017/01/24 Javascript
JavaScript设置名字输入不合法的实现方法
2017/05/23 Javascript
jQuery niceScroll滚动条错位问题的解决方法
2018/02/03 jQuery
element el-input directive数字进行控制
2018/10/11 Javascript
vue 解决setTimeOut和setInterval函数无效报错的问题
2020/07/30 Javascript
Vue2.x和Vue3.x的双向绑定原理详解
2020/11/05 Javascript
优化Python代码使其加快作用域内的查找
2015/03/30 Python
Python中的左斜杠、右斜杠(正斜杠和反斜杠)
2016/08/30 Python
利用Python循环(包括while&amp;for)各种打印九九乘法表的实例
2017/11/06 Python
使用tensorflow实现AlexNet
2017/11/20 Python
python实现趣味图片字符化
2019/04/30 Python
Django框架搭建的简易图书信息网站案例
2019/05/25 Python
Python3实现定时任务的四种方式
2019/06/03 Python
Betsey Johnson官网:妖娆可爱的连衣裙及鞋子、手袋和配件
2016/12/30 全球购物
荷兰DOD药房中文官网:DeOnlineDrogist
2020/12/27 全球购物
Java中compareTo和compare的区别
2016/04/12 面试题
人力资源主管岗位职责
2014/01/29 职场文书
本科毕业生求职自荐信
2014/02/03 职场文书
幼儿园教师自我鉴定
2014/03/20 职场文书
《穷人》教学反思
2014/04/08 职场文书
高中学生期末评语
2014/04/25 职场文书
设备售后服务承诺书
2014/05/30 职场文书
应届本科毕业生求职信
2014/07/23 职场文书
项目合作协议书
2014/09/23 职场文书
挂职个人工作总结
2015/03/05 职场文书
求职自荐信范文(优秀篇)
2015/03/27 职场文书