Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Klasa Autoryzacji
Forum PHP.pl > Forum > PHP > Object-oriented programming
Black-Berry
Napisałem klasę do autoryzacji. Wzorowałem się trochę na Zend_Auth i artykułach z Internetu. Zastanawiam się czy czegoś przypadkiem nie przeoczyłem. Takie są moje metody z klasy:

  1. <?php
  2. //authorization
  3.    $user->authorization->addRole('banned');
  4.    $user->authorization->addRole('guest');
  5.    $user->authorization->addRole('user', 'quest'); //druga zmienna to dziedziczenie
  6.    $user->authorization->addRole('member', 'user');
  7.    $user->authorization->addRole('moderator', 'member');
  8.    $user->authorization->addRole('administrator');
  9.    //-----------------
  10.    $user->authorization->addResource('admin_menu', array('view', 'show'));
  11.    $user->authorization->addResource('admin_panel', array('view'));
  12.    $user->authorization->addResource('structure_item', array('view', 'add', 'update', 'delete')); //2 argument to tablica mozliwych akcji
  13.    $user->authorization->addResource('user_account', array('view', 'add', 'update', 'delete'));
  14.    //-----------------
  15.    $user->authorization->allow('guest', 'structure_item', 'view'); //3 zmienne oznaczaja allow dla konkretnej akcji
  16.    $user->authorization->allow('user', 'user_account', 'view');
  17.    $user->authorization->allow('user', 'admin_menu'); //2 zmienne to dostep do wszystkich akcji z zasobu
  18.    $user->authorization->deny('user', 'admin_menu', 'show');
  19.    $user->authorization->allow('member', 'admin_menu', 'show');
  20.    $user->authorization->allow('member', 'user_account', array('add', 'update')); //lista akcji 'allow' jako 3 argument
  21.    $user->authorization->allow('moderator', 'structure_item');
  22.    $user->authorization->deny('moderator', 'user_account', 'add');
  23.    $user->authorization->allow('administrator'); //1 zmienna to pelny dostep do wszystkiego
  24.    $user->authorization->deny('banned');
  25. ?>


Czy taki sposób obejmuje wszystkie mozliwe problemy jakie mogą mi się przytrafić z autoryzacją. Próbowałem już innych metod np grupami dostepowymi ale okazały się nietrafne. Nie chciałbym już do tego wracać. Czy to jest rozwiązanie 'ostateczne' ?smile.gif Zapraszam do dyskusji.
cinekz
A jaki jest sens tworzenia takiej klasy?
skowron-line
  1. <?php
  2. $user->authorization->addRole('user', 'quest'); //druga zmienna to dziedziczenie
  3. ?>


dziedziczenie questionmark.gif tzn questionmark.gif

Czy nie lepiej było by
Kod
array('view', 'add', 'update', 'delete')

zastąpić to jakimś kodem odpowiadającym za daną akcję.
Black-Berry
@cinekz Dziwne pytanie. Autoryzacja to raczej coś co się przydaje bardzo często.

@skowron-line Dodając nowego usera nie dodaję akcji. Lista możliwych akcji jest dodawana do zasobu.

Z dziedziczeniem chodzi o to że jeśli miałbys opisać jakąś rolę w języku naturalnym powiedziałbyś:
Cytat
"Użytkownik to w zasadzie to samo co gość"

  1. <?php
  2. $user->authorization->addRole('user', 'quest');
  3. ?>

Cytat
"Z tą różnicą że użytkownik ma dodatkowo pełny dostęp do newsów"

  1. <?php
  2. $user->authorization->allow('user', 'news'); // nie podaje listy akcji co oznacza ze użytkownik ma dostęp do wszystkich akcji
  3. $user->authorization->deny('user', 'news', 'delete'); //jeśli nei chce zeby użytkownik usuwał newsy, odbieram mu pojedynczą akcję
  4. ?>


Cytat
Oraz użytkownik może dodawać edytować artykuły

  1. <?php
  2. $user->authorization->allow('user', 'article', 'update');
  3. ?>
megawebmaster
Pewien sposób to jest. Chociaż chyba wolałbym zapisać co komu wolno, w jednej linijce, co by łatwiej można było zmienić. A nie myśleć co kto może biggrin.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.