Auth权限控制的实例代码演示(thinkphp)
权限控制就是对某些用户进行一些权限的设置。大部分用于后台管理。
第一步:在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不可以。。。。。
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: thinkphp3.23的auth详细源码解读(带实例)
- 下一篇: thinkphp 权限验证