ThinkPHP--auth权限控制

权限介绍

权限控制,多用于管理后台上使用。比如:超级管理员(全局控制权)、认证专员(只能给会员做认证操作)、审核专员(只能操作内容的审核、删除、加精等操作)等以此类推。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'));
    }
}
}
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值