- чтобы добавлять, извлекать роли (например), нужно ли создавать модель Ролей или возможно есть другие способы (например всё через authManager)?
- если создавать модель ролей наследуя её от ActiveRecord и привязывая к табличке items, например так:
Код: Выделить всё
<?php
namespace backend\models;
use Yii;
/**
* This is the model class for table "auth_item".
*
* @property string $name
* @property integer $type
* @property string $description
* @property string $rule_name
* @property string $data
* @property integer $created_at
* @property integer $updated_at
*
* @property AuthAssignment[] $authAssignments
* @property AuthRule $ruleName
* @property AuthItemChild[] $authItemChildren
*/
class Role extends \yii\db\ActiveRecord
{
/**
* @inheritdoc
*/
public static function tableName()
{
return '{{%auth_item%}}';
}
/**
* @inheritdoc
*/
public function rules()
{
return [
[['name'], 'required'],
[['type', 'created_at', 'updated_at'], 'integer'],
[['description', 'data'], 'string'],
[['name', 'rule_name'], 'string', 'max' => 64]
];
}
/**
* @inheritdoc
*/
public function attributeLabels()
{
return [
'name' => Yii::t('backend', 'Name'),
// 'type' => Yii::t('backend', 'Type'),
'description' => Yii::t('backend', 'Description'),
'rule_name' => Yii::t('backend', 'Rule Name'),
'data' => Yii::t('backend', 'Data'),
'created_at' => Yii::t('backend', 'Created At'),
'updated_at' => Yii::t('backend', 'Updated At'),
];
}
/**
* @return \yii\db\ActiveQuery
*/
public function getAuthAssignments()
{
return $this->hasMany(AuthAssignment::className(), ['item_name' => 'name']);
}
/**
* @return \yii\db\ActiveQuery
*/
public function getRuleName()
{
return $this->hasOne(AuthRule::className(), ['name' => 'rule_name']);
}
/**
* @return \yii\db\ActiveQuery
*/
public function getAuthItemChildren()
{
return $this->hasMany(AuthItemChild::className(), ['child' => 'name']);
}
}
- есть ли хорошее решение для rbac, которое упрощает жизнь?
PS: еще очень интересует вопрос : зачем нужно было совмещать в одной таблицы Permissions и Roles и делать поле type. Не легче было создать 2 отдельных таблицы? Во-первых по логике кажется правильнее, во-вторых меньше условий было бы в контроллерах на проверку типов.