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 相关文章推荐
第十二节 类的自动加载 [12]
Oct 09 PHP
dede3.1分页文字采集过滤规则详说(图文教程)续二
Apr 03 PHP
php adodb连接不同数据库
Mar 19 PHP
Thinkphp中的volist标签用法简介
Jun 18 PHP
php中http与https跨域共享session的解决方法
Dec 20 PHP
PHP解析RSS的方法
Mar 05 PHP
php使用GD库创建图片缩略图的方法
Jun 10 PHP
smarty的section嵌套循环用法示例
May 28 PHP
实现PHP搜索加分页
Oct 12 PHP
Laravel 5.5 的自定义验证对象/类示例代码详解
Aug 29 PHP
centos7上编译安装php7以php-fpm方式连接apache
Nov 08 PHP
PHP safe_mode开启对于PHP系统函数有什么影响
Nov 10 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学习 变量使用总结
2011/03/24 PHP
CodeIgniter中使用Smarty3基本配置
2015/06/29 PHP
PHP调用Mailgun发送邮件的方法
2017/05/04 PHP
$.each与$().each的区别示例介绍
2014/03/20 Javascript
Javascript模拟加速运动与减速运动代码分享
2014/12/11 Javascript
轻松创建nodejs服务器(1):一个简单nodejs服务器例子
2014/12/18 NodeJs
使用CamanJS在Web页面上处理图像的技巧
2015/08/18 Javascript
jQuery实现的简单分页示例
2016/06/01 Javascript
AngularJS 所有版本下载地址
2016/09/14 Javascript
AngularJS学习笔记(三)数据双向绑定的简单实例
2016/11/08 Javascript
基于BootstrapValidator的Form表单验证(24)
2016/12/12 Javascript
js实现复选框的全选和取消全选效果
2017/01/03 Javascript
jQuery UI Grid 模态框中的表格实例代码
2017/04/01 jQuery
JS中LocalStorage与SessionStorage五种循序渐进的使用方法
2017/07/12 Javascript
jQuery EasyUI 折叠面板accordion的使用实例(分享)
2017/12/25 jQuery
简单谈谈CommonsChunkPlugin抽取公共模块
2017/12/31 Javascript
使用vue-cli创建项目的图文教程(新手入门篇)
2018/05/02 Javascript
详解微信小程序实现跑马灯效果(附完整代码)
2019/04/29 Javascript
jQuery pager.js 插件动态分页功能实例分析
2019/08/02 jQuery
小白入门篇使用Python搭建点击率预估模型
2018/10/12 Python
Python PyPDF2模块安装使用解析
2020/01/19 Python
Python实现括号匹配方法详解
2020/02/10 Python
基于python 将列表作为参数传入函数时的测试与理解
2020/06/05 Python
python字典与json转换的方法总结
2020/12/28 Python
Carter’s OshKosh加拿大:购买婴幼儿服装和童装
2018/11/27 全球购物
波兰品牌鞋履在线商店:Eastend.pl
2020/01/11 全球购物
解释下列WebService名词:WSDL、SOAP、UDDI
2012/06/22 面试题
单位领导证婚词
2014/01/14 职场文书
安全事故检讨书
2014/01/18 职场文书
作风整顿个人剖析材料
2014/10/06 职场文书
党员个人剖析材料2014
2014/10/08 职场文书
2015年公路养护工作总结
2015/05/13 职场文书
小孩不笨观后感
2015/06/03 职场文书
教师教育心得体会
2016/01/19 职场文书
详解Python+OpenCV绘制灰度直方图
2022/03/22 Python
Python代码实现双链表
2022/05/25 Python