управление уровнем доступа laravel (пользовательский массив разрешений основывается на отношениях) - PullRequest
0 голосов
/ 23 февраля 2019

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

Я определяю свои отношения с базой данных следующим образом:

userModel.php

public function roles()
{
    return $this->belongsToMany('App\Models\RoleModel', 'role_member', 'user_id', 'role_id');
}

roleModel.php

public function permissions(){
    return $this->belongsToMany('App\Models\PermissionModel' , 'role_permission' , 'role_id' , 'permission_id');
}

У меня должно быть промежуточное программное обеспечение для передачи разрешения и принятия решения об отказе или доступе на основе запрашиваемого маршрута или представления.Любая идея иметь массив разрешений Auth::user и отклонять дублирующееся значение, или любая идея сделать это лучше?

1 Ответ

0 голосов
/ 23 февраля 2019

наконец я делаю это, думаю, все в порядке.какие-нибудь лучшие решения?

public function permissions()
{
    $user_permissions = [];
    foreach ($this->roles as $role){
        foreach ($role->permissions as $permission)
        {
            array_push($user_permissions , $permission->permission);
        }
    }
    $user_permissions = array_unique($user_permissions);
    return $user_permissions;
}

Это промежуточное ПО, которое я использую для проверки уровня доступа пользователя.

public function handle($request, Closure $next , $param)
{
    $user_permissions = Auth::user()->permissions();
    if (in_array($param , $user_permissions))
        return $next($request);
    return abort(403);
}

теперь определяйте промежуточное ПО как AccessLevel промежуточное ПО, используйте его везде, например, маршрутыи отправьте параметр следующим образом.Route::post('create_new_profile', 'AdminProfileController@create', ['middleware' => 'AccessLevel:create_new_profile']);

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