码迷,mamicode.com
首页 > 其他好文 > 详细

auth 权限控制

时间:2015-06-25 21:05:16      阅读:381      评论:0      收藏:0      [点我收藏+]

标签:

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

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

1 namespace Admin\Controller;
2 use Common\Controller\AuthController;
3 
4 class IndexController extends AuthController {
5     public function index(){
6         echo ‘后台首页!‘;
7     }
8 }

这是通过 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() 函数。

1 namespace Admin\Controller;
2 use Common\Controller\AuthController;
3  class IndexController  extends AuthController {
4  public  function index() {
5  echo ‘后台首页!‘;
6   }
7 }

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

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

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

 

<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 中写入代码:

 1 <?php
 2 namespace Admin\Controller;
 3 use Think\Controller;
 4 
 5 class LoginCOntroller extends Controller{
 6     public function index() {
 7         if(IS_POST) {
 8             $login = array();
 9             switch(I(‘user‘,null,false)) {
10                 case ‘admin‘:
11                   $login[‘uid‘]=1;
12                   $login[‘user‘]=‘admin‘;
13                   break;
14                 case ‘test‘:
15                   $login[‘uid‘]=2;
16                   $login[‘user‘]=‘test‘;
17                   break;
18                 case ‘guest‘:
19                   $login[‘uid‘]=3;
20                   $login[‘user‘]=‘guest‘;
21                   break;
22                 default:
23                   $this->error(‘登陆用户不存在‘);
24                 }
25                 if(count($login)) {
26                     session(‘auth‘,$login);
27                     $this->success(‘登陆成功‘,U(‘Index/index‘));
28                 }
29             }else {
30                 $this->display();
31             }
32         }
33         public function logout() {
34             session(‘[destroy]‘);
35             $this->success(‘退出成功‘,U(‘Login/index‘));
36         }
37     }

 

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

 

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

 1 <?php
 2 namespace Common\Controller;
 3 use Think\Controller;
 4 use Think\Auth;
 5 
 6 class AuthController extends Controller {
 7     protected function _initialize() {
 8         $sess_auth=session(‘auth‘);
 9         if(!$sess_auth) {
10             $this->error(‘非法访问,正在跳转登录页面‘,U(‘Login/index‘));
11         }
12         if($sess_auth[‘uid‘]==1) {
13             return true;
14         }
15         $auth = new Auth();
16         if(!$auth->check( MODULE_NAME.‘/‘.CONTROLLER_NAME.‘/‘.ACTION_NAME,$sess_auth[‘uid‘])) {
17             $this->error(‘没有权限‘,U(‘Login/logout‘));
18         }
19     }
20 }

 

auth 权限控制

标签:

原文地址:http://www.cnblogs.com/jacson/p/4600856.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!