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下一个非常全面获取图象信息的函数
Nov 20 PHP
php 仿Comsenz安装效果代码打包提供下载
May 09 PHP
解决PhpMyAdmin中导入2M以上大文件限制的方法分享
Jun 06 PHP
php按字符无乱码截取中文的方法
Mar 27 PHP
Centos下升级php5.2到php5.4全记录(编译安装)
Apr 03 PHP
PHP使用PHPexcel导入导出数据的方法
Nov 14 PHP
PHP的PDO操作简单示例
Mar 30 PHP
php实现在线通讯录功能(附源码)
May 13 PHP
php usort 使用用户自定义的比较函数对二维数组中的值进行排序
May 02 PHP
微信支付之JSAPI公众号支付详解
May 15 PHP
如何解决PHP获取不到SESSION信息之一般情况
Oct 10 PHP
thinkphp5.1 框架导入/导出excel文件操作示例
May 25 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 表单验证实现代码
2009/03/10 PHP
php中通过虚代理实现延迟加载的实现代码
2011/06/10 PHP
详解PHP内置访问资源的超时时间 time_out file_get_contents read_file
2013/06/03 PHP
php将html转为图片的实现方法
2017/05/19 PHP
PHP Laravel中的Trait使用方法
2019/01/20 PHP
php高性能日志系统 seaslog 的安装与使用方法分析
2020/02/29 PHP
自制基于jQuery的智能提示插件一枚
2011/02/18 Javascript
javascript (用setTimeout而非setInterval)
2011/12/28 Javascript
Javascript的各种节点操作实例演示代码
2012/06/27 Javascript
javascript中String对象的slice()方法分析
2014/12/20 Javascript
javascript转换静态图片,增加粒子动画效果
2015/05/28 Javascript
利用JavaScript的AngularJS库制作电子名片的方法
2015/06/18 Javascript
tuzhu_req.js 实现仿百度图片首页效果
2015/08/11 Javascript
js判断当前页面用什么浏览器打开的方法
2016/01/06 Javascript
详解jQuery UI库中文本输入自动补全功能的用法
2016/04/23 Javascript
jquery实现下拉菜单的手风琴效果
2017/07/23 jQuery
微信JSSDK调用微信扫一扫功能的方法
2017/07/25 Javascript
jquery如何实现点击空白处隐藏元素
2017/12/05 jQuery
Vue cli构建及项目打包以及出现的问题解决
2018/08/27 Javascript
微信小程序request请求封装,验签代码实例
2019/12/04 Javascript
[50:50]完美世界DOTA2联赛PWL S3 Galaxy Racer vs Phoenix 第一场 12.10
2020/12/13 DOTA
Python获取apk文件URL地址实例
2013/11/01 Python
在Python中处理列表之reverse()方法的使用教程
2015/05/21 Python
详解Django框架中用户的登录和退出的实现
2015/07/23 Python
Python3实现爬虫爬取赶集网列表功能【基于request和BeautifulSoup模块】
2018/12/05 Python
详解Python IO编程
2020/07/24 Python
一些关于python 装饰器的个人理解
2020/08/31 Python
python生成xml时规定dtd实例方法
2020/09/21 Python
python+selenium实现12306模拟登录的步骤
2021/01/21 Python
CSS3田字格列表的样式编写方法
2018/11/22 HTML / CSS
h5实现获取用户地理定位的实例代码
2017/07/17 HTML / CSS
Nike比利时官网:Nike.com (BE)
2019/02/07 全球购物
车间班组长的职责
2013/12/13 职场文书
咖啡店创业计划书
2014/08/15 职场文书
入党转正申请书范文
2019/05/20 职场文书
Python读取和写入Excel数据
2022/04/20 Python