2015-10-14 5 views
6

組み込みのrbacを使用するか、独自のビルドを行いますか?シナリオに続き

私はYii2'高度なテンプレートでマルチテナントのWebアプリケーションを持っています。 - バックエンド
- ダッシュボード
- フロントエンド

各ポータルは認証のために独自のユーザーテーブルを持ってい

このアプリケーションは、3つのポータルを持っています。
(-frontend_user、
-dashboard_user、
-backend_user)

フロントエンドとダッシュボードは、最後にテナントの名前に到達することができます。例:

ユーザーがダッシュボードやフロントエンドIにはログインしようとします彼らはログインする権利があるかどうかをチェックする必要があります。 は、この今、私はダッシュボードアプリケーションのRBACを構築したい分割表(例えば:dashboard_user_tenant)

を経由して起こります。

しかし、ダッシュボードユーザーではなく、dashboard_user_tenant(コンティンジェンシーテーブル)にあるロールは、テナントのダッシュボードで権限が変更される可能性があるので、 でハングしないようにしてください。

Yii2には独自のrbacシステムがありますが、これまでのところ理解していたように、自分のニーズに合っていません。

Yii2のrbacをカスタマイズする可能性がありますか、独自のカスタムソリューションを構築する方が良いでしょうか?多分自分のコンポーネントですか?

私は私の説明が十分に明確であると思います:)

答えて

3

私は私のプロジェクトの一つで同様の欲求を持っていたが、私は私自身の完全なRBACシステムを作成していない、代わりに私が役割をチェックする方法を上書き

私のユーザーコンポーネントクラスでは、\ yii \ web \ Userを拡張し、そのクラスのcan()関数も上書きします。これにより、自分自身で適切なパーミッションをチェックすることができます。 、「ユーザーの編集」など

彼らはすべて特定のユーザーレベルを持っている:例UserPermissionManagerクラスで

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

のために、そのような「アクセスユーザーは」などの権限の完全なデータベース・テーブルを照会しますユーザーデータベーステーブルに設定したユーザーレベルに関連するユーザーに割り当てられます。

すべてのcan()関数は、このユーザーに要求されていることを実行する権限があるかどうかによってtrueまたはfalseを返します。あなたは本当に好きですが、これを処理することができます。

1つの投稿で完全に説明するのはかなり大きなシステムですが、私はそれが少し助けられたと思っています。

+0

あなたの答えをありがとう!私も同様の方法をとらなければならないと思います。 'can'関数を上書きすることをお勧めします。 –

+0

心配する必要はありませんが、私はそれが本当に便利だと思います。なぜなら、ユーザーが望む方法でページにアクセスできるかどうかを判断できるからです!何か他のものが必要な場合は、私にお知らせください! – Lynch

関連する問題