1、找到Thinkphp原文件中的Examples\Rbac\Conf中的配置RBAC
'USER_AUTH_ON' =>true,
'USER_AUTH_TYPE' =>1,// 默認(rèn)認(rèn)證類型 1 登錄認(rèn)證 2 實(shí)時(shí)認(rèn)證
'USER_AUTH_KEY' =>'authId',// 用戶認(rèn)證SESSION標(biāo)記
'ADMIN_AUTH_KEY' =>'administrator',
'USER_AUTH_MODEL' =>'User',// 默認(rèn)驗(yàn)證數(shù)據(jù)表模型.用戶表
'AUTH_PWD_ENCODER' =>'md5',// 用戶認(rèn)證密碼加密方式
'USER_AUTH_GATEWAY' =>'/Public/login',// 默認(rèn)認(rèn)證網(wǎng)關(guān)
'NOT_AUTH_MODULE' =>'Public',// 默認(rèn)無需認(rèn)證模塊
'REQUIRE_AUTH_MODULE' =>'',// 默認(rèn)需要認(rèn)證模塊
'NOT_AUTH_ACTION' =>'',// 默認(rèn)無需認(rèn)證操作
'REQUIRE_AUTH_ACTION' =>'',// 默認(rèn)需要認(rèn)證操作
'GUEST_AUTH_ON' =>false, // 是否開啟游客授權(quán)訪問
'GUEST_AUTH_ID' =>0, // 游客的用戶ID
'RBAC_ROLE_TABLE' =>'think_role',
'RBAC_USER_TABLE' =>'think_role_user',
'RBAC_ACCESS_TABLE' =>'think_access',
'RBAC_NODE_TABLE' =>'think_node',
2、創(chuàng)建表
CREATE TABLE IF NOT EXISTS `think_access` (//角色權(quán)限表
`role_id` smallint(6) unsigned NOT NULL,//角色id
`node_id` smallint(6) unsigned NOT NULL,//節(jié)點(diǎn)id,必須是先可以訪問項(xiàng)目->模塊->方法
`level` tinyint(1) NOT NULL,//節(jié)點(diǎn)表中的level字段相同
`module` varchar(50) DEFAULT NULL,//模塊名稱.可以不寫
`pid` int,//節(jié)點(diǎn)表中的pid字段相同
KEY `groupId` (`role_id`),
KEY `nodeId` (`node_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `think_node` (//節(jié)點(diǎn)表
`id` smallint(6) unsigned NOT NULL AUTO_INCREMENT,//id
`name` varchar(20) NOT NULL,//項(xiàng)目名稱、模塊名稱、方法名稱,一定要對(duì)應(yīng)項(xiàng)目中的名稱
`title` varchar(50) DEFAULT NULL,//節(jié)點(diǎn)描述.可以不寫
`status` tinyint(1) DEFAULT '0',//節(jié)點(diǎn)狀態(tài):'1'為開啟
`remark` varchar(255) DEFAULT NULL,//詳細(xì)描述.可以不寫
`sort` smallint(6) unsigned DEFAULT NULL,//節(jié)點(diǎn)排序.可以不寫
`pid` smallint(6) unsigned NOT NULL,//父節(jié)點(diǎn):即該名稱的父級(jí)id
`level` tinyint(1) unsigned NOT NULL,//節(jié)點(diǎn)分級(jí):'1'為項(xiàng)目,'2'為模塊,'3'為方法
PRIMARY KEY (`id`),
KEY `level` (`level`),
KEY `pid` (`pid`),
KEY `status` (`status`),
KEY `name` (`name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `think_role` (//角色表
`id` smallint(6) unsigned NOT NULL AUTO_INCREMENT,//id
`name` varchar(20) NOT NULL,//角色名稱
`pid` smallint(6) DEFAULT NULL,//父級(jí)id
`status` tinyint(1) unsigned DEFAULT NULL,//狀態(tài):'1'為開啟
`remark` varchar(255) DEFAULT NULL,//說明
PRIMARY KEY (`id`),
KEY `pid` (`pid`),
KEY `status` (`status`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
CREATE TABLE IF NOT EXISTS `think_role_user` (//用戶角色表
`role_id` mediumint(9) unsigned DEFAULT NULL,//角色id
`user_id` char(32) DEFAULT NULL,//用戶id
KEY `group_id` (`role_id`),
KEY `user_id` (`user_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
create table think_user(//用戶表...自定義
id int not null primary key auto_increment,
username varchar(20) not null,
password varchar(32) not null
.......
)
3、在Lib\Action中創(chuàng)建CommonAction.class.php 并初使化接口
class CommonAction extends Action{
function _initialize() {
// 用戶權(quán)限檢查
if (C('USER_AUTH_ON') && !in_array(MODULE_NAME, explode(',', C('NOT_AUTH_MODULE')))) {//讀取配置文件判斷是否開啟權(quán)限驗(yàn)證
import('ORG.Util.RBAC');//導(dǎo)入RBAC.class.php文件
if (!RBAC::AccessDecision()) {
//檢查認(rèn)證識(shí)別號(hào)
if (!$_SESSION [C('USER_AUTH_KEY')]) {
//跳轉(zhuǎn)到認(rèn)證網(wǎng)關(guān)
redirect(PHP_FILE . C('USER_AUTH_GATEWAY'));
}
// 沒有權(quán)限 拋出錯(cuò)誤
if (C('RBAC_ERROR_PAGE')) {
// 定義權(quán)限錯(cuò)誤頁面
redirect(C('RBAC_ERROR_PAGE'));
} else {
if (C('GUEST_AUTH_ON')) {
$this->assign('jumpUrl', PHP_FILE . C('USER_AUTH_GATEWAY'));
}
// 提示錯(cuò)誤信息
$this->error(L('_VALID_ACCESS_'));
}
}
}
}
}
4、創(chuàng)建PublicAction.class.php
class PublicAction extends Action{
function index(){
$this->login();
}
function login(){
$this->display('./Public/login.html');
}
function checkLogin(){
if(empty($_POST['username'])) {
$this->error('帳號(hào)錯(cuò)誤!');
}elseif (empty($_POST['password'])){
$this->error('密碼必須!');
}
//elseif (empty($_POST['verify'])){
//$this->error('驗(yàn)證碼必須!');
//}
//生成認(rèn)證條件
$map = array();
// 支持使用綁定帳號(hào)登錄
$map['username ']= $_POST['username'];
//if($_SESSION['verify'] != md5($_POST['verify'])) {
//$this->error('驗(yàn)證碼錯(cuò)誤!');
//}
import ( 'ORG.Util.RBAC' );
$authInfo = RBAC::authenticate($map);
//使用用戶名、密碼和狀態(tài)的方式進(jìn)行認(rèn)證
if(false === $authInfo) {
$this->error('帳號(hào)不存在或已禁用!');
}else {
if($authInfo['password'] != md5($_POST['password'])) {
$this->error('密碼錯(cuò)誤!');
}
$_SESSION[C('USER_AUTH_KEY')]=$authInfo['id'];
if($authInfo['username']=='admin') {
$_SESSION['administrator']=true;
}
// 緩存訪問權(quán)限
RBAC::saveAccessList();
$this->success('登錄成功!');
}
}
function loginout(){
if(isset($_SESSION[C('USER_AUTH_KEY')])) {
unset($_SESSION[C('USER_AUTH_KEY')]);
unset($_SESSION);
session_destroy();
$this->assign("jumpUrl",__URL__.'/login/');
$this->success('登出成功!');
}else {
$this->error('已經(jīng)登出!');
}
}
}
5、創(chuàng)建前臺(tái)登錄頁login.html
<form action="__URL__/checkLogin" method="POST">
用戶名<input type="text" name="username"><br>
密碼<input type="password" name="password"><br>
<input type="submit" value="登錄">
</form>
6、到ThinkPHP原代碼中找到success.html文件提示信息頁復(fù)制到項(xiàng)目admin\Tpl\default\Public文件夾中.注要先創(chuàng)建Public文件夾