Политика Laravel для большого массива разрешений - PullRequest
0 голосов
/ 17 мая 2018

Я хочу использовать политику Laravel для авторизации большого массива пользовательских разрешений с помощью Blade.

  • Мои полномочия соответствуют модели ActionPermission, содержащей все разрешения приложений.

  • User имеет имена разрешений, к которым он обращается через сводную точку

, используя:

public function permissions(){
return $this->belongsToMany('App\ActionPermission', 'users__action_permission');
}

Так что по сути я получаю коллекциюразрешений для пользователя и вызова $user->permissions()->pluck('module_name')->toArray(); Я получу имена разрешений в виде массива.

Есть ли способ вывести массив политик через блейд в одну строку?Таким образом, в моем макете я вставлю однострочную директиву blade-сервера?

В документах Laravel они используют имя функции в качестве директивы blade-сервера, например, в политике:

public function update(User $user, Post $post)
{
    return $user->id === $post->user_id;
}

И в лезвии:

@can('update', $post)
    <!-- The Current User Can Update The Post -->
@elsecan('create', App\Post::class)
    <!-- The Current User Can Create New Post -->
@endcan

Выше не имеет значения, когда у вас есть большое количество разрешений.Что было бы лучше для выполнения большого массива разрешений?

Кстати, любой метод (не только загрузчик провайдера) приветствуется.

1 Ответ

0 голосов
/ 17 мая 2018

Доступ к модели для создания с помощью блейда может быть опасным, поскольку вы пропускаете некоторую проверку и требуете, чтобы Eloquent все правильно обрабатывал (это не будет).

Кроме того, я надеюсь, что это может объяснить то, что вы ищете:

$user = User::find($idOfUser) // retrieves an active record of User
$user->permissions // gets the record of permissions that is related to the user, believing the relationship is estabished

User::find($idOfUser)->permissions->update($data) // updates the record in permissions that is related to that user
...