2015-10-14 6 views
6

Folgendes Szenario:Verwenden Sie integrierte rbac oder bauen Sie eigene?

Ich habe eine Multi Tenant Web-Anwendung in erweiterte template Yii2' .

Diese Anwendung hat drei Portale:
- Backend
- Armaturenbrett
- Frontend

Jedes Portal seine eigene Benutzertabelle für die Authentifizierung hat.
(-frontend_user,
-dashboard_user,
-backend_user)

Frontend und Armaturenbrett mit dem Mieter der Namen am Ende erreicht, zum Beispiel:

Wenn ein Benutzer auf Armaturenbrett oder Frontend mich einzuloggen versucht müssen prüfen, ob sie ein Recht auf Anmeldung haben. Dies geschieht über Kontingenztafel (z.B .: dashboard_user_tenant)

Jetzt möchte ich eine rbac für die Dashboard-Anwendung bauen.

Aber Rollen sollten nicht auf dem Armaturenbrett Benutzer hängen aber an dashboard_user_tenant (der Kontingenztabelle), weil Rechte können in jeder Mieter Dashboard ändern.

Yii2 hat sein eigenes rbac System, aber wie ich bisher verstehe, passt es nicht auf meine Bedürfnisse.

Irgendwelche Chancen, Yii2's rbac anzupassen oder ist es besser, meine eigene kundenspezifische Lösung zu bauen? Vielleicht meine eigene Komponente?

ich meine Beschreibung hoffe genug klar ist :)

Antwort

3

Ich hatte ein ähnliches Verlangen in einem meiner Projekte, aber ich habe nicht mein eigenes voll RBAC-System erstellen, stattdessen überschrieb ich einen Weg für die Rollen des Prüfens

In meiner Benutzerkomponentenklasse, erweitere ich die \ web \ User \ yii, und auch die Dose() Funktion dieser Klasse überschreibt. Dadurch kann ich meine eigene Art der Überprüfung der entsprechenden Berechtigungen verwenden. Zum Beispiel

<?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); 
    } 
} 

In der UserPermissionManager Klasse, fragt er eine Datenbanktabelle, die voll von Berechtigungen wie ist „Benutzer: access“, „Benutzer bearbeiten“, etc

alle über einen bestimmten Benutzerebene hat Ihnen zugewiesen, die sich auf die Benutzerebene bezieht, die ich in meiner Benutzerdatenbanktabelle festgelegt habe.

die All Dose() Funktion tun muss, ist wahr oder falsch zurück, je nachdem, ob dieser Benutzer die Erlaubnis zu tun, was es ist gefragt. Sie können damit umgehen, wie Sie wirklich mögen.

Es ist ein ziemlich großes System vollständig in einem Beitrag zu erklären, aber ich hoffe, dass es etwas geholfen hat, fühlen sich frei, mich wissen zu lassen, wenn ich etwas besser erklären kann!

+0

Danke für Ihre Antwort! Ich denke, ich muss einen ähnlichen Weg gehen. Es ist eine gute Idee, die 'can'-Funktion zu überschreiben. –

+0

Keine Sorge, ich finde es wirklich nützlich, weil es können Sie festlegen, ob die Benutzer-Seiten zugreifen können, was Methode Sie wollen! Zögern Sie nicht, lassen Sie es mich wissen, wenn Sie noch etwas brauchen! – Lynch

Verwandte Themen