Całości ci nie pokaże, bo bym musiał się sporo przy tym naprodukować żeby to opisać.. Generalnie musiałbyś mieć jedną klasę która by sprawdzała uprawnienia: jeżeli niezalogowany, przekierować na stronę logowania, jeżeli po zalogowaniu nadal ma nieodpowiednie uprawnienia poinformować odpowiednim komunikatem. U mnie to jest klasa Authentication, która zarówno autoryzuje użytkownika login/logout jak i w metodach prywatnych sprawdza użytkownika, co określony czas regeneruje sesje i aktualizuje "ostatnią wizytę" użytkownika w bazie danych. Jeżeli znajdę trochę więcej czasu, to mogę spróbować wrzucić te klasy, i je opisać. Tyle że to nie są jakieś osobne klasy, które bez problemu dołączyć do jakiegoś innego systemu, bo nie miałem takiego zamiaru tworząc je. Tak też może być ciężko "skopiować" moje rozwiązanie. Najbardziej uniwersalna z tego wszystkiego jest klasa użytkownika, która z podstawowymi danymi jest tworzona jako pierwsza, zaraz za nią inicjowana jest klasa Authentication, która na podstawie wcześniej inicjowanej klasy User, sprawdza kto jakie ma uprawnienia. A całość inicjuje tak:
if(Config::has('framework.default_database') && Config::has('framework.session') && Config::has('framework.users'))
{
$this->container->setService('user.manager', new UserManager($this->container->getService('database')));
$this->container->setService('user', new User());
$this->container->setService('user.auth', new Authentication($this->container));
$this->container->setService('group.manager', new GroupManager($this->container->getService('database')));
}
A klasa użytkownika, bo w sumie jest najbardziej uniwersalna wygląda tak:
https://gist.github.com/1647691 u siebie mam podział na podstawowe pola, oraz pola dodatkowe, takie które można przykładowo z poziomu panelu administratora sobie stworzyć w bazie danych

większość to są same setery/getery więc za bardzo nie ma co opisywać. Jedynie hasRole, coś tam bardziej skomplikowanego robi.
Więc inicjując klasę User, tworzę "gościa". Na tej podstawie mogę sprawdzić poprzez isUser czy faktycznie jest użytkownikiem, a następnie sprawdzić jego uprawnienia.
if($this->user->isUser())
{
if(false === $this->user->hasRole($role))
{
throw new AccessDeniedException();
}
} else
{
$this->session->set('_user_redirect_url', $this->request->getUri());
return new RedirectResponse(Config::get('framework.users.login_url', '/login'));
}
Dodatkowo w przypadku kiedy nie jest użytkownikiem, zapisuje w sesji adres na który ma wrócić po zalogowaniu, a następnie przekierowuje na stronę logowania.