thinkphp自定义权限管理之名称判断
权限管理,就是给不同的用户分配不同的权限。当用户登录或者操作时候进行判断,来阻止用户进行权限以外的操作。本次讲的是当用户登录一刻,只显示权限开启的内容。
一、建立数据库。
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')}">任务管理</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自定义权限管理之名称判断的更多相关文章
- DRF内置权限组件之自定义权限管理类
DRF内置权限组件permissions 权限控制可以限制用户对于视图的访问和对于具体数据对象的访问. 在执行视图的dispatch()方法前,会先进行视图访问权限的判断 在通过get_object( ...
- ThinkPHP RBAC权限管理机制
RBAC是ThinkPHP很好用的后台权限管理的,话不多说,实现方法如下,也方便以后自己查询使用: 1.新建4个数据库表 self_role权限表 CREATE TABLE `self_role` ( ...
- android 自定义权限管理
在Android6.0后有些权限就需要进行询问,虽然可以将targetSdkVersion设置成小于等于23,但是这样可能有些东西无法使用,所以要进行权限的管理. 实现逻辑:打开页面就询问权限,如果没 ...
- 关于 DotNetCore 的自定义权限管理
1.自定义权限需要扩展 Microsoft.AspNetCore.Authentication 实现一套接口 IAuthenticationHandler, IAuthenticationSignIn ...
- Android : M 与 N 的权限管理
从 M 开始,permission 分为 Normal permission Runtime permission Normal permission 直接在 manifest 里声明就可以用了. a ...
- Asp.net Core 系列之--5.认证、授权与自定义权限的实现
ChuanGoing 2019-11-24 asp.net core系列已经来到了第五篇,通过之前的基础介绍,我们了解了事件订阅/发布的eventbus整个流程,初探dapper ORM实现,并且简单 ...
- C#_MVC 自定义AuthorizeAttribute实现权限管理
随笔- 28 文章- 31 评论- 16 MVC 自定义AuthorizeAttribute实现权限管理 在上一节中提到可以使用AuthorizeAttribute进行权限管理: [Autho ...
- MVC 自定义AuthorizeAttribute实现权限管理
在上一节中提到可以使用AuthorizeAttribute进行权限管理: [Authorize] public ActionResult TestAuthorize() { return View() ...
- 权限管理(java+struts2(自定义标签)实现)--------->全代码演示
地址:http://blog.chinaunix.net/uid-24343152-id-3673026.html 最近由于项目不是很紧所以总结了之前做了n遍的权限管理功能.以便之后系统copy之用. ...
随机推荐
- URL编码表%20Base64编码表%20HTTP消息含义
URL编码表 backspace 8% A 41% a 61% § %A7 Õ %D5 tab 9% B 42% b 62% « %AB Ö %D6 linefeed %0A C 43% c ...
- 性能测试-ORACLE性能监控
通过lr做性能测试的过程,通过监控Oracle数据库的性能 采用的监控工具:PeOny PeOny安装 1. 安装服务端 1) LINUX平台安装 解压缩peony3.x.0.x.tar.gz文件,b ...
- 计数排序-java
今天看了一本书,书里有道题,题目很常见,排序,明了点说: 需求:输入:最多有n个正整数,每个数都小于n, n为107 ,没有重复的整数 输出:按升序排列 思路:假设有一组集合 {1,3,5,6,11, ...
- HDU 5769 后缀数组
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5769 [2016多校contest-4] 题意:给定一个字符,还有一个字符串,问这个字符串存在多少个不 ...
- 【虚拟机】苹果虚拟机mac10.11.6+Xcode8.1
[虚拟机]苹果虚拟机mac10.11.6+Xcode8.1本虚拟机加装Xcode8.1,方便大家更好学习Swift3.0语言以及iOS开发.安装注意事项:第一步:确认硬件:1.确认主板以及cpu支持虚 ...
- [xsd学习]xsd介绍
一直以来项目中对xml格式的判断使用的都是dtd格式,直到最近才发现,不知何时都已经转为xsd来进行判断和校验,于是今天专门找资料看下,不得不说,对于这类资料的入门,w3cschool真是个不错的资料 ...
- js实现冒泡排序
冒泡排序 冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法. 它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到 ...
- JavaScript中的apply()方法和call()方法使用介绍
1.每个函数都包含两个非继承而来的方法:apply()和call(). 2.他们的用途相同,都是在特定的作用域中调用函数. 3.接收参数方面不同,apply()接收两个参数,一个是函数运行的作用域(t ...
- js点击a链接弹出alert对话框
代码 <html> <head> <meta charset="utf-8"> <meta name="generator&qu ...
- 代码审查工具StyleCop
“代码审查”或是“代码评审”(Code Review),这是一个流程,当开发人员写好代码后,需要让别人来review一下他的代码,这是一种有效发现BUG的方法.由此,我们可以审查代码的风格.逻辑.思路 ...