牛骨文教育服务平台(让学习变的简单)
博文笔记

Auth权限控制的实例代码演示(thinkphp)

创建时间:2015-08-02 投稿人: 浏览次数:173

权限控制就是对某些用户进行一些权限的设置。大部分用于后台管理。

第一步:在Admin模块下创建一个IndexController.class.php,并创建index方法。

<?php

namespace AdminController;

use CommonControllerAuthController;

header("Content-Type:text/html;charset=utf-8");

class IndexController extends AuthController {

    public function index() {
        echo "后台首页";
        echo "<a href="" . U("Login/logout") . "">退出</a>";
    }

}


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

<?php

namespace CommonController;

use ThinkController;
use ThinkAuth;

class AuthController extends Controller {

    protected function _initialize() {
        $sess_auth = session("auth");
        if (!$sess_auth) {
            $this->error("非法用户,正在跳转到登陆页面", U("Login/index"));
        }
        if ($sess_auth["u_id"] == 1) {
            return TRUE;
        }
        $auth = new Auth();
        if (!$auth->check(MODULE_NAME . "/" . CONTROLLER_NAME . "/" . ACTION_NAME, $sess_auth["u_id"])) {
            $this->error("没有权限", U("Login/logout"));
        }
    }

}
/*
 *上面使用的 _initialize()方法的是固定的,由于AuthController.class.php类继承了Controller类,所以第一步中 * 的Index类要继承AuthController类
 *
 */
注意:此时当我们访问Index/index时候,可能会出现错误。
错误:thinkphp中的SQLSTATE[42S02]: Base table or view not found: 1146 Table "test.
解决之法:打开Thinkphp下的Library/think/Auth.class.php。此时我们只需要赋值最上面注释的创建数据库表的部分。
代码:

DROP TABLE IF EXISTS `think_auth_group`;
CREATE TABLE `think_auth_group` ( 
    `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, 
    `title` char(100) NOT NULL DEFAULT "", 
    `status` tinyint(1) NOT NULL DEFAULT "1", 
    `rules` char(80) NOT NULL DEFAULT "", 
    PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8;
-- ----------------------------
-- think_auth_group_access 用户组明细表
-- uid:用户id,group_id:用户组id
-- ----------------------------
DROP TABLE IF EXISTS `think_auth_group_access`;
CREATE TABLE `think_auth_group_access` (  
    `uid` mediumint(8) unsigned NOT NULL,  
    `group_id` mediumint(8) unsigned NOT NULL, 
    UNIQUE KEY `uid_group_id` (`uid`,`group_id`),  
    KEY `uid` (`uid`), 
    KEY `group_id` (`group_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
然后打开phpmyadmin。按下图操作进行


第三歩:此时我们访问Index/index的时候。就没有权限了,主要是后面check()验证失败。
       在Admin/Controller/下创建一个LoginController.class.php类,这个类继承Controller类。并且在       Admin/View下创建一个Login/index.html文件
  index.html文件代码:

 <!DOCTYPE html>
<html>
    <head>
        <title>后台页面</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
    </head>
    <body>
        <form method="post" action="{:U("Login/index")}">
            <p><font color="red">admin用户为管理员,可以进入后台页面</font></p>
            <p><font color="purple">vip用户为会员,可以进入后台页面</font></p>
            <p><font color="blue">guest用户游客,不可以进入后台页面</font></p>
            <p>用户:<input type="text" name="user"/></p>
            <p><input type="submit" value="提交"/></p>
        </form>
    </body>
</html>
LoginController.class.php类代码:

<?php

namespace AdminController;

use ThinkController;

class LoginController extends Controller {

    public function index() {
        if (IS_POST) {
            $login = array();
            switch (I("user", "null", FALSE)) {
                case "admin":
                    $login["u_id"] = 1;
                    $login["user"] = "admin";
                    break;
                case "vip":
                    $login["u_id"] = 2;
                    $login["user"] = "vip";
                    break;
                case "guest":
                    $login["u_id"] = 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"));
    }

}
最后一步:就是在刚才phpmyadmin中建立的三个表中插入数据:
步骤如下:
1.think_auth_rule


2.think_auth_group


3.think_auth_group_access


这样就全部完成了、当我们测试的时候。admin与vip可以进入后台。但是guest不可以。。。。。


声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。