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 相关文章推荐
PHP5.2下chunk_split()函数整数溢出漏洞 分析
Jun 06 PHP
兼容性比较好的PHP生成缩略图的代码
Jan 12 PHP
实用PHP会员权限控制实现原理分析
May 29 PHP
php全局变量和类配合使用深刻理解
Jun 05 PHP
Mysql的Root密码忘记,查看或修改的解决方法(图文介绍)
Jun 14 PHP
PHP上传文件时文件过大$_FILES为空的解决方法
Nov 26 PHP
用 Composer构建自己的 PHP 框架之使用 ORM
Oct 30 PHP
windows下apache搭建php开发环境
Aug 27 PHP
PHP将二维数组某一个字段相同的数组合并起来的方法
Feb 26 PHP
PHP SFTP实现上传下载功能
Jul 26 PHP
php封装的mongodb操作类代码
Aug 06 PHP
Yii框架布局文件的动态切换操作示例
Nov 11 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 visitFile()遍历指定文件夹函数
2010/08/21 PHP
php使用sql数据库 获取字段问题介绍
2013/08/12 PHP
PHP 抽象方法与抽象类abstract关键字介绍及应用
2014/10/16 PHP
PHP封装分页函数实现文本分页和数字分页
2014/10/23 PHP
php中文繁体和简体相互转换的方法
2015/03/21 PHP
Yii使用DbTarget实现日志功能的示例代码
2020/07/21 PHP
jQuery 获取和设置select下拉框的值实现代码
2013/11/08 Javascript
js使用ajax读博客rss示例
2014/05/06 Javascript
Javascript冒泡排序算法详解
2014/12/03 Javascript
node.js中的fs.close方法使用说明
2014/12/17 Javascript
jquery实现搜索框常见效果的方法
2015/01/22 Javascript
自己动手写的jquery分页控件(非常简单实用)
2015/10/28 Javascript
JavaScript中Object.prototype.toString方法的原理
2016/02/24 Javascript
js判断手机浏览器操作系统和微信浏览器的方法
2016/04/30 Javascript
详解JavaScript的内置对象
2016/12/07 Javascript
vue.js+Element实现表格里的增删改查
2017/01/18 Javascript
详解vue.js 开发环境搭建最简单攻略
2017/06/12 Javascript
简单谈谈js的数据类型
2017/09/25 Javascript
解决layui 复选框等内置控件不显示的问题
2018/08/14 Javascript
在Vue项目中使用jsencrypt.js对数据进行加密传输的方法
2019/04/17 Javascript
2019年度web前端面试题总结(主要为Vue面试题)
2020/01/12 Javascript
基于vuex实现购物车功能
2021/01/10 Vue.js
Python素数检测实例分析
2015/06/15 Python
基于Python log 的正确打开方式
2018/04/28 Python
python进程间通信Queue工作过程详解
2019/11/01 Python
Python Websocket服务端通信的使用示例
2020/02/25 Python
阿里巴巴国际站:Alibaba.com
2016/07/21 全球购物
美的官方商城:Midea
2016/09/14 全球购物
公证书样本
2014/04/10 职场文书
幼儿园教师演讲稿
2014/05/06 职场文书
店长岗位职责
2015/02/11 职场文书
python某漫画app逆向
2021/03/31 Python
vue中三级导航的菜单权限控制
2021/03/31 Vue.js
python中pandas对多列进行分组统计的实现
2021/06/18 Python
Mysql案例刨析事务隔离级别
2021/09/25 MySQL
Go语言 详解net的tcp服务
2022/04/14 Golang