Laravel промежуточное ПО, несколько ролей - PullRequest
0 голосов
/ 25 апреля 2020

У меня проблемы с промежуточным программным обеспечением Laravel. То, что я хочу сделать sh - зарегистрированный пользователь имеет 4 роли. 1. Главный администратор 2. Администратор 3. Продавец 4. Клиент. Я хочу, чтобы у моего главного администратора, администратора и продавца был доступ к моему CategoryController, и клиент не может получить к нему доступ, но когда я помещаю промежуточное программное обеспечение в конструктор моего контроллера, он только позволяет masteradmin получить доступ к CategoryController и возвращает пользователей admin и продавца. Пожалуйста, посоветуйте мне, как это сделать.

Ядро. php $ routemiddleware:

    'checkrole' => \App\Http\Middleware\CheckRole::class,
    'admincheck' => \App\Http\Middleware\Admin::class,
    'sellercheck' => \App\Http\Middleware\Seller::class,
    'customercheck' => \App\Http\Middleware\Customer::class,
    'masteradmin' => \App\Http\Middleware\MasterAdmin::class,

http / Middleware / CheckRole

    public function handle($request, Closure $next)
{
    if(Auth::user()->user_role  == 1)
    {
      return redirect('admin');
    }
    elseif(Auth::user()->user_role  == 2)
    {
      return redirect('seller');
    }
    elseif(Auth::user()->user_role  == 3)
    {
      return redirect('customer');
    }
      return $next($request);
}

http / Middleware / MasterAdmin

    public function handle($request, Closure $next)
{
  if(Auth::user()->user_role != 0)
  {
    return back();
  }
    return $next($request);
}

http / Middleware / Admin

  public function handle($request, Closure $next)
{
  if(Auth::user()->user_role != 1)
  {
    return back();
  }
    return $next($request);
}

http / Middleware / Seller

  public function handle($request, Closure $next)
{
  if(Auth::user()->user_role != 2)
  {
    return back();
  }
    return $next($request);
}

Http / Middleware / Customer

    public function handle($request, Closure $next)
{
    if(Auth::user()->user_role != 3)
    {
      return back();
    }
    return $next($request);
}

КатегорияКонтроллер:

    class CategoryController extends Controller
{
    public function __construct()
    {
      $this->middleware('auth');
      $this->middleware('verified');
      $this->middleware('masteradmin');
      $this->middleware('admincheck');
      $this->middleware('sellercheck');
      // $this->authorizeResource(Category::class, 'category');
    }
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
     return view('category.index');
    }

HomeController

class HomeController extends Controller
{
    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('auth');
        $this->middleware('verified');
        $this->middleware('checkrole');
    }

    /**
     * Show the application dashboard.
     *
     * @return \Illuminate\Contracts\Support\Renderable
     */
    public function index()
    {
        return view('home');
    }

Сейчас это не работает. Я хочу дать одному или нескольким пользователям доступ ко всему моему контроллеру, пожалуйста, посоветуйте мне, как этого добиться, заранее спасибо

1 Ответ

0 голосов
/ 25 апреля 2020

Проблема в том, что ваш adminUser должен будет go через masterAdminUser Middleware, return back();. Поэтому ваш adminUser не сможет go через промежуточное ПО администратора и не сможет получить доступ к категориям.

Решением для этого будет управление вашей ролью в одном промежуточном ПО, для Например, CategoryMiddleware. Это промежуточное ПО будет проверять роль и return back(); только если не разрешено

Более чистое Laravel решение - использовать Политики, которые, кажется, очень подходят для вашей ситуации - вы можете взглянуть на документация .

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