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的路径
| 2010年11月25日 @ 12:23 上午
在storage中新建 runtime cache temp data logs这几个域就可以了,至于子路径由于sdk的限制无法实现^_^
| 2010年11月28日 @ 8:39 下午