Как проверить, залогинен ли пользователь является admin или user? - PullRequest
0 голосов
/ 24 октября 2018

как проверить, вошел ли пользователь в систему как admin или user, в режиме multi-auth.

Наш контроллер подобен этому

Route::group(['middleware' => ['auth:admin'],'prefix' => 'admin', function() {
  Route::resource('user', 'Admin\UserController', ['only' => ['index', 
  'create', 'edit', 'show', 'store', 'update', 'destroy'], 'as' => 
  'admin']);
});

Route::group(['middleware' => ['auth:user'], 'prefix' => 'user', function() {
  Route::resource('user', 'User\UserController', ['only' => ['edit', 
  'show', 'update'], 'as' => 'admin']);
});

мы хотим объединить блейд-профиль пользователя между admin и user,Я хочу получить роль, подобную ['auth: admin'] в контроллере маршрутов.

(Лучше не создавать новый метод в модели User / Admin.)

У вас есть что-нибудь решение?

Мы используем laravel5.5

Ответы [ 4 ]

0 голосов
/ 24 октября 2018

Поскольку вы изменили свой вопрос, я приведу его в качестве отдельного ответа:

Я бы настоятельно рекомендовал вам не делать этого.Непосредственная проверка ролей пользователя почти никогда не является идеальным решением :

Вообще говоря, вам не нужно проверять роли напрямую.Лучше разрешить роли определенные способности, чем проверять эти способности.Если то, что вам нужно, очень общее, вы можете создать очень широкие способности.Например, способность access-dashboard всегда лучше, чем прямая проверка на роли admin или editor.

Если вы будете следовать этому совету, вы можете использовать промежуточное ПО can Laravel для этого:

Route::middleware('can:access-dashboard')->group(function () {
    //
});

Чтобы ответить на ваш вопрос напрямую:

  1. Создайте новый класс промежуточного программного обеспечения PHP на app/Http/Middleware/HasRole.php и вставьте его туда:

    namespace App\Http\Middleware;
    
    use Closure;
    
    class HasRole
    {
        public function handle($request, Closure $next, $role)
        {
            if (! $request->user()->isA($role)) {
                abort(403); // or 404, depending on what you need
            }
    
            return $next($request);
        }
    }
    
  2. Далее взломайте ваш файл app/Http/Kernel и зарегистрируйте там новое промежуточное ПО:

    protected $routeMiddleware = [
        // ...keep the others here...
        'role' => \App\Http\Middleware\HasRole::class,
    ];
    
  3. Теперь вы можете проверять роли пользователейпрямо на вашем маршруте:

    Route::middleware('auth', 'role:admin')->prefix('admin')->group(function () {
        Route::resource('user', 'Admin\UserController', ['as' => 'admin']);
    });
    
    Route::middleware('auth', 'role:user')->prefix('admin')->group(function () {
        Route::resource('user', 'User\UserController', [
            'only' => ['edit', 'show', 'update'],
            'as' => 'user',
        ]);
    });
    
0 голосов
/ 24 октября 2018

То, что вы пытаетесь выполнить, невозможно с маршрутизатором Laravel.

Промежуточное программное обеспечение проверяется во время выполнения, поэтому у вас не может быть двух одинаковых маршрутов.Ваши маршруты auth:user перезаписывают маршруты auth:admin.

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

0 голосов
/ 24 октября 2018

Предполагая, что у пользователей есть атрибут "роль", вы можете просто получить его, выполнив:

Auth::user()->role

Надеюсь, мой ответ поможет ..

0 голосов
/ 24 октября 2018

Если вы используете самый популярный пакет для ролей / разрешений Larvel "spatie" , вы можете проверить роль следующим образом:

\Auth::user()->hasRole('admin')

Возвращает "true", если у пользователя естьроль admin и false в других случаях.

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