2012-03-07 24 views
10

W mojej aplikacji Yii chcę, aby moja hierarchia autoryzacji i reguły biznesowe były napisane w kodzie i chcę, aby moi użytkownicy, role i uprawnienia były przechowywane w bazie danych. Oddziela to moją logikę biznesową (która powinna być kodem) od informacji, których powinna używać (które powinny być danymi). Wygląda na to, że Yii tego nie popiera.Jaki jest powód posiadania reguł autoryzacji w bazie danych?

W Yii istnieje możliwość umieszczenia logiki biznesowej w plikach (CPhpAuthManager) lub w bazie danych (CdbAuthManager). Tak czy inaczej, traktujesz swoją logikę biznesową jako dane; Yii pobierze logikę biznesową w postaci ciągów, a następnie uruchomi ją za pomocą eval, co wydaje się okropnym sposobem.

Jaki jest tego powód?

Jak mogę osiągnąć pożądany rezultat?

Odpowiedz

2

Możesz umieścić dowolną logikę w swoim kodzie PHP dla swojej logiki biznesowej. Yii obsługuje wiele sposobów dodawania tej logiki, np. LoginForm.php, UserIdentity.php, SiteController.php, ... nie jesteś tutaj ograniczony.

Co obsługuje także Yii to dodanie fragmentu logiki do RBAC. Typowym przypadkiem jest to, że domyślnie przypisujesz dwie reguły "Uwierzytelnione" i "Gość" wszystkim użytkownikom witryny, ale w bizRules. Podczas „przysięgłe” ma bizRule jak

return !Yii::app()->user->isGuest; 

„gość” ma

return Yii::app()->user->isGuest; 

Efektem jest to, że Twój zalogowanych użytkowników nie są już „gości”, ale „przysięgłe”. Innym przykładem może być edycja widoków profili użytkowników, które są edytowalne tylko przez bieżącego użytkownika, jak

return $model->id === Yii::app()->user->id; 
+0

Czy możesz wyjaśnić to lepiej? Dlaczego bizRules powinien znajdować się w bazie danych, dlaczego nie ustawić ich w swoim kodzie? –

+0

Jak wspomniano powyżej ... możesz przenieść swoją logikę do kodu PHP, powyższe scenariusze opisują przypadek użycia z przypisanymi masami rolami (lub zadaniami lub operacjami). Jeśli checkAccess() taki element, jak "CanEditOwnPost", musisz sprawdzić, czy * bieżący * wpis należy do użytkownika, nie można tego zrobić za pomocą "statycznego" wpisu. Dokonaj sprawdzenia w kodzie PHP i przypisz element następnie ... lub dodaj bizRule do swojej bazy danych, która robi to za ciebie. – schmunk

+0

To nadal nie ma sensu, ponieważ kod w bazie danych został eval'd. Byłoby lepiej, gdyby to był kontroler czy coś takiego. –

1

Dlaczego chcesz umieścić coś w bazie danych vs kodu?

Jednym z ważnych powodów jest to, że osoby niebędące programistami mogą je edytować.

W naszej aplikacji zezwalamy użytkownikom na zarządzanie swoimi uprawnieniami na własnych użytkownikach i przedmiotach.

Nie musisz używać reguł biznesowych rii firmy yii. Można zezwolić na powiedzenie kilku różnych ról i zadań, a resztę logiki uwierzytelniania zapisać w kodzie.

+1

Pomysł, że kod edycji, który nie jest przeznaczony dla programistów, nie ma większego sensu jako argumentu. – hakre

Powiązane problemy