【php开源代码栏目提醒】:网学会员鉴于大家对php开源代码十分关注,论文会员在此为大家搜集整理了“RBAC.class.php”一文,供大家参考学习
<?php
// +----------------------------------------------------------------------
// | ThinkPHP
// +----------------------------------------------------------------------
// | Copyright (c) 2008 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------
// $Id$
/**
+------------------------------------------------------------------------------
* 鍩轰簬瑙掕壊鐨勯獙璇佺被
+------------------------------------------------------------------------------
* @category ORG
* @package ORG
* @subpackage RBAC
* @author liu21st <liu21st@gmail.com>
* @version $Id$
+------------------------------------------------------------------------------
*/
// 閰嶇疆鏂囦欢澧炲姞璁剧疆
// USER_AUTH_ON 鏄惁闇瑕佽璇?
// USER_AUTH_TYPE 璁よ瘉绫诲瀷
// USER_AUTH_KEY 璁よ瘉璇嗗埆鍙?
// REQUIRE_AUTH_MODULE 闇瑕佽璇佹ā鍧?
// NOT_AUTH_MODULE 鏃犻渶璁よ瘉妯″潡
// USER_AUTH_GATEWAY 璁よ瘉缃戝叧
class RBAC extends Base
{
//濮旀墭韬唤璁よ瘉鏂规硶
static function authenticate($map,$model='User',$provider='')
{
//璋冪敤濮旀墭绠$悊鍣ㄨ繘琛岃韩浠借璇?
import("ORG.RBAC.ProviderManager");
if(empty($provider)) {
$provider = C('USER_AUTH_PROVIDER');
}
$authProvider = ProviderManager::getInstance($provider);
//浣跨敤缁欏畾鐨凪ap杩涜璁よ瘉
if($authProvider->authenticate($map,$model)) {
$authInfo = $authProvider->data;
return $authInfo;
}else {
//璁よ瘉澶辫触
return false;
}
}
//鐢ㄤ簬妫娴嬬敤鎴锋潈闄愮殑鏂规硶,骞朵繚瀛樺埌Session涓?
static function saveAccessList($authId=null)
{
// 濡傛灉浣跨敤鏅氭潈闄愭ā寮忥紝淇濆瓨褰撳墠鐢ㄦ埛鐨勮闂潈闄愬垪琛?
// 瀵圭鐞嗗憳寮鍙戞墍鏈夋潈闄?
if(C('USER_AUTH_TYPE') !=2 && !$_SESSION['administrator'] ) {
$_SESSION['_ACCESS_LIST'] = RBAC::getAccessList($authId);
}
return ;
}
//鍙栧緱鐢ㄦ埛鐨勬巿鏉冨垪琛?
static function getAccessList($authId=null,$type='File')
{
if(null===$authId) {
$authId = $_SESSION[C('USER_AUTH_KEY')];
}
//鑾峰彇鏉冮檺璁块棶鍒楄〃
import("ORG.RBAC.AccessDecisionManager");
$accessManager = new AccessDecisionManager();
$accessList = $accessManager->getAccessList($authId,$type);
return $accessList;
}
// 鍙栧緱妯″潡鐨勬墍灞炶褰曡闂潈闄愬垪琛?杩斿洖鏈夋潈闄愮殑璁板綍ID鏁扮粍
static function getRecordAccessList($authId=null,$module='',$type='File') {
if(null===$authId) {
$authId = $_SESSION[C('USER_AUTH_KEY')];
}
if(empty($module)) {
$module = MODULE_NAME;
}
//鑾峰彇鏉冮檺璁块棶鍒楄〃
import("ORG.RBAC.AccessDecisionManager");
$accessManager = new AccessDecisionManager();
$accessList = $accessManager->getModuleAccessList($authId,$module,$type);
return $accessList;
}
//妫鏌ュ綋鍓嶆搷浣滄槸鍚﹂渶瑕佽璇?
static function checkAccess()
{
//濡傛灉椤圭洰瑕佹眰璁よ瘉锛屽苟涓斿綋鍓嶆ā鍧楅渶瑕佽璇侊紝鍒欒繘琛屾潈闄愯璇?
if( C('USER_AUTH_ON') ){
$_module = array();
$_action = array();
if("" != C('REQUIRE_AUTH_MODULE')) {
//闇瑕佽璇佺殑妯″潡
$_module['yes'] = explode(',',strtoupper(C('REQUIRE_AUTH_MODULE')));
}elseif('' != C('NOT_AUTH_MODULE')){
//鏃犻渶璁よ瘉鐨勬ā鍧?
$_module['no'] = explode(',',strtoupper(C('NOT_AUTH_MODULE')));
}
if(!empty($_module)) {
//妫鏌ュ綋鍓嶆ā鍧楁槸鍚﹂渶瑕佽璇?
if((!empty($_module['no']) && !in_array(strtoupper(MODULE_NAME),$_module['no'])) || (!empty($_module['yes']) && in_array(strtoupper(MODULE_NAME),$_module['yes']))) {
if("" != C('REQUIRE_AUTH_ACTION')) {
//闇瑕佽璇佺殑鎿嶄綔
$_action['yes'] = explode(',',strtoupper(C('REQUIRE_AUTH_ACTION')));
}elseif('' != C('NOT_AUTH_ACTION')) {
//鏃犻渶璁よ瘉鐨勬搷浣?
$_action['no'] = explode(',',strtoupper(C('NOT_AUTH_ACTION')));
}
if(!empty($_action)) {
//妫鏌ュ綋鍓嶆搷浣滄槸鍚﹂渶瑕佽璇?
if((!empty($_action['no']) && !in_array(strtoupper(ACTION_NAME),$_action['no'