Wprowadzam kontrolę dostępu do witryny intranetowej. Co byłoby łatwe, gdyby firma nie miała ponad 200 pracowników i niestandardowych uprawnień dla prawie każdego. To szaleństwo, wiem, ale nie mogę tego zmienić.Czy istnieje proste ogólne wdrożenie kontroli dostępu opartej na regułach?
Tak więc, próbowałem znaleźć ogólną implementację, która spełniłaby moje potrzeby, ale nie mogła go znaleźć, więc poszedłem zrobić to sam. W końcu wymyśliłem dość ogólne rozwiązanie, które pozwoliło mi pomyśleć: ktoś musiał to zrobić wcześniej!
Nazwałem to ZATRZYMANIE (Subject Object Object Permission) Kontrola dostępu. Mam następującą zależność:
.-------. .-----------. .-------.
| users |1---*| STOPRules |*---1| tasks |
`-------' '-----------' '-------'
przystanku reguła ma następujące atrybuty
STOPRule {
Subject;
Task;
ObjectType;
Permission;
Relation;
}
Przedmiotem relacja może być: właściciel, twórca, revisor, itd. To pole nie jest wymagane, aby wspierać ogólne zadania. Kiedy tam jest, relacja między bieżącym użytkownikiem a instancją obiektu jest obliczana przez delegata. Bieżąca relacja jest następnie porównywana z wymaganą relacją reguły, aby umożliwić lub zabronić dostępu.
Daj mi znać, jeśli nie jestem wystarczająco jasny.
pojawiają się dwie kwestie:
Czy istnieje implementacja open source jak ten?
Czy widzisz jakieś problemy, które napotkałabym podążając tą ścieżką?
EDIT: poszedł do przodu i faktycznie zaczął realizować ten model. Pierwszy problem polegał na tym, że potrzebowałem relacji między podmiotem a przedmiotem, aby wesprzeć każdy przypadek użycia. Teraz mogę zapisać następującą regułę:
John (z zastrzeżeniem) może (zezwolenie) edit (zadanie) zamówienie (object) jeżeli osoba jest twórca (relacja) z zamówienie.
Proszę, czy możecie przedstawić REALISTYCZNĄ przypadek użycia, którego nie można wyrazić za pomocą tego modelu?
+1 dla atmosfery "przestrzeni biurowej" - prawdopodobnie wszystkie wypełniają również raporty TPS. – JonH
Czy, na marginesie projektu twojego modelu, kontrola dostępu oparta na rolach (http://en.wikipedia.org/wiki/Role-based_access_control) brzmi, jakby pasowała do modelu? Twój tytuł był tak blisko, że zastanawiałem się, czy to właśnie miałeś na myśli. –
@Ninefingers nie, niestety nie jest. rOle oparte na AC i RUle AC mają ten sam akronim, ale są różne i miałem na myśli drugi. W przypadku AC opartego na regułach, zasady dostępu są zdefiniowane w obiekcie (lub zasobie), który ma być zabezpieczony (mówiąc z operacyjnego widoku systemu), dostosowując go do sieci. Najbliższym, co widziałem jest Zend_Acl, implementacja ACL w Zend ramy, ale oczekuje, że załaduję wszystkie uprawnienia, ponieważ jest to rOne, a nie oparte na rUle, zakłada, że będzie to o wiele mniej reguł uprawnień. – svallory