标签:
一. 权限介绍
所谓权限控制,大部分是在管理后台上使用。比如超级管理员登录,会得到所有操作的
控制权;认证专员,只能给会员做认证操作;审核专员,只能操作内容的审核、删除、加精
等操作,以此类推。那么 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 }
标签:
原文地址:http://www.cnblogs.com/jacson/p/4600856.html