权限介绍
权限控制,多用于管理后台上使用。比如:超级管理员(全局控制权)、认证专员(只能给会员做认证操作)、审核专员(只能操作内容的审核、删除、加精等操作)等以此类推。TP内置了一个Auth.class.php
类来实现权限控制。该类提供了三个表:think_auth_rule
(认证规则表)、think_auth_group
(用户组表)、think_auth_group_access
(用户和组对应关系表)。该三张表在Think下有详细说明,可以按照上面的去创建。当然还有结合自己创建的用户表进行对应即可。
简单登录
第一步:首先生成Admin模块(在应用入口文件index.php
中写入:
define('BIND_MODULE','Admin');
define('BUILD_CONTROLLER_LIST','Index,User,Menu');
//自动生成三个控制器),
然后在Admin模块下的IndexController.class.php
中写入如下内容:
namespace Admin\Controller;
use Think\Controller;
class IndexController extends Controller{
public function index(){
echo '后台首页';
}
}
通过URL:http://localhost/Admin/Index/index,即可访问
第二步:在application根目录下的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('没有权限');
}
}
}
这里使用的方法固定为:_iniatilize()
。由于AuthController.class.php
继承了Controller
类,所以第一步的类改为继承它:
namespace Admin\Controller;
use Common\Controller\AuthController;
class IndexController extends AuthController{
public function index(){
echo '后台首页';
}
}
此时再访问后台首页已经没有权限了,主要是$auth->check()
验证无法通过的原因。
第三步:创建一个LoginController.class.php
:
namespace Common\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';
default:
$this->error('登录用户不存在');
}
if(count($login)){
session('auth',$login);
$this->success('登录成功',U('Index/index'));
}
}else{
$this->display();
}
}
}
模板为index.html:
<p>三个用户:admin为管理员(所有权)、test为测试(无权限)、guest(游客登录权限)</p>
<form method="post" action="{:U('Login/index')}">
<p>用户名:<input type="text" name="user"></p>
<p><input type="submit" value="登录"></p>
</form>
这里登录的LoginController.class.php类只要继承Controller即可,否则无法运行。因为继承AuthController类的是需要权限控制的类。
第四步:完善AuthController类的权限验证过程。
class AuthController extends Controller{
protected function _iniatialize(){
$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'));
}
}
}