一. 权限介绍
所谓权限控制,大部分是在管理后台上使用。比如超级管理员登录,会得到所有操作的
控制权;认证专员,只能给会员做认证操作;审核专员,只能操作内容的审核、删除、加精
等操作,以此类推。那么 ThinkPHP 提供了一个内置的 Auth.class.php 类来实现权限控
制,这个类提供了三个表:think_auth_rule(认证规则表)、think_auth_group(用户组
表)、think_auth_group_access(用户和组对应关系表)。当然还要结合自己创建的用户
表进行对应即可

二. 简单登录
第一步:在 Admin 模块下创建一个  IndexController.class.php (默认就有了),创
建 index 方法,输出一句话即可。

 namespace Admin\Controller;
use Common\Controller\AuthController; class IndexController extends AuthController {
public function index(){
echo '后台首页!';
}
}

这是通过 URL 访问: http://localhost/demo39/Admin/Index/index ,即可访问。

第二步:在 Weibo 根目录下的 Common 公共模块下创建 Controller 文件夹,并在里面
创建一个  AuthController.class.php  类,这个类用于权限控制。

namespace Common\Controller;
use Think\Controller;
use Think\Auth; class AuthController extends Controller {
protected function _initialize() {
$auth = new Auth();
if(!$auth->check()) {
$this->error('没有权限');
}
}
}

这里使用的方法固定为: _initialize() 。由于  AuthController.class.php  继承了
 Controller  类,所以,第一步的 Index 类改为继承它。 check() 函数是调用了

ThinkPHP/Library/Think/Auth.class.php 内部的 check() 函数。

 namespace Admin\Controller;
use Common\Controller\AuthController;
class IndexController extends AuthController {
public function index() {
echo '后台首页!';
}
}

此时,我们再访问后台首页的时候,已经没有权限了。主要是 $auth->check() 验证无
法通过的原因。

第三步:创建一个 WeiBo/Admin/Controller/LoginController.class.php   ,模版为  index.html 。

在 WeiBo/Admin/View/Login/index.html 中写入登录代码:

 <p>三个用户:admin为超级管理员,所有权限;test测试用户,没有权限;guest游客,只有登录权限。</p>
<form method="post" action="{:U('index')}">
<p>用户名:<input type="text" name="user" /></p>
<p><input type="submit" value="登录" /></p>
</form>

在 WeiBo/Admin/Controller/LoginController.class.php 中写入代码:

 <?php
namespace Admin\Controller;
use Think\Controller; class LoginCOntroller extends Controller{
public function index() {
if(IS_POST) {
$login = array();
switch(I('user',null,false)) {
case 'admin':
$login['uid']=1;
$login['user']='admin';
break;
case 'test':
$login['uid']=2;
$login['user']='test';
break;
case 'guest':
$login['uid']=3;
$login['user']='guest';
break;
default:
$this->error('登陆用户不存在');
}
if(count($login)) {
session('auth',$login);
$this->success('登陆成功',U('Index/index'));
}
}else {
$this->display();
}
}
public function logout() {
session('[destroy]');
$this->success('退出成功',U('Login/index'));
}
}

这里登录的 LoginController.class.php 类只要继承 Controller 即可,否则无法
运行。因为继承 AuthController 类的是需要权限控制的类。

这里加了个 logout() 函数,就是在后台主页要退出的函数:

在 WeiBo/Admin/Controller/IndexController.class.php 中完善登出的功能:

 <?php

 namespace Admin\Controller;
use Common\Controller\AuthController; class IndexController extends AuthController {
public function index(){
echo '后台首页!';
echo '<a href="'.U('Login/logout').'">退出</a>';
}
}

第四步:完善 AuthController 类的权限验证过程。

 <?php
namespace Common\Controller;
use Think\Controller;
use Think\Auth; class AuthController extends Controller {
protected function _initialize() {
$sess_auth=session('auth');
if(!$sess_auth) {
$this->error('非法访问,正在跳转登录页面',U('Login/index'));
}
if($sess_auth['uid']==1) {
return true;
}
$auth = new Auth();
if(!$auth->check( MODULE_NAME.'/'.CONTROLLER_NAME.'/'.ACTION_NAME,$sess_auth['uid'])) {
$this->error('没有权限',U('Login/logout'));
}
}
}

最后的check()判定函数中的 MODULE_NAME.'/'.CONTROLLER_NAME.'/'.ACTION_NAME 其实在本例子中是 Admin/Index/index ,但由于这个权限规则可能不是固定的,所以用

MODULE_NAME.'/'.CONTROLLER_NAME.'/'.ACTION_NAME 会通用一点。

check()这个函数是调用的 ThinkPHP/Library/Think/Auth.class.php 中的,括号里面的参数在check()函数前面的注释里有介绍

如果 $sess_auth['uid']==1 则判定为: true ,这时就不会执行下面的 !$auth->check() 函数了,这个check()函数是当不是

admin用户时,则判定为没有权限

最后再写一些数据库中的操作是怎样的,

在 ThinkPHP/Library/Think/Auth.class.php 中可以看到已经写好了sql语句,可以用来增加数据库,复制后在

数据库中粘贴就行,效果如下图:

think_auth_rule  
name是授权给用户访问的页面
视频中的权限是 Admin/Index/index 
title写的是后台首页
此时id默认是1,这里id是需要认证的规则

think_auth_group 
title上写的是默认管理组
status默认是1
给rules设置为1,但是以后还是会设置第2,第3,第4,第5个权限,所以可以设置为1,2,3,4,5...,这时默认管理组就有这些权限,

这些权限就是  think_auth_rule 中的id,因为这些id对应了后面的name,name就是可以访问的权限 这些权限就会分配给 think_auth_group_access ,

