Google

Kategorie

Reprezentacja Wiedzy

Kalendarz

December 2007
M T W T F S S
« Sep   Jan »
 12
3456789
10111213141516
17181920212223
24252627282930
31  

CakePHP, budowanie drzewa ACOs dla AuthComponent

December 3rd, 2007 by prond

CakePHP 1.2 udostepnia deweloperom bardzo wygodny AuthComponent. Dołączenie go w aplikacji jest na prawdę szybkie i przyjemne. Wystarczy zerknąć na następujące dwa tutoriale :

Wszystko idzie gładko aż do momentu, w którym chcemy zbudować drzewo Acos.

Zrobienie tego ręcznie odpada, dlatego napisałem krótką metodę, która buduje drzewko Acos oraz dla opcjonalnego argumentu $adminAro nadaje uprawnienia do wszystkich kontrolerów. Będzie to szczególnie przydatne przy instalacji aplikacji.

/**
 *  Builds Acos tree from current app controllers and actions:
 *  controller1
 *    |--action1
 *    |--action2
 *  controller2
 *    |--action1
 *    |--action2
 *
 */
function _buildAcosTree($adminAro = null) {
    $aco = new Aco();
	$excludedActions = array("apperror","map","action_map");
	$excludedActions = am($excludeList,get_class_methods('Controller'));
	$controllers = listClasses(APP."/controllers/");
 
	foreach ($controllers as &$controller) {
		require_once($controller);
		$controller = preg_replace('/.php/','',$controller);
		$controllerAlias = Inflector::camelize(preg_replace('/_controller/','',$controller));
		$controllerActions = array_diff(get_class_methods(Inflector::camelize($controller)), $excludedActions);
 
		if (!$aco->findByAlias($controllerAlias)) {
			$aco->create();
		    $aco->save(array('alias'=>$controllerAlias));
		}
 
		if (!empty($adminAro)) {
		    $this->Acl->allow($adminAro, $controllerAlias);
		}
 
		$parent = $aco->findByAlias($controllerAlias);
		$parentId = $parent['Aco']['id'];
 
		foreach ($controllerActions as $action) {
			if ($action{0} <> "_") {
				if (!$aco->findByAliasAndParentId($action,$parentId)) {
					$aco->create();
					$aco->save(array('parent_id'=>$parentId,'alias'=>"{$action}"));
				}
			}
		}
	}
}

Posted in CakePHP |

Leave a Comment

Please note: Comment moderation is enabled and may delay your comment. There is no need to resubmit your comment.