Приветствую. Использую
RBAC подход на основе laravel + фреймворк
laratrust. Роль можно выдавать различным моделям пользователей. У каждой роли у меня есть тип (просто число), определяющий, к каким моделям можно применить эту роль. Например, тип ролей "Роль пользователя" можно выдать только моделям App\User. Вопрос в следующем: мне нужно хранить некую дополнительную информацию о ролях. Причем структура этой информации зависит от типа роли. Например, в ролях с типом "Роль пользователя" мне нужно хранить еще поле "is_super_user", а в ролях с типом "Роль чата" мне нужно хранить совсем другой набор полей. Как это можно правильно сделать?
Рассматривал такие варианты:
- сделать просто поле data у роли, которое в json хранит всю информацию. Просто, но не очень красиво, нельзя будет делать всякие выборки, поиски по доп. информации, и т. д.
- сделать динамическую hasOne связь. То есть как-то так:
public function data()
{
switch ($this->role_type) {
case 1: return $this->hasOne('App\UserRoleDataModel');
case 2: return $this->hasOne('App\ChatRoleDataModel');
}
}
Минусы подхода в том, что нужно завести еще кучу моделей просто для хранения дополнительной информации о роли. Ну и вообще, чуток странновато выглядит..
Что вы можете посоветовать по этой ситуации? Буду рад услышать ваши предложения.