Разработка политики в Laravel - PullRequest
0 голосов
/ 28 августа 2018

у меня четыре стола

user(username,role_id), roles, features(features_id,features_name), feature_roles(pivot_table)

пользовательская таблица имеет role_id, а сводная таблица имеет столбцы (feature_id, role_id, can_read, can_edit, can_delete и т. Д.).

Я хочу создать политику в соответствии с ролями пользователей, чтобы проверить, какие разрешения назначены в соответствии с ролями и функциями в сводной таблице.

1 Ответ

0 голосов
/ 28 августа 2018

Определите политику для функций с именем FeaturePolicy и зарегистрируйте ее в AuthServiceProvider следующим образом:

protected $policies = [
    'App\Models\Feature' => 'App\Policies\FeaturePolicy',
];

Тогда в ваших контроллерах вы можете проверить способность следующим образом:

// $feature is some feature
$this->authorize('edit', $feature);
$this->authorize('delete', $feature);
$this->authorize('read', $feature);
// ...

Теперь пришло время определить методы edit, delete и read в классе FeaturePolicy, например, для удаления:

function delete(User $user, Feature $feature) {
    return $feature->roles()->where('id', $user->role_id)->wherePivot('can_delete', true)->exists();
}

Вы можете реализовать другие методы, просто отредактировав условие запроса, вам придется жестко их кодировать, потому что нет возможности использовать политики с параметрами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...