@Dipter dzięki za linki, poczytam
@adbacz tylko że w php jest dziedziczenie

i wszystkie metody są pisane tylko raz, a uprawnienia mam zapisywane w tablicy w każdej klasie osobno, czyli dla każdej klasy muszę tylko zmieniać uprawnienia jeśli mają być inne niż normalnie
prosty przykład (wersja bardzo uproszczona )
class Controller_c1 extends Controller
{
public $__ACCESS = array( '*'=>array('poziom dostępu'=>1,'kod błędu'=>1000),//uprawnienia domyślne dla wszystkich jeśli mamy poziom inny niż 1 to rzuć wyjątek o kodzie 1000
'action_f1'=>array('poziom dostępu'=>2,'kod błędu'=>1002),//uprawnienia dla metody action_f1, jeśli poziom inny niż 2 to rzuć wyjątek 1002
);
public function action_f1(){}
public function action_f2(){}
}
class Controller_c2 extends Controller_c1
{
public function action_f3(){//ta metoda zostanie wywołana jeśli mamy uprawnienia na poziomie 1
$this-> action_f2();
}
}
jedyny problem to dziedziczenie zmiennych, więc będę musiał to pewnie wydelegować do osobnej klasy.
A jeśli dobrze zrozumiałem to Twój sposób również nie rozwiąże "automatycznie" problemu przedstawionego w action_f3 - action_f3 ma inne uprawnienie niż f2 którą wywołuje
@Crozin z wynalazków wolę nie korzystać

fajne że koś robi coś w tym kierunku ale chyba jednak wolę nie ryzykować

Cytat(Crozin @ 1.08.2012, 21:43:24 )

pod żadnym pozorem kodu sprawdzającego uprawnienia nie pchaj do klasy mającej robić główne zadanie aplikacji. Wykonaj sprawdzenie wszystkich koniecznych rzeczy przed ich wywołaniem.
chyba nie do końca rozumiałem

w dużym skrócie
mam klasę nadrzędna dla wszystkich kontrolerów
abstract class Controller
{
public function before(){}
public function _access($method){}
public function after(){}
public function onError($exception){}
}
tych metod praktycznie nie muszę ruszać, zawszę robią to samo - no może za wyjątkiem onError.
i teraz aplikacja jest uruchamiana miej więcej tak(zaznaczam że jest to pseudo kod mający pokazać tylko schemat działania)
$obiekt->before();
try{
$obiekt->_access('action_nazwa_akcji');
$obiekt->action_nazwa_akcji();
}
catch(ExceptionAccess $e)
{
$obiekt->onError($e);
}
$obiekt->after();
czyli sam wyjątek jest rzucany przez klasę i przez tę samą klasę jest obsługiwany;
może dodam że wszystkie wywołania są robione na zewnątrz klasy kontrolera przy pomocy klasy ReflectionClass