ThinkPHP框架中自带权限认证类Authority.class.php。要把所有操作都加入到权限表这工作量太那啥了. 能实现仅把需要验证的操作加入权限表,如果待验证的权限在权限列表中不存在(总列表)则默认有该权限(已登录)。 虽然代码写的简单,不过还是挺实用。 ThinkPHP //
ThinkPHP框架中自带权限认证类 Authority.class.php。要把所有操作都加入到权限表这工作量太那啥了.
//获得权限$name 可以是字符串或数组或逗号分割, uid为 认证的用户id, $or 是否为or关系,为true是, name为数组,只要数组中有一个条件通过则通过,如果为false需要全部条件通过。 //最后修改功能:待验证的权限$name如果权限列表里面不存在则默认有该权限 public function getAuth($name, $uid, $relation='or') { if (!$this->_config['AUTH_ON']) return true; $authList = $this->getAuthList($uid); if (is_string($name)) { if (strpos($name, ',') !== false) { $name = explode(',', $name); } else { $name = array($name); } } //修改部分开始 foreach($name as $key=>$val){ if(!$this->isExistsRule($val)){ unset($name[$key]); } } if(count($name)==0){ return true; } //修改部分结束 $list = array(); //有权限的name foreach ($authList as $val) { if (in_array($val, $name)) $list[] = $val; } if ($relation=='or' and !empty($list)) { return true; } $diff = array_diff($name, $list); if ($relation=='and' and empty($diff)) { return true; } return false; } /** * @desc 判断数据库是否存在权限 * @param string $name RuleName */ public function isExistsRule($name){ static $rule = array(); if(!empty($rule[$name])){ return $rule[$name]; } $rule[$name] = M()->table($this->_config['AUTH_RULE'])->where(array('name'=>$name))->count(); return $rule[$name]; }