权限介绍
ThinkPHP 提供了一个内置的 Auth.class.php 类来实现权限控 制,这个类提供了三个表:
think_auth_rule(认证规则表)、think_auth_group(用户组 表)、think_auth_group_access(用户和组对应关系表)。
Auth.class.php中有提供三个表结构,
当然还要结合自己创建的用户 表进行对应即可。
二、简单登录
首先进入后台首页 IndexControll.class.php
正常输出
然后
公共目录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('没有权限'); }
}
}
IndexController.class.php:
namespace Admin\Controller;
use Common\Controller\AuthController;
//继承公共目录的控制类
class IndexController extends AuthController { public function index() { echo '后台首页!'; } }
再访问后台首页的时候,已经没有权限了。
admin/Controller目录创建
LoginController.class.php:
use Think\Controller;
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'));
}
}
view/Login index.html
后台页面
完善 AuthController 类的权限验证过程。
class AuthController extends Controller {
protected function _initialize() {
$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'));
}
}
}
之前要导入数据
表的结构 `think_auth_group`
--
CREATE TABLE IF NOT EXISTS `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 AUTO_INCREMENT=2 ;
--
-- 转存表中的数据 `think_auth_group`
--
INSERT INTO `think_auth_group` (`id`, `title`, `status`, `rules`) VALUES
(1, '默认管理组', 1, '1,2,3');
-- --------------------------------------------------------
--
-- 表的结构 `think_auth_group_access`
--
CREATE TABLE IF NOT EXISTS `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;
--
-- 转存表中的数据 `think_auth_group_access`
--
INSERT INTO `think_auth_group_access` (`uid`, `group_id`) VALUES
(2, 1);
-- --------------------------------------------------------
--
-- 表的结构 `think_auth_rule`
--
CREATE TABLE IF NOT EXISTS `think_auth_rule` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`name` char(80) NOT NULL DEFAULT '',
`title` char(20) NOT NULL DEFAULT '',
`type` tinyint(1) NOT NULL DEFAULT '1',
`status` tinyint(1) NOT NULL DEFAULT '1',
`condition` char(100) NOT NULL DEFAULT '',
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;
--
-- 转存表中的数据 `think_auth_rule`
--
INSERT INTO `think_auth_rule` (`id`, `name`, `title`, `type`, `status`, `condition`) VALUES
(1, 'Admin/Index/index', '后台首页', 1, 1, '');
--