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 相关文章推荐
用文本文件实现的动态实时发布新闻的程序
Oct 09 PHP
php 一元分词算法
Nov 30 PHP
php更改目录及子目录下所有的文件后缀扩展名的代码
Oct 12 PHP
PHP pathinfo()获得文件的路径、名称等信息说明
Sep 13 PHP
PHP explode()函数用法、切分字符串
Oct 03 PHP
PHP以及MYSQL日期比较方法
Nov 29 PHP
PHP根据传入参数合并多个JS和CSS文件的简单实现
Jun 13 PHP
使用PHP生成二维码的方法汇总
Jul 22 PHP
PHP模板引擎Smarty内建函数详解
Apr 11 PHP
PHP使用curl函数发送Post请求的注意事项
Nov 26 PHP
PHP实时统计中文字数和区别
Feb 28 PHP
Yii框架数据库查询、增加、删除操作示例
Oct 14 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调用mysql存储过程
2007/02/14 PHP
利用PHPExcel实现Excel文件的写入和读取
2017/04/26 PHP
PHP实现基于图的深度优先遍历输出1,2,3...n的全排列功能
2017/11/10 PHP
lnmp安装多版本PHP共存的方法详解
2018/08/02 PHP
理解 JavaScript 预解析
2009/10/25 Javascript
JQuery select标签操作代码段
2010/05/16 Javascript
基于jQuery的360图片展示实现代码
2012/06/14 Javascript
Javascript实现重力弹跳拖拽运动效果示例
2013/06/28 Javascript
js 动态加载事件的几种方法总结
2013/12/25 Javascript
如何将HTML字符转换为DOM节点并动态添加到文档中详解
2018/08/19 Javascript
浅析TypeScript 命名空间
2020/03/19 Javascript
有趣的JavaScript隐式类型转换操作实例分析
2020/05/02 Javascript
Vue 实现创建全局组件,并且使用Vue.use() 载入方式
2020/08/11 Javascript
Windows和Linux下使用Python访问SqlServer的方法介绍
2015/03/10 Python
Python使用smtp和pop简单收发邮件完整实例
2018/01/09 Python
python将list转为matrix的方法
2018/12/12 Python
Python解析、提取url关键字的实例详解
2018/12/17 Python
numpy和pandas中数组的合并、拉直和重塑实例
2019/06/28 Python
Python变量访问权限控制详解
2019/06/29 Python
python实现字符串完美拆分split()的方法
2019/07/16 Python
Python面向对象之Web静态服务器
2019/09/03 Python
python3+opencv 使用灰度直方图来判断图片的亮暗操作
2020/06/02 Python
Office DEPOT法国官网:欧迪办公用品采购
2018/01/03 全球购物
美国领先的精品家居照明和装饰产品在线零售商:LightsOnline.com
2018/01/23 全球购物
澳洲在线厨具商店:Kitchen Style
2018/05/05 全球购物
函授毕业自我鉴定
2013/12/19 职场文书
机械设计职业生涯规划书
2013/12/27 职场文书
服务承诺书范文
2014/05/19 职场文书
报表员工作失误检讨书范文
2014/09/19 职场文书
三严三实对照检查材料思想汇报
2014/09/28 职场文书
考试没考好检讨书(精选篇)
2014/11/16 职场文书
公司行政主管岗位职责
2015/04/09 职场文书
Python 中数组和数字相乘时的注意事项说明
2021/05/10 Python
Mysql 如何合理地统计一个数据库里的所有表的数据量
2022/04/18 MySQL
Ruby处理YAML和json数据
2022/04/18 Ruby
解决MySQL报“too many connections“错误
2022/04/19 MySQL