ThinkPHP4SAE BLOG开发之用户登录系统
ThinkPHP4SAE Blog(TBLOG) 项目已进入代码编写阶段,最先写的当然是登录系统,其实ThinkPHP2.0框架本身就拥有很不错的权限认证类RBAC,不过由于使用起来比较复杂,不太适合小型Blog系统,ThinkPHP4SAE Blog的数据库系统是基于wordpress2.9的,基于此,我设计出的登录系统流程如下图:
用户系统的权限认证是设计的重头戏,我将权限保存在access字段中,这个字段在表usermeta里,以键值对应方式存储。meta_key=access,meta_value=”index=7&posts=7&comments=7&links=7″;程序中读取access的值后,使用session _deconde()解码后保存在$_SESSION数组中,作为用户权限判定的凭据。
/***
* 设置权限认证,权限保存在usermeta表的meta_name=access下面,每个
* 用户一个,格式为ActionName1=7&ActionName=7....
* 数字权限 7 = 1+2+4
* 1=读数据权限
* 2=写数据权限
* 4=删除数据权限
* 从数据库读取权限字符串后编码成session字符串
* 最后调用session_decode生成session变量
*
* @param mixed $str
*/
public function _session_decode($str){
session_start();
$str = str_replace('&',';',$str);
$str = str_replace('=','|i:',$str);
session_decode($str.';');
return;
}
access值的结构类似于url参数格式,例如:index=7 变量名(index)代表ThinkPHP可以访问的模块(moduleName),而数值部分(7)则借鉴了linux系统的权限设计方式, linux文件权限rwx分别对应1,2,4(1+2+4=7);而这里的权限也分为3类,分别是:读取数据权限、修改数据权限(更新与新增)、删除数据权限也对应1,2,4。这个使用起来也很方便,只需在模块类(xxxAction)中设置一名为$access的私有成员变量,并在模块初始化函数_initialize()中调用,并判断它们就可以了。
protected $access = array(
'index'=>1, //操作(actionName)
'insert'=>2,
'update'=>2,
'delete'=>4,
);
/**
* 完成初始化验证工作
*
*/
function _initialize(){
$action = strtolower($this->getActionName());
if(isset($_SESSION[C('USER_AUTH_KEY')])){
if(isset($_SESSION[$action])){
$mod = $_SESSION[$action];
if(!($this->access[ACTION_NAME] && $mod)){
$this->error('没有操作权限或访问页面不存在!');
}
}
}
else{
$this->redirect('Public/login');
}
}
完整的Login代码:
求解:thinkphp4sae该怎么设置?
storage,meecache都要设置吗?
在thinkphp的那个文件里设置storage的路径
在storage中新建 runtime cache temp data logs这几个域就可以了,至于子路径由于sdk的限制无法实现^_^