如何自定义Yii 2 RBAC表名


How to customize Yii 2 RBAC table names

我们是否可以更改yii 2中的RBAC表名?

我配置authManager如下,

'authManager' => [
    'class' => 'yii'rbac'DbManager',
    'assignmentTable'=> '{{%AuthAssignment}}',
    'itemChildTable'=> '{{%AuthItemChild}}',
    'itemTable'=> '{{%AuthItem}}',
    'ruleTable'=> '{{%AuthRule}}',
    'defaultRoles' => ['guest'],
],

现在我还需要知道如何自定义列名。yii默认查询到默认的列名,所以我得到了这个错误。

Column not found: 1054 Unknown column 'rule_name' in 'field list'

下面是我的表结构与yii2默认RBAC表的不同之处。

CREATE TABLE IF NOT EXISTS `AuthRule` (
  `name` varchar(64) NOT NULL,
  `data` text,
  `createdAt` int(11) DEFAULT NULL,
  `updatedAt` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE IF NOT EXISTS `AuthItemChild` (
  `parent` varchar(64) NOT NULL,
  `child` varchar(64) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE IF NOT EXISTS `AuthItem` (
  `name` varchar(64) NOT NULL,
  `type` int(11) NOT NULL,
  `description` text,
  `ruleName` varchar(64) DEFAULT NULL,
  `data` text,
  `createdAt` int(11) DEFAULT NULL,
  `updatedAt` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE IF NOT EXISTS `AuthAssignment` (
  `itemName` varchar(64) NOT NULL,
  `userId` varchar(64) NOT NULL,
  `createdAt` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

用于高级模板

在您的config/main.hp中

在组件部分

'components' => [
        'authManager' => [
        //'class' => 'yii'rbac'DbManager',
        'class' => 'vendor'yourVenderName'auth'models'DbManager',           
        'cache' => 'cache',
        //these configuratio allow to rename the auth table  
        'itemTable' => 'my_auth_item',
        'assignmentTable' => 'my_auth_assignment',
        'itemChildTable' => 'my_auth_item_child',
        'ruleTable' => 'my_auth_rule',
    ],
 ....
],

根据需要使用适当的类在这种情况下,我使用了一个供应商authmanager,但您可以使用标准的authmanager来取消对标准'class' => 'yii'rbac'DbManager',的引用,并为供应商指定一个