thinkphp自定义权限管理之名称判断方法

 更新时间:2017年4月3日 22:11  点击:2533

权限管理,就是给不同的用户分配不同的权限。当用户登录或者操作时候进行判断,来阻止用户进行权限以外的操作。本次讲的是当用户登录一刻,只显示权限开启的内容。

一、建立数据库。

1、权限表funcla。来存储录入所有权限,也是避免因权限名称修改了,权限失效的问题。

      

    

2、管理员表admin。主要存储管理员用户名等信息。

      

 

3、管理员对应权限表funadmin。主要存储已开启的管理员id与权限id。

      

 

二、输出权限列表。

1、通过管理员列表进入权限分配。

      

2、权限分配列表。

      

关于权限分配列表,因为权限板块的不同,我们需要区别顶级分类与其子集。并且还需要显示权限状态。在权限状态判断中也使用了一层循环判断。代码中采用了三层嵌套循环输出。

具体代码如下

         
<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>
循环示例图如:

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自定义权限管理之名称判断方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

[!--infotagslink--]

相关文章

  • jquery自定义插件开发之window的实现过程

    这篇文章主要介绍了jquery自定义插件开发之window的实现过程的相关资料,需要的朋友可以参考下...2016-05-09
  • ThinkPHP使用心得分享-ThinkPHP + Ajax 实现2级联动下拉菜单

    首先是数据库的设计。分类表叫cate.我做的是分类数据的二级联动,数据需要的字段有:id,name(中文名),pid(父id). 父id的设置: 若数据没有上一级,则父id为0,若有上级,则父id为上一级的id。数据库有内容后,就可以开始写代码,进...2014-05-31
  • thinkPHP中多维数组的遍历方法

    这篇文章主要介绍了thinkPHP中多维数组的遍历方法,以简单实例形式分析了thinkPHP中foreach语句的使用技巧,需要的朋友可以参考下...2016-01-12
  • thinkphp自定义权限管理之名称判断方法

    下面小编就为大家带来一篇thinkphp自定义权限管理之名称判断方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2017-04-03
  • Nginx自定义访问日志的配置方式

    Nginx日志主要分为两种:访问日志和错误日志。访问日志主要记录客户端访问Nginx的每一个请求,格式可以自定义。下面这篇文章主要给大家介绍了Nginx自定义访问日志的配置方式,需要的朋友可以参考学习,下面来一起看看吧。...2017-07-06
  • thinkphp怎么用?ThinkPHP使用方法

    本文详细介绍了ThinkPHP使用方法,不懂的同学快来跟小编一起看看吧 1、下载ThinkPHP模板,整个导入到项目根目录下。2、修改index.php文件,内容如下:<?php/***临时配置,...2017-07-06
  • 微信小程序 Toast自定义实例详解

    这篇文章主要介绍了微信小程序 Toast自定义实例详解的相关资料,需要的朋友可以参考下...2017-01-23
  • thinkphp3.x连接mysql数据库的方法(具体操作步骤)

    这篇文章主要介绍了thinkphp3.x连接mysql数据库的方法,详细分析了thinkPHP3.x操作数据库的具体步骤,包括惯例配置文件设置,sql语句创建表以及针对数据库的数据插入操作等,需要的朋友可以参考下...2016-05-20
  • ThinkPHP 3.2.2实现事务操作的方法

    这篇文章主要介绍了ThinkPHP 3.2.2实现事务操作的方法,简单分析了thinkPHP中事务的启动、提交、回滚等操作方法并给出了完整的事务提交与回滚操作实例,需要的朋友可以参考下...2017-05-08
  • ThinkPhP+Apache+PHPstorm整合框架流程图解

    这篇文章主要介绍了ThinkPhP+Apache+PHPstorm整合框架流程图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-11-23
  • IIS自定义404错误页避免暴露.NET网站路径信息

    这篇文章主要介绍了IIS自定义404错误页避免暴露.NET网站路径信息,在输入非.aspx页面时,显示默认404页面,暴露站点路径信息,本文就给出了一个解决方法,需要的朋友可以参考下...2016-01-27
  • thinkPHP查询方式小结

    这篇文章主要介绍了thinkPHP查询方式,结合实例形式总结分析了thinkPHP的普通查询、表达式查询、区间查询、统计查询及SQL直接查询的使用技巧,需要的朋友可以参考下...2016-01-12
  • thinkPHP5.0框架整体架构总览【应用,模块,MVC,驱动,行为,命名空间等】

    这篇文章主要介绍了thinkPHP5.0框架整体架构,简单介绍了thinkPHP5.0的应用,模块,MVC,驱动,行为,命名空间等概念与基本用法,需要的朋友可以参考下...2017-04-03
  • thinkPHP商城公告功能开发问题分析

    这篇文章主要介绍了thinkPHP商城公告功能开发问题,结合实例形式分析了基于thinkPHP实现商城公告功能所涉及的ajax交互及数据库操作相关技巧,需要的朋友可以参考下...2016-12-02
  • Thinkphp事务操作实例(推荐)

    下面小编就为大家带来一篇Thinkphp事务操作实例(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2017-04-03
  • thinkphp实现无限分类(使用递归)

    这篇文章主要介绍了在使用递归的情况下thinkphp实现无限分类,感兴趣的小伙伴们可以参考一下...2015-12-21
  • Nginx配置支持ThinkPHP的PATH_INFO

    这篇文章主要介绍了Nginx配置支持ThinkPHP的PATH_INFO,本文在Ubuntu的开发环境加配置成功,需要的朋友可以参考下...2016-01-27
  • ThinkPHP使用getlist方法实现数据搜索功能示例

    这篇文章主要介绍了ThinkPHP使用getlist方法实现数据搜索功能,结合实例形式较为详细的分析了thinkPHP基于getlist实现根据给定条件进行数据的读取、显示等相关操作技巧,需要的朋友可以参考下...2017-05-21
  • Thinkphp单字母函数使用指南

    本文给大家汇总介绍了thinkphp中的单字母函数的使用方法,非常的简单,他们都在 THINKPHPCommonfunctions.php 这个文件中 下面我分别说明一下他们的使用方法...2016-05-10
  • Thinkphp自定义美化success和error提示跳转页面代码实例

    这篇文章主要介绍了Thinkphp自定义美化success和error提示跳转页面代码实例,有需要的同学可以直接借鉴文中代码,可以增加页面的美观和友好程度...2021-03-05