Yii2 の役割ベースのアクセス制御に問題があります。通常の設定では、認証ルールは現在のユーザーの ID のときに実行されます。ドキュメントに書かれているように。認可
私の場合、別のモデルのセットを使用して (基本機能は別として) 承認を設定するにはどうすればよいですか? これが私のセットアップです。
テーブルauth_assignment
[ item_name
, user_id
] は rbac 移行から、
user
[ id
] は yii2 移行から。新しいテーブルassignment
[user_id
に関連するuser
、の にrec_id
関連recognition
するorganization
] を作成しました。
これがシナリオです。私には、、、の役割がadmin
ありorganization-head
ますmember
。organization-head
またはmember
が独自の認識モジュールに属しているかどうかを確認するにはどうすればよいですか。他の組織の長からの他のモジュールではありませんか?
peixotoによるコンテキスト アクセス制御フィルターも使用しました。
これがチェック用の私のコードです。RecognitionRule は、ユーザーuser_id
の ID と等しいユーザーが存在するかどうかを確認します。とaccount_id
等しいrec_id
。2番目の条件は、彼が組織に属しているかどうかを示します
/**
* Checks if ID matches user passed via params
*/
class RecognitionRule extends Rule
{
public $name = 'isRecognition';
/**
* @param string|integer $user the user ID.
* @param Item $item the role or permission that this rule is associated with
* @param array $params parameters passed to ManagerInterface::checkAccess().
* @return boolean a value indicating whether the rule permits the role or permission it is associated with.
*/
public function execute($user, $item, $params)
{
if(isset($params['recognition'])){ //Directly specify the model you plan to use via param
$model = $params['recognition'];
}else{ //Use the controller findModel method to get the model - this is what executes via the behaviour/rules
$id = Yii::$app->request->get('id'); //Note, this is an assumption on your url structure.
$model = Yii::$app->controller->findModel($id); //Note, this only works if you change findModel to be a public function within the controller.
}
return \common\models\Assignment::find()->where(['rec_id' => $model->id, 'user_id' => $user])->exists();
}
}
それでも、私はアクションを実行することを許可されていません。手がかりはありますか?