Projekt Apliakcji - Optymalny Kod

Witam serdecznie.

Projektuję aplikację, która będzie zbierała informacje na temat obserwacji zwierząt i chciałbym was prosić o opinię, czy moje założenia odnośnie "projektu" aplikacji są słuszne, gdyż mam wątpliwośći czy przy takich założeniach będę mógł wdrożyć uprawnienia kontroli dostępu do obserwacji. Załóżmy, że w zwiazku z tym mam takie modele:

  1. Obserwacje(id(PK), data_obserwacji, id_gatunku_zwierzecia(FK), opis, id_wprowadzajacego)

relacje: nazwaZwierzęcia=> BelongsTo:Gatunki, id_gatunku_zwierzecia

  1. Gatunki(id(PK), nazwa_zwierzecia, id_grupy(FK))

relacje: nazwaGrupyZwierzęcia=>BelongsTo:GrupyZwierzat, id_grupy

  1. GrupyZwierzat(id, nazwa)

Dodam tylko, że np tworząc nową obserwację jako dodatkowy parametr GET jest zdefiniowany gatunek zwierzęcia, np. obserwacje/create/ssaki i na tej podstawie wczytywany jest odpowiedni formularz, gdyż widoki dla odrębnych gatunków zwierząt są różne.

Następnie chodzi mi o to, czy przy w/w założeniach - tj. w sytuacji, gdy do tworzenia obserwacji (niezależnie od gatunku zwierzęcie, zawsze wykorzystywana jest w kontrolerze ta sama akcja, która tylko wczytuje różne widoki), jej updatu (niezależnie od gatunku zwierzęcia, zawsze wykorzystywana jest w kontrolerze ta sama akcja, która tylko wczytuje różne widoki) będę mógł bez problemu zdefiniować uprawnienia dostępu do obserwacji na podstawie tego, czy dany użytkownik ma uprawnienia do przeglądania obserwacji z danego gatunku. Bez problemu mogę wdrożyć taką funkcjonalność w sytuacji, gdy każdy gatunek zwierzęcia to inny kontroler (wtedy np. definiuję Operację Ssaki.View, Ryby.View itp.) ale to byłoby powielanie kodu a tego chciałbym uniknąć.

Czy jest możliwie tak zdefiniowanie operacji/zadań/ról oraz reguł w checkAccess, aby zaimplementować w/w wymagania? Jeśli tak, to prosiłbym o jakąś wskazówkę.

Z góry dziękuję i pozdrawiam

Tomek

Cześć

W swoich projektach używam autoryzacji opartej na rolach, podczas logowania wrzucam potrzebne mi dane użytkownika do Yii::app()->user, w kontrolerze używam filtrów, dla filtra "accessControl" jest dużo możliwości konfiguracji, możesz tam użyć zasad dostępu na bazie wyrażenia http://www.yiiframework.com/doc/api/1.1/CAccessRule#expression, a w samej akcji sprawdzać "chcekAccess", dodatkowo możesz przecież napisać swój filtr, obsługuję tak np. listy kontrolne gdzie daną listę tworzy kilku użytkowników, ale każdy z osobna może zarządzać (crud) tylko swoją pozycją "coś podobnego do twoich obserwacji". Mam np. wielu użytkowników z identyczną rolą, ale każdy pracuje nad listą w różnych lokalizacjach, w tym przypadku każdy użytkownik ma dodatkowy parametr z tą właśnie lokalizacją, który używam do pobierania danych z bazy. Do kontrolera przesyłam id listy, a następnie dodaję lokalizację i jeżeli mam wynik to znaczy że lista należy do niego i nie muszę tutaj używać dodatkowych regół w autoryzacji mam tylko filtr na to czy użytkownik może wykonać akcję, resztę sprawdzam w funkcji getLista($idListy) jeżeli mam wynik z bazy jest ok, jak nie przekierowuję użytkownika na stronę błędu.

Myślę więc, że dasz radę, pamiętaj tylko, że lepiej poświęcić więcej czasu nad samym projektem, dobrze sobie wszystko przemyśleć, niż potem przerabiać cały kod jak się napotka na problem.

chcesz pogadać pisz na priv, pomogę Ci w miarę możliwości.

Grzegorz