使用 DBManager 分配规则的 Yii2 RBAC 实现失败
Yii2 RBAC implementation using DBManager assignment rule fail
我正在尝试在我的 Yii2 高级应用程序中使用 DBManager 实现 RBAC。
我已经在多个来源中阅读了有关 RBAC 的信息,并像 https://yii2-cookbook.readthedocs.io/security-rbac/ 中那样实现了 RBAC,但它不起作用。这是我的代码。
在main.php下common/config
return [
'vendorPath' => dirname(dirname(__DIR__)) . '/vendor',
'components' => [
'cache' => [
'class' => 'yii\caching\FileCache',
],
'authManager' => [
'class' => 'yii\rbac\DbManager',
],
],
];
在 RbacController.php 下 console/controllers
namespace console\controllers;
use Yii;
use yii\console\Controller;
class RbacController extends Controller {
public function actionAssign($role, $username) {
$user = User::find()->where(['username' => $username])->one();
if (!$user) {
throw new InvalidParamException("There is no user \"$username\".");
}
$auth = Yii::$app->authManager;
$asrole = $auth->getRole($role);
if (!$asrole) {
throw new InvalidParamException("There is no role \"$role\".");
}
$auth->assign($asrole, $user->id);
}
}
迁移文件
use yii\db\Migration;
class m160616_092939_rbac_init extends Migration
{
public function up()
{
$auth = Yii::$app->authManager;
//add permission
$manageGivenTable = $auth->createPermission('manageGivenTable');
$manageGivenTable->description = 'Manage and Generate Given Table ';
$auth->add($manageGivenTable);
//add permission
$manageUsers = $auth->createPermission('manageUsers');
$manageUsers->description = 'Manage users';
$auth->add($manageUsers);
//add role. dan ngasih tahu kalau yang tergabung di sbr dapat memanage given tabel
$sbr = $auth->createRole('sbr');
$sbr->description = 'Tim SBR BPS HQ';
$auth->add($sbr);
$auth->addChild($sbr, $manageGivenTable);
//add role dan ngasih tahu kalau admin dapat memanage user dan sekaligus mewarisi sifat-sifat sbr
$admin = $auth->createRole('admin');
$admin->description = 'Web Administrator, Editor, and Developer';
$auth->add($admin);
$auth->addChild($admin, $sbr);
$auth->addChild($admin, $manageUsers);
}
然后我在关于页面中尝试了它。在控制器文件中,我添加
'actions' => ['about'],
'allow' => true,
'roles' => ['manageUsers'],
注意:可能需要此信息
- 我使用 MS SQL 服务器数据库
- The auth_item table and auth_item_child table
- 其他授权 table 为空。
- 抱歉英语不好。
你能帮帮我吗?
编辑:我已经使用类似这样的命令提示符实现了角色分配
yii rbac/assign admin adminname
以后,我想通过管理面板分配用户角色。
该角色似乎未分配。尝试添加这个
try {
$info = $auth->assign($asrole, $user->id);
VarDumper::dumpAsString("Role has been assigned ".$info);
} catch (Excpetion $e) {
VarDumper::dumpAsString("Exception:".$e);
}
在RbacController.php我加
use common\models\User;
它工作正常。
我正在尝试在我的 Yii2 高级应用程序中使用 DBManager 实现 RBAC。 我已经在多个来源中阅读了有关 RBAC 的信息,并像 https://yii2-cookbook.readthedocs.io/security-rbac/ 中那样实现了 RBAC,但它不起作用。这是我的代码。
在main.php下common/config
return [
'vendorPath' => dirname(dirname(__DIR__)) . '/vendor',
'components' => [
'cache' => [
'class' => 'yii\caching\FileCache',
],
'authManager' => [
'class' => 'yii\rbac\DbManager',
],
],
];
在 RbacController.php 下 console/controllers
namespace console\controllers;
use Yii;
use yii\console\Controller;
class RbacController extends Controller {
public function actionAssign($role, $username) {
$user = User::find()->where(['username' => $username])->one();
if (!$user) {
throw new InvalidParamException("There is no user \"$username\".");
}
$auth = Yii::$app->authManager;
$asrole = $auth->getRole($role);
if (!$asrole) {
throw new InvalidParamException("There is no role \"$role\".");
}
$auth->assign($asrole, $user->id);
}
}
迁移文件
use yii\db\Migration;
class m160616_092939_rbac_init extends Migration
{
public function up()
{
$auth = Yii::$app->authManager;
//add permission
$manageGivenTable = $auth->createPermission('manageGivenTable');
$manageGivenTable->description = 'Manage and Generate Given Table ';
$auth->add($manageGivenTable);
//add permission
$manageUsers = $auth->createPermission('manageUsers');
$manageUsers->description = 'Manage users';
$auth->add($manageUsers);
//add role. dan ngasih tahu kalau yang tergabung di sbr dapat memanage given tabel
$sbr = $auth->createRole('sbr');
$sbr->description = 'Tim SBR BPS HQ';
$auth->add($sbr);
$auth->addChild($sbr, $manageGivenTable);
//add role dan ngasih tahu kalau admin dapat memanage user dan sekaligus mewarisi sifat-sifat sbr
$admin = $auth->createRole('admin');
$admin->description = 'Web Administrator, Editor, and Developer';
$auth->add($admin);
$auth->addChild($admin, $sbr);
$auth->addChild($admin, $manageUsers);
}
然后我在关于页面中尝试了它。在控制器文件中,我添加
'actions' => ['about'],
'allow' => true,
'roles' => ['manageUsers'],
注意:可能需要此信息
- 我使用 MS SQL 服务器数据库
- The auth_item table and auth_item_child table
- 其他授权 table 为空。
- 抱歉英语不好。
你能帮帮我吗? 编辑:我已经使用类似这样的命令提示符实现了角色分配
yii rbac/assign admin adminname
以后,我想通过管理面板分配用户角色。
该角色似乎未分配。尝试添加这个
try {
$info = $auth->assign($asrole, $user->id);
VarDumper::dumpAsString("Role has been assigned ".$info);
} catch (Excpetion $e) {
VarDumper::dumpAsString("Exception:".$e);
}
在RbacController.php我加
use common\models\User;
它工作正常。