ThinkPHP + Discuz 整合方法
如下是Discuz6的整合方法,discuz5請按照裏面的說明進行相應的修改,也可使用了。php
1.在項目的action目錄下信件PublicAction.class.php。這樣寫:
代碼: 複製內容到剪貼板
class PublicAction extends Actionhtml
{安全
function login()session
{函數
$this->display();post
if(!isset($_SESSIONC('USER_AUTH_KEY'))||$_SESSIONC('USER_AUTH_KEY')==0) {ui
$this->display();this
return ;加密
}else {spa
redirect(__APP__);
}
}
function index()
{
//若是經過認證跳轉到首頁
redirect(__APP__);
}
function checkLogin()
{
// 這裏使用用戶名、密碼和狀態的方式進行認證。這裏是discuz6.1,discuz5的加密方式不同。用discuz5的話你須要修改下面這一句。
//注意!!!這裏直接把$_POST['name']和$_POST['password']放到查詢語句中是不安全的。請先進行處理!我是本身處理的,這裏沒有貼。我在找ThinkPHP中的處理函數,尚未找到。
$authInfo = RBAC::authenticate("`username`='".$_POST['name']."' AND `password` = md5(concat(md5('".$_POST['password']."'),`salt`))");
if(false === $authInfo) {
echo '登陸失敗,請檢查用戶名和密碼是否有誤!';
}else {
// 設置認證識別號
session_register(C('USER_AUTH_KEY'));
session_register('loginid');
$_SESSION[C('USER_AUTH_KEY')] = $authInfo["uid"]; // 這裏用戶表的id字段
$_SESSION["loginid"] = $authInfo["username"];// 這裏用戶表的用戶名字段
//獲取並保存用戶訪問權限列表
RBAC::saveAccessList();
dump($_SESSION);
echo strtoupper(APP_NAME)." ".strtoupper(MODULE_NAME)." ".strtoupper(ACTION_NAME);
}
}
}
2.而後在模板中新增登錄模板,路徑爲Tpl/default/Public/Login.html這裏把官方教程中的模板貼出來,省的再去找了:
代碼: 複製內容到剪貼板
<body>
<form method=post name="login" id="form1" action="__URL__/checkLogin">
<div class="tcenter hmargin">
<table id="checklist" class="login shadow" cellpadding=0 cellspacing=0 >
<tr><td height="5" colspan="2" class="toptd" ></td></tr>
<tr class="row" ><th colspan="2" class="tcenter space"> 系統管理登陸 </th></tr>
<tr><td height="5" colspan="2" class="toptd" ></td></tr>
<tr class="row" ><td colspan="2" class="tcenter"><div id="result" class="result none"></div></td></tr>
<tr class="row" ><td class="tright" width="25%">賬 號:</td><td><input type="text" class="medium bleftrequire" check="require" warning="請輸入賬號" name="name"></td></tr>
<tr class="row" ><td class="tright">密 碼:</td><td><input type="password" class="medium bleftrequire" check="require" warning="請輸入密碼" name="password"></td></tr>
<tr class="row" ><td class="tcenter" align="justify" colspan="2">
<input type="button" value="刷 新" onclick="fleshverify()" class="submit small"><input type="submit" value="登 錄" class="submit small hmargin">
<input type="reset" value="重 置" class="submit small">
</td></tr>
<tr><td height="5" colspan="2" class="bottomtd" ></td></tr>
</table>
</div>
</form>
</body>
3.在Model目錄中新增一個UserModel.class.php
代碼以下:
代碼: 複製內容到剪貼板
class UserModel extends Model
{
protected $trueTableName = 'uc_members';//這裏是ucenter的用戶表的表名。若是你在uc中修改了前綴,就把表名的uc部分修改爲本身的。
}
4.能夠了進行登陸了。就這些。昨天看ThinkPHP的文檔看了一成天。TP不是通常的強大啊。我的感受比FLEAPHP強不少。
若是你使用的是discuz5版本,因爲沒有ucenter,須要修改兩個部分。
一是 PublicAction.class.php中的
$authInfo = RBAC::authenticate("`username`='".$_POST['name']."' AND `password` = md5(concat(md5('".$_POST['password']."'),`salt`))");
二是 UserModel.class.php 中的'uc_members'改爲相應數據表。
5. 下載RBAC。
在使用中除了上面的還不夠。還要進行RBAC賦權的操做。這裏你須要下載一個官方的RBAC示例,推薦放在和你的程序平級的目錄。
6.修改RBAC
Model下的UserModel.class.php內容是下面的代碼。這個和前面的UserModel.class.php一致。能夠直接複製過來
代碼: 複製內容到剪貼板
class UserModel extends Model
{
var $trueTableName='uc_members';
}
還要修改GroupAction.class.php中的function user()
代碼以下:
代碼: 複製內容到剪貼板
function user()
{
//讀取系統的用戶列表
//如下三句請根據實際狀況進行修改
$userDao = D("User");
$list = $userDao->findAll('','uid,username');//咱們修改了這裏
$userList = $userDao->getCols($list,'uid,username');//還有這裏,其餘的不要動了。
$groupDao = D("Group");
$list = $groupDao->findAll('','id,name');
$groupList = $groupDao->getCols($list,'id,name');
$this->assign("groupList",$groupList);
//獲取當前用戶組信息
$groupId = isset($_GET['id'])?$_GET['id']:'';
$groupUserList = array();
if(!empty($groupId)) {
$this->assign("selectGroupId",$groupId);
//獲取當前組的用戶列表
$list = $groupDao->getGroupUserList($groupId);
$groupUserList = $groupDao->getCols($list,'id,id');
}
//$userList = array_diff_key($userList,$groupUserList);
$this->assign('groupUserList',$groupUserList);
$this->assign('userList',$userList);
$this->display();
return;
}
7.如今能夠進行分組操做了。