think_auth_group_access 中的uid就是程序登录是的  WeiBo/Admin/Controller/LoginController.class.php 中的  $login['uid'] 中的值,这里的 group_id 就是 think_auth_group 中的id.

think_auth_rule 中的表的结构如图:

think_auth_group 中的效果如下图:

think_auth_group_access 的效果如下图:

auth 权限控制的更多相关文章

  1. MongoDB 安全和访问权限控制

    MongoDB的访问控制能够有效保证数据库的安全,访问控制是指绑定Application监听的IP地址,设置监听端口,使用账户和密码登录 一,访问控制的参数 1,绑定IP地址 mongod 参数:-- ...

  2. redis密码设置、访问权限控制等安全设置

    redis作为一个高速数据库,在互联网上,必须有对应的安全机制来进行保护,方法有2,如下. 1.比较安全的办法是采用绑定IP的方式来进行控制.  请在redis.conf文件找到如下配置 # If y ...

  3. 为CDH 5.7集群添加Kerberos身份验证及Sentry权限控制

    转载请注明出处:http://www.cnblogs.com/xiaodf/ 4. 为CDH 5集群添加Kerberos身份验证 4.1 安装sentry1.点击“操作”,“添加服务”:2.选择sen ...

  4. [转]CodeIgniter与Zend Acl结合实现轻量级权限控制

    Tag :CodeIgniter  Zend Acl 权限控制 1. Zend_Acl简介 Zend_Acl 为权限管理提供轻量并灵活的访问控制列表 (ACL,access control list) ...

  5. Spring Security(16)——基于表达式的权限控制

    目录 1.1      通过表达式控制URL权限 1.2      通过表达式控制方法权限 1.2.1     使用@PreAuthorize和@PostAuthorize进行访问控制 1.2.2   ...

  6. thinkphp整合系列之rbac的升级版auth权限管理系统demo

    权限管理基本是作为网站的标配了: 除非是像博客这类个人使用的:否则权限管理的重要性不言而喻: 今个就来写写auth权限管理: thinkphp已经内置了auth权限类位于:/ThinkPHP/Libr ...

  7. ASP.NET Zero--15.一个例子(8)商品分类管理-权限控制

    1.添加权限常量 打开文件AppPermissions.cs [..\MyCompanyName.AbpZeroTemplate.Core\Authorization\AppPermissions.c ...

  8. aProxy: 带认证授权和权限控制的反向代理

    前段时间很多数据库因为没有做好权限控制暴露在外网被删然后遭勒索的事件,而类似的有些内网的web服务也会被开放到公网并且没有做任何权限控制的,这样也会有一定的风险.所以就决定写篇文章简单介绍一个小工具. ...

  9. django(权限、认证)系统——第三方组件实现Object级别权限控制

    在我的系列blog<Django中内置的权限控制>中明确提及到,Django默认并没有提供对Object级别的权限控制,而只是在架构上留了口子.在这篇blog中,我们探讨一个简单流行的Dj ...

随机推荐

  1. poj1463 树形dp

    树形dp裸题,不过输入是真的恶心,要字符串读入考虑数字大于等于10的情况 dp[i][j]表示i的子树在j状态的最小的边集覆盖,j为0表示不选当前结点,1表示选 转移方程(u->x是u的所有子节 ...

  2. Tomcat翻译--JNDI Resources HOW-TO

    原文:http://tomcat.apache.org/tomcat-7.0-doc/jndi-resources-howto.html Introduction(介绍) Tomcat provide ...

  3. Shiro安全配置

    主要还是整合了本地ehcache,集群session管理过段时间放出 <?xml version="1.0" encoding="UTF-8"?> ...

  4. Python习题持续更新

    1.你是一个高级测试工程师,现在要做性能测试,需要你写一个函数,批量生成一些注册使用的账号. 产生的账号是以@163.com结尾,长度由用户输入,产生多少条也由用户输入,用户名不能重复,用户名必须由大 ...

  5. angular复选框式js树形菜单(二)

    删除(过滤)树形结构某一个子节点: function filterTreeData(treeData){ angular.forEach(treeData,function(item){ if (it ...

  6. 1.mysql优化---优化入门之MySQL的优化介绍及执行步骤

    优化到底优化什么?      优化,一直是面试最常问的一个问题.因为从优化的角度,优化的思路,完全可以看出一个人的技术积累.那么,关于系统优化,假设这么个场景,用户反映系统太卡(其实就是高并发),那么 ...

  7. UVA - 11324 The Largest Clique (强连通缩点+dp)

    题目链接 题意:从有向图G中找到一个最大的点集,使得该点集中任意两个结点u,v满足u可达v或v可达u. 解法:先把同处于一个强连通分量中的结点合并(缩点),得到一张DAG图,在DAG上dp即可. 感觉 ...

  8. 继《关于讯飞语音SDK开发学习》之打包过程中遇到小问题

    关于讯飞语音SDK开发学习 使用vs自带打包,具体怎么操作就不说了,网上关于这方面的资料挺多的.例如:winform 打包部署,VS2010程序打包操作(超详细的),关键是桌面上创建快捷方式中的&qu ...

  9. mybatis与oracle使用总结

    Oracle使用总结 1.新建表删除表 新建表语句: CREATE TABLE +表名{ } create table AFA_USER ( USER_ID VARCHAR2() not null, ...

  10. 内存优化总结:ptmalloc、tcmalloc和jemalloc

    概述 需求 系统的物理内存是有限的,而对内存的需求是变化的, 程序的动态性越强,内存管理就越重要,选择合适的内存管理算法会带来明显的性能提升.比如nginx, 它在每个连接accept后会malloc ...