2015-10-14 9 views
6

Następujący scenariusz:Używaj wbudowanego rbaca lub buduj własne?

Mam aplikację internetową dla wielu najemców w Yii2 ' zaawansowany szablon.

Aplikacja ta posiada trzy portale:
- backend
- Pulpit
- frontend

Każdy portal ma swój własny stół do uwierzytelniania użytkownika.
(-frontend_user,
-dashboard_user,
-backend_user)

Frontend i deski rozdzielczej można dojechać z nazwy najemcy na końcu, np:

Gdy użytkownik próbuje się zalogować do panelu lub nakładka I muszą sprawdzić, czy mają prawo do logowania. to nastąpić poprzez nieprzewidziane tabeli (np .: dashboard_user_tenant)

Teraz chcę zbudować RBAC dla aplikacji Dashboard.

Role nie powinny się jednak zawieszać u użytkownika deski rozdzielczej, ale pod dashboard_user_tenant (tabela kontyngencji), , ponieważ prawa mogą zmieniać się w panelu każdego dzierżawcy.

Yii2 ma własny system rbac, ale jak rozumiem, nie pasuje on do moich potrzeb.

Jakieś szanse na dostosowanie rbac Yii2 lub czy lepiej jest zbudować własne niestandardowe rozwiązanie? Może mój własny komponent?

Mam nadzieję, że opis jest wystarczająco jasne :)

Odpowiedz

3

miałem podobną chęć w jednym z moich projektów, ale nie tworzyć własne pełnego systemu RBAC, zamiast ja nadpisałeś sposób sprawdzania ról

W mojej klasie komponentów użytkownika rozszerzam \ yii \ web \ User, a także zastępuję funkcję can() tej klasy. To pozwala mi używać mojego własnego sposobu sprawdzania odpowiednich uprawnień. Na przykład

<?php 

namespace app\modules\users\models; 

use Yii; 
use yii\web\User as WebUser; 

use app\modules\users\models\UserPermissionManager; 

class User extends WebUser 
{ 
    public function can($operation, $params = [], $allowCaching = true) 
    { 
     if(Yii::$app->user->isGuest) 
     { 
      return false; 
     } 

     return (new UserPermissionManager())->has($operation); 
    } 
} 

W klasie UserPermissionManager, wysyła zapytanie do tabeli bazy danych, która jest pełna uprawnienia takie jak „users: dostęp”, „użytkownicy: edit”, itd

Oni wszyscy mają pewien poziom obsługi przypisane do nich, co odnosi się do poziomu użytkownika, który ustawiłem w mojej tabeli bazy danych użytkowników.

Należy wykonać funkcję can(), która zwraca wartość true lub false, w zależności od tego, czy użytkownik ma uprawnienia do wykonania żądanej czynności. Możesz sobie z tym poradzić, jakkolwiek naprawdę chcesz.

To całkiem spory system do pełnego wyjaśnienia w jednym poście, ale mam nadzieję, że trochę pomógł, proszę dać mi znać, czy mogę coś lepiej wyjaśnić!

+0

Dzięki za odpowiedź! Myślę, że muszę iść w podobny sposób. Dobrym pomysłem jest nadpisanie funkcji "can'". –

+0

Bez obaw, uważam, że jest to bardzo przydatne, ponieważ pozwala określić, czy użytkownicy mają dostęp do stron przy użyciu dowolnej metody! Jeśli chcesz coś jeszcze, daj mi znać! – Lynch