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
从一个不错的留言本弄的mysql数据库操作类
Sep 02 PHP
php自动跳转中英文页面
Jul 29 PHP
基于php导出到Excel或CSV的详解(附utf8、gbk 编码转换)
Jun 25 PHP
php数组转换js数组操作及json_encode的用法详解
Oct 26 PHP
PHP函数引用返回的实例详解
Sep 11 PHP
Mac版PhpStorm之XAMPP整合apache服务器配置的图文教程详解
Oct 13 PHP
php中10个不同等级压缩优化图片操作示例
Nov 14 PHP
Laravel学习教程之路由模块
Aug 18 PHP
PHP区块查询实现方法分析
May 12 PHP
laravel获取不到session的三种解决办法【推荐】
Sep 16 PHP
使用PHPWord生成word文档的方法详解
Jun 06 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
JS中encodeURIComponent函数用php解码的代码
2012/03/01 PHP
php设计模式之单例、多例设计模式的应用分析
2013/06/30 PHP
php获取参数的几种方法总结
2014/02/18 PHP
button没写type=button会导致点击时提交
2014/03/06 Javascript
JavaScript类型系统之Object详解
2016/01/07 Javascript
JavaScript判断图片是否已经加载完毕的方法汇总
2016/02/05 Javascript
jquery form表单获取内容以及绑定数据
2016/02/24 Javascript
JS模拟bootstrap下拉菜单效果实例
2016/06/17 Javascript
jQuery+C#实现参数RSA加密传输功能【附jsencrypt.js下载】
2017/06/26 jQuery
深入解析Vue 组件命名那些事
2017/07/18 Javascript
Vue中render函数的使用方法
2018/01/31 Javascript
解决vue 路由变化页面数据不刷新的问题
2018/03/13 Javascript
微信小程序实现笑脸评分功能
2018/11/03 Javascript
Vue使用axios引起的后台session不同操作
2020/08/14 Javascript
原生js实现九宫格拖拽换位
2021/01/26 Javascript
Python和php通信乱码问题解决方法
2014/04/15 Python
Python中常见的数据类型小结
2015/08/29 Python
Python简单实现TCP包发送十六进制数据的方法
2016/04/16 Python
纯用NumPy实现神经网络的示例代码
2018/10/24 Python
如何实现在jupyter notebook中播放视频(不停地展示图片)
2020/04/23 Python
关于Keras Dense层整理
2020/05/21 Python
PyCharm 2020.2下配置Anaconda环境的方法步骤
2020/09/23 Python
Pandas中两个dataframe的交集和差集的示例代码
2020/12/13 Python
CSS3实现瀑布流布局与无限加载图片相册的实例代码
2016/12/22 HTML / CSS
HTML5手机端弹出遮罩菜单特效代码
2016/01/27 HTML / CSS
荷兰之家英文站:Holland at Home
2016/10/26 全球购物
linux系统都有哪些运行级别
2016/03/26 面试题
抽奖活动主持词
2014/03/31 职场文书
工业设计毕业生自荐信
2014/04/13 职场文书
2014年社会实践活动总结范文
2014/04/29 职场文书
消防安全宣传标语
2014/06/07 职场文书
大专生求职信
2014/06/29 职场文书
装修活动策划方案
2014/08/27 职场文书
纪律教育学习心得体会
2014/09/02 职场文书
2014年计划生育工作总结
2014/11/14 职场文书
组织生活会发言材料
2014/12/15 职场文书