| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238 | <?phpnamespace Cas\Module;use KIF\Verify;use KIF\Core\Config;use Cas\Dao\KifResourceManage;use Cas\Dao\BackUser;/** * Permission 权限管理系统 * @author li.shuming@kimiss.com */class Permission {		/**	 * 新版 获取 Permission 资源树数据	 * @param Boolean $open 资源树是否打开,默认 true 打开,false 关闭	 * @return array(	 * 		'resource' = array(//所有资源树	 * 			'id'	=> '', //资源id	 * 			'pId'	=> '', //资源父级id	 * 			'name'	=> '', //资源描述	 * 			'isParent'	=> '', //是否目录,既控制器	 * 			'open'	=> '', //目录是否打开	 * 		), 	 * 		'disableNodes'	=> array(), //当前用户没有权限的资源id集	 * );	 */	public function getResourceTreeNew($open = true) {		$objKifResourceManage = new KifResourceManage();				$resource = $disableTreeIds = array();				$resources = $objKifResourceManage->getsAll('create_time asc');		foreach ($resources as $tmpResource) {			$tree_id = $tmpResource['id'];			$parent_id = $tmpResource['parent_id'];			$isParent = $tmpResource['is_end'] ? false : true;			//$open = $parent_id ? false : true;			$chkDisabled = $parent_id ? false : true;						$resource[] = array( //app节点				'id'	=> $tree_id,				'pId'	=> $parent_id,				'name'	=> $tmpResource['name'],				'isParent'	=> $isParent,				'open'	=> $open,				'chkDisabled'	=> $chkDisabled,			);						if (!$this->checkLoginUserCpt($tmpResource['app_name'], $tmpResource['control_name'], $tmpResource['action_name'])) {				$disableTreeIds[] = $tree_id;			}		}				return array(			'resource' => $resource, //资源树			'disableTreeIds' => $disableTreeIds, //当前用户没有权限操作的节点		);	}		/**	 * 检查当前登陆对指定资源是否有权限	 * @param string $app_name	 * @param string $control_name	 * @param string $action_name	 * @return boolean	 */	public function checkLoginUserCpt($app_name, $control_name, $action_name) {		# 超级管理员啥权限都有		if (self::isSuperadmin()) {			return true;		}				# 获取当前用户所有权限		$objKifUsergroupRelation = new \Cas\Dao\KifUsergroupRelation();		$objKifUsergroupPermission = new \Cas\Dao\KifUsergroupPermission();				$groupids = $objKifUsergroupRelation->getsGroupids(\KIf\Core\BKController::getUid());		$groupCompetences = $objKifUsergroupPermission->getsCompetencesByGroupids($groupids);				foreach ($groupCompetences as $tmpCpt) {			$tmpAppName = $tmpCpt['app_name'];			$tmpControlName = $tmpCpt['control_name'];			$tmpActionName = $tmpCpt['action_name'];						# 对action拥有权限			if ($tmpAppName && $tmpControlName && $tmpActionName) {				if ($tmpAppName == $app_name && $tmpControlName == $control_name && $tmpActionName == $action_name) {					return true;				}			}						# 对control拥有权限			if ($tmpAppName && $tmpControlName && $tmpActionName == '') {				if ($tmpAppName == $app_name && $tmpControlName == $control_name) {					return true;				}			}						# 对app拥有权限			if ($tmpAppName && $tmpControlName == '' && $tmpActionName == '') {				if ($tmpAppName == $app_name) {					return true;				}			}		}				return false;	}		/**      * 通过用户名查询用户信息     * @param string $username     * @return array     */    public function getUserByUsername($username) {        if (!$username) {            return array();        }               $member = array();    		$objBackUser = new BackUser();		$member = $objBackUser->fetchOne(array('name' => $username));		if ($member) {			$member['username'] = $member['name'];		}              return $member;    }		/**	 * 通过用户id获取用户信息	 * @param int $uid	 * @return array	 */	public function getUserByUid($uid) {		$members = $this->getsUserByUids(array($uid));		if (!$members) {			return array();		}				return array_pop($members);	}		/**     * 批量获取用户信息     * @param array $uids     * @return multitype:|array     */    public function getsUserByUids($uids) {        if (!$uids) {            return array();        }        $members = array();            $objBackUser = new BackUser();            $members = $objBackUser->findBy(array('uid' => $uids), 'uid');            foreach ($members as $tmpkey => $tmpval) {                $members[$tmpkey]['username'] = $tmpval['name'];            }        return $members;    }		/**	 * 当前用户是否超级管理员	 * @return boolean	 */	static public function isSuperadmin() {				$objBackUser = new BackUser();		$user = $objBackUser->get(\KIF\Core\BKController::getUid());		if ($user['permission'] == 'admin') {			return true;		}				return false;	}		/**	 * 获取超级管理员uid集	 * @return array	 */	static public function getSuperadminUids() {		$config = Config::getInstance()->current();		return isset($config['superadmin']) ? $config['superadmin'] : array();	}		/**	 * 获取指定用户所属组	 * @param  $uid	 */	public function getsGroupidsByUid($uid) {		if (!Verify::unsignedInt($uid)) {			return array();		}				$objKifUsergroupRelation = new \Cas\Dao\KifUsergroupRelation();		$result = $objKifUsergroupRelation->findBy(array('uid' => $uid), null, null, 'groupid', 'id asc');		if (!$result) {			return array();		}				$groupids = array();		foreach ($result as $tmpval) {			$groupids[] = $tmpval['groupid'];		}				return array_unique($groupids);	}		/**	 * 获取指定用户可管理的用户组	 * @param int $uid	 */	public function allowsMangeGroupids($uid) {		# 如果是登陆用户是超管,返回所有用户组		if (in_array($uid, self::getSuperadminUids())) {			$objKifUsergroup = new \Cas\Dao\KifUsergroup();			return $objKifUsergroup->getsIdsAll('id asc');		}				$groupids = $this->getsGroupidsByUid($uid);				# 可管理的组		$manageGroupids = array();		$objKifUsergroupManage = new \Cas\Dao\KifUsergroupManage();		$usergroupManages = $objKifUsergroupManage->findBy(array('groupid' => $groupids));		foreach ($usergroupManages as $tmpManage) {			$manageGroupids[] = $tmpManage['rid'];		}				return array_unique(array_merge($groupids, $manageGroupids));	}}
 |