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中遍历stdclass object的实现代码
Jun 09 PHP
使用PHP实现蜘蛛访问日志统计
Jul 05 PHP
php调用Google translate_tts api实现代码
Aug 07 PHP
PHP set_error_handler()函数使用详解(示例)
Nov 12 PHP
深入分析PHP引用(&amp;)
Sep 04 PHP
PHP里8个鲜为人知的安全函数分析
Dec 09 PHP
PHP关联数组实现根据元素值删除元素的方法
Jun 26 PHP
详解PHP的Yii框架中的Controller控制器
Mar 29 PHP
在Yii2特定页面如何禁用调试工具栏Debug Toolbar详解
Aug 07 PHP
PHP面向对象五大原则之接口隔离原则(ISP)详解
Apr 04 PHP
PHP实现的用户注册表单验证功能简单示例
Feb 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
ThinkPHP上使用多说评论插件的方法
2014/10/31 PHP
thinkphp使用phpmailer发送邮件的方法
2014/11/24 PHP
标准PHP的AES加密算法类
2015/03/12 PHP
Zend Framework处理Json数据方法详解
2016/12/09 PHP
PHP实现的XXTEA加密解密算法示例
2018/08/28 PHP
Jquery 绑定时间实现代码
2011/05/03 Javascript
简单的前端js+ajax 购物车框架(入门篇)
2011/10/29 Javascript
微信内置浏览器私有接口WeixinJSBridge介绍
2015/05/25 Javascript
jquery实现select选择框内容左右移动代码分享
2015/11/21 Javascript
JavaScript必知必会(六) delete in instanceof
2016/06/08 Javascript
JavaScript——DOM操作——Window.document对象详解
2016/07/14 Javascript
详解堆的javascript实现方法
2016/11/29 Javascript
解析预加载显示图片艺术
2016/12/05 Javascript
详解vue-cli与webpack结合如何处理静态资源
2017/09/19 Javascript
Vue中使用clipboard实现复制功能
2018/09/05 Javascript
python获得linux下所有挂载点(mount points)的方法
2015/04/29 Python
Python提取网页中超链接的方法
2016/09/18 Python
python 列表中[ ]中冒号‘:’的作用
2019/04/30 Python
Django中ORM外键和表的关系详解
2019/05/20 Python
python脚本执行CMD命令并返回结果的例子
2019/08/14 Python
Python爬取豆瓣视频信息代码实例
2019/11/16 Python
keras绘制acc和loss曲线图实例
2020/06/15 Python
Feelunique中文官网:欧洲最大化妆品零售电商
2020/07/10 全球购物
linux面试题参考答案(10)
2016/10/26 面试题
司法所长先进事迹
2014/06/02 职场文书
三月雷锋月活动总结
2014/07/03 职场文书
党员对照检查材料
2014/09/22 职场文书
群众路线教育实践活动调研报告
2014/11/03 职场文书
2014幼儿园卫生保健工作总结
2014/12/05 职场文书
颐和园英文导游词
2015/01/30 职场文书
求职自荐信怎么写
2015/03/04 职场文书
客服专员岗位职责范本
2015/04/07 职场文书
Jsonp劫持学习
2021/04/01 PHP
python制作图形界面的2048游戏, 基于tkinter
2021/04/06 Python
安装pytorch时报sslerror错误的解决方案
2021/05/17 Python
Feign调用传输文件异常的解决
2021/06/24 Java/Android