2017-05-24 10 views
1

管理者がバックエンドから登録した後でユーザーロールを割り当てる方法を探しています。私はyii2アドミニストレーターをyii2に設定しました。私はすでにデータベーステーブルにロールを設定しています。Yii2-admin RBAC:データベースからロールを取得し、サインアップ/ユーザー登録のドロップダウンリストとして表示します。

しかし、私はユーザ登録フォームのロールをドロップダウンリストとして取得したいので、管理者はロールを選択してユーザに割り当てることができます。ドロップダウンリストの役割は、管理者または同等の役割よりも低いものでなければなりません。つまり、スーパーユーザーであるsysadmin役割がある場合、管理者は割り当て後のオプションの1つとして役割を取得できませんその役割は、ユーザーが自分の役割よりも高くなることを意味します。

私はオンラインで検索しましたが、カスタマイズしようとしたYii 1.1のコードしか取得していませんが、まったく動作しません。コードは下に提供されます。フォーム上

ドロップダウンリスト:

<?php 
if (Yii::app()->user->isSuperuser) { 
     $all_roles=new RAuthItemDataProvider('roles', array( 
    'type'=>2, 
    )); 
     $data=$all_roles->fetchData(); 
?> 
    <div> 
     <label for="type_id">Type</label> 
     <?php echo CHtml::dropDownList("Type",'',CHtml::listData($data,'name','name'));? > 
    </div> 
<?php 
} 
?> 

とコントローラのコードは次のとおりです。Yii2にこれを変換する方法のアイデアを持つ

if(Yii::app()->user->isSuperuser) 
    $type=$_POST['Type']; 
else 
    $type='User'; 

$authorizer = Yii::app()->getModule("rights")->authorizer; 
$authorizer->authManager->assign($type, $model->id); 

誰ですか?手伝ってください;私はしばらくこの問題に立ち往生してきました。

ありがとうございます。私は_form

にコードの下で私のアプリでは使用し

答えて

2

を条件を変更する負荷のuser_idと、すべての名前

を取得を続行する方法についてのアイデアですこの。 、yii2管理者を設定する必要dbTablesを設定し、その

$config = [ 
    ... 
    'components' => [ 
     ... 
     'authManager' => [ 
      'class' => 'yii\rbac\DbManager', 
     ], 
    ], 
    'as access' => [ 
     'class' => 'mdm\admin\components\AccessControl', 
     'allowActions' => [ 
      'site/*', 
      //'admin/*', 
      //'gii/*', 
     ] 
    ], 
]; 

あなたは認証マネージャー・コンポーネントへのアクセス権を持っているように、あなたのconfigセクションに認証マネージャーの設定を追加しました。お使いのコントローラで

あなたは、あなたが希望ここからそう

$available_roles = Yii::$app->authManager->getRoles(); 

のように定義されているすべてのロールのリストを取得することができますので、

$current_user_roles = Yii::$app->authManager->getRolesByUser(Yii::$app->user->id); 

次のように現在のユーザーのロールを取得することができますこのユーザーが割り当てることができる役割を定義するために役割階層ロジックを適用する必要があります(このユーザーが割り当てることのできない役割のリストで終わるはずです、$forbidden_roles)。あなたは、たとえば、簡単なforeach()文で$使用可能なロール・アレイからの$ forbidden_​​rolesを削除することができ、これらの2つのリストを持っていたら:

foreach($forbidden_roles as $role){ 
    if(in_array($role,$available_role)){ 
     $index = array_search($role,$available_role); 
     \yii\helpers\ArrayHelper::remove($available_roles,$index); 
    } 
} 

は今、あなたは、ユーザーが割り当てることができる役割を持つ配列を持っています。この配列をビューに渡し、その後にドロップダウン要素を渡すと、設定する必要があります。

私は個人的にこれを試したことはありませんが、あなたのために働くかどうか教えてください。お役に立てれば。

0

あなたはここでしかクエリで

$users= ArrayHelper::map(app\models\User::find()->orderBy('username')->asArray()->all(), 'id', 'username'); 
$item= ArrayHelper::map(app\models\Authitem::find()->orderBy('name')->asArray()->all(), 'name', 'name'); 
    echo $form->field($model, 'item_name')->widget(Select2::classname(), [ 
     'data' => $item, 
     'options' => [ 
      'placeholder' => 'انتخاب کنید...', 
      ], 
     'pluginOptions' => [ 
      'allowClear' => true, 
     ], 
    ]); 
    ?> 

    <?php 
    echo $form->field($model, 'user_id')->widget(Select2::classname(), [ 
     'data' => $users, 
     'options' => [ 
      'placeholder' => 'انتخاب کنید...', 
      ], 
     'pluginOptions' => [ 
      'allowClear' => true, 
     ], 
    ]); 
    ?> 
関連する問題