[Fusionforge-commits] r9874 - trunk/gforge/common/include

Roland Mas lolando at libremir.placard.fr.eu.org
Fri May 21 14:26:25 CEST 2010


Author: lolando
Date: 2010-05-21 14:26:25 +0200 (Fri, 21 May 2010)
New Revision: 9874

Modified:
   trunk/gforge/common/include/RBAC.php
   trunk/gforge/common/include/Role.class.php
Log:
Implemented BaseRole::getSetting()

Modified: trunk/gforge/common/include/RBAC.php
===================================================================
--- trunk/gforge/common/include/RBAC.php	2010-05-21 12:22:54 UTC (rev 9873)
+++ trunk/gforge/common/include/RBAC.php	2010-05-21 12:26:25 UTC (rev 9874)
@@ -448,8 +448,8 @@
 		return $result ;
 	}
 
-        function hasPermission($section, $reference, $action = NULL) {
-		$result = false ;
+        function getSetting($section, $reference) {
+		$result = 0 ;
                 if (isset ($this->perms_array[$section][$reference])) {
 			$value = $this->perms_array[$section][$reference] ;
 		} else {
@@ -460,151 +460,214 @@
 		
 		switch ($section) {
 		case 'forge_admin':
-			if ($value == 1) {
-				return true ;
-			}
+			return $value ;
 			break ;
 			
 		case 'forge_read':
 		case 'approve_projects':
 		case 'approve_news':
-			if (($value == 1)
-			    || $this->hasGlobalPermission('forge_admin')) {
-				return true ;
+			if ($this->hasGlobalPermission('forge_admin')) {
+				return 1 ;
 			}
-		break ;
+			return $value ;
+			break ;
 		
 		case 'forge_stats':
-			switch ($action) {
-			case 'read':
-				$min = 1 ;
-				break ;
-			case 'admin':
-				$min = 2 ;
-				break ;
+			if ($this->hasGlobalPermission('forge_admin')) {
+				return 2 ;
 			}
-			if (($value >= $min)
-			    || $this->hasGlobalPermission('forge_admin')) {
-				return true ;
-			}
-		break ;
+			return $value ;
+			break ;
 		
 		case 'project_admin':
-			if (($value == 1)
-			    || $this->hasGlobalPermission('forge_admin')) {
-				return true ;
+			if ($this->hasGlobalPermission('forge_admin')) {
+				return 1 ;
 			}
+			return $value ;
 			break ;
 			
 		case 'project_read':
 		case 'tracker_admin':
 		case 'pm_admin':
 		case 'forum_admin':
-			if (($value == 1)
-			    || $this->hasPermission ('project_admin', $reference)) {
-				return true ;
+			if ($this->hasPermission('project_admin', $reference)) {
+				return 1 ;
 			}
-		break ;
+			return $value ;
+			break ;
 		
 		case 'scm':
+			if ($this->hasPermission('project_admin', $reference)) {
+				return 2 ;
+			}
+			return $value ;
+			break ;
+			
+		case 'docman':
+			if ($this->hasPermission('project_admin', $reference)) {
+				return 4 ;
+			}
+			return $value ;
+			break ;
+			
+		case 'frs':
+			if ($this->hasPermission('project_admin', $reference)) {
+				return 3 ;
+			}
+			return $value ;
+			break ;
+			
+		case 'forum':
+			$o = forum_get_object ($reference) ;
+			if ($o && !$o->isError()
+			    $this->hasPermission('forum_admin', $o->Group->getID())) {
+				return 4 ;
+			}
+			return $value ;
+			break ;
+		case 'new_forum':
+			if ($this->hasPermission('forum_admin', $reference)) {
+				return 4 ;
+			}
+			return $value ;
+			break ;
+			
+		case 'tracker':
+			$o = artifactType_get_object ($reference) ;
+			if ($o && !$o->isError()
+			    $this->hasPermission('tracker_admin', $o->Group->getID())) {
+				return 7 ;
+			}
+			return $value ;
+			break ;
+		case 'new_tracker':
+			if ($this->hasPermission('tracker_admin', $reference)) {
+				return 7 ;
+			}
+			return $value ;
+			break ;
+
+		case 'pm':
+			$o = projectgroup_get_object ($reference) ;
+			if ($o && !$o->isError()
+			    && $this->hasPermission('pm_admin', $o->Group->getID())) {
+				return 7 ;
+			}
+			return $value ;
+			break ;
+		case 'new_pm':
+			if ($this->hasPermission('pm_admin', $reference)) {
+				return 7 ;
+			}
+			return $value ;
+			break ;
+		}
+	}
+
+        function hasPermission($section, $reference, $action = NULL) {
+		$result = false ;
+		
+		$value = $this->getSetting ($section, $reference) ;
+		$min = PHP_INT_MAX ;
+		$mask = 0 ;
+		
+		switch ($section) {
+		case 'forge_admin':
+		case 'forge_read':
+		case 'approve_projects':
+		case 'approve_news':
+		case 'project_admin':
+		case 'project_read':
+		case 'tracker_admin':
+		case 'pm_admin':
+		case 'forum_admin':
+			return ($value >= 1) ;
+			break ;
+		
+		case 'forge_stats':
 			switch ($action) {
 			case 'read':
-				$min = 1 ;
+				return ($value >= 1) ;
 				break ;
+			case 'admin':
+				return ($value >= 2) ;
+				break ;
+			}
+			break ;
+			
+		case 'scm':
+			switch ($action) {
+			case 'read':
+				return ($value >= 1) ;
+				break ;
 			case 'write':
-				$min = 2 ;
+				return ($value >= 2) ;
 				break ;
 			}
-			if (($value >= $min)
-			    || $this->hasPermission ('project_admin', $reference)) {
-				return true ;
-			}
 			break ;
 			
 		case 'docman':
 			switch ($action) {
 			case 'read':
-				$min = 1 ;
+				return ($value >= 1) ;
 				break ;
 			case 'submit':
-				$min = 2 ;
+				return ($value >= 2) ;
 				break ;
 			case 'approve':
-				$min = 3 ;
+				return ($value >= 3) ;
 				break ;
 			case 'admin':
-				$min = 4 ;
+				return ($value >= 4) ;
 				break ;
 			}
-			if (($value >= $min)
-			    || $this->hasPermission ('project_admin', $reference)) {
-				return true ;
-			}
 			break ;
 			
 		case 'frs':
 			switch ($action) {
 			case 'read_public':
-				$min = 1 ;
+				return ($value >= 1) ;
 				break ;
 			case 'read_private':
-				$min = 2 ;
+				return ($value >= 2) ;
 				break ;
 			case 'write':
-				$min = 3 ;
+				return ($value >= 3) ;
 				break ;
 			}
-			if (($value >= $min)
-			    || $this->hasPermission ('project_admin', $reference)) {
-				return true ;
-			}
 			break ;
 			
 		case 'forum':
 		case 'new_forum':
 			switch ($action) {
 			case 'read':
-				$min = 1 ;
+				return ($value >= 1) ;
 				break ;
 			case 'post':
-				$min = 2 ;
+				return ($value >= 2) ;
 				break ;
 			case 'unmoderated_post':
-				$min = 3 ;
+				return ($value >= 3) ;
 				break ;
 			case 'moderate':
-				$min = 4 ;
+				return ($value >= 4) ;
 				break ;
 			}
-			if (($value >= $min)
-			    || $this->hasPermission ('forum_admin', $reference)) {
-				return true ;
-			}
 			break ;
 			
 		case 'tracker':
 		case 'new_tracker':
 			switch ($action) {
 			case 'read':
-				$mask = 1 ;
+				return (($value & 1) != 0) ;
 				break ;
 			case 'tech':
-				$mask = 2 ;
+				return (($value & 2) != 0) ;
 				break ;
 			case 'manager':
-				$mask = 4 ;
+				return (($value & 4) != 0) ;
 				break ;
 			}
-			$o = artifactType_get_object ($reference) ;
-			if (!$o or $o->isError()) {
-				return false ;
-			}
-
-			if (($value & $mask)
-			    || $this->hasPermission ('tracker_admin', $o->Group->getID())
-			    || $this->hasPermission ('project_admin', $o->Group->getID())) {
-				return true ;
-			}
 			break ;
 
 		case 'pm':
@@ -620,16 +683,6 @@
 				$mask = 4 ;
 				break ;
 			}
-			$o = projectgroup_get_object ($reference) ;
-			if (!$o or $o->isError()) {
-				return false ;
-			}
-
-			if (($value & $mask)
-			    || $this->hasPermission ('pm_admin', $o->Group->getID())
-			    || $this->hasPermission ('project_admin', $o->Group->getID())) {
-				return true ;
-			}
 			break ;
 		}
 	}

Modified: trunk/gforge/common/include/Role.class.php
===================================================================
--- trunk/gforge/common/include/Role.class.php	2010-05-21 12:22:54 UTC (rev 9873)
+++ trunk/gforge/common/include/Role.class.php	2010-05-21 12:26:25 UTC (rev 9874)
@@ -503,11 +503,7 @@
 			$ref_id=0;
 		}
 		if (USE_PFO_RBAC) {
-			if (array_key_exists ($section, $this->perms_array)) {
-				return $this->perms_array[$section][$ref_id];
-			} else {
-				return 0 ;
-			}
+			return $this->getSetting ($section, $ref_id) ;
 		} else {
 			if (array_key_exists ($section, $this->setting_array)) {
 				return $this->setting_array[$section][$ref_id];




More information about the Fusionforge-commits mailing list