Laravel: 如何限制管理员和群友的路由

Laravel: How to restrict route to admin and groupmates

我目前正在使用 Laravel 开发网站。 一个用户属于 1 个且仅属于 1 个组。 如何限制路由

Route::('/view/profile/{id}', 'ProfileController@showProfile');

只能由属于同一组的其他用户访问。我还想允许管理员访问这条路线。但是管理员不属于任何组。

我知道有两种方法可以解决你的问题。

  1. 您可以创建自定义 middleware and bind 它到您的路线。
  2. 或者您可以在控制器方法中做一个简单的检查。

我将以第二种方法为例,因为它是最简单的。

示例:

// YourController.php

public function yourMethod()
{

    // Get the user from authentication
    $user = Auth::user();

    // Check user and redirect to login when NULL
    // This also can be done with auth middleware (check link in method 1)
    if (!$user) return Response::redirect('yourLoginRoute');

    // Check if has not group throw forbidden
    if ($user->group->id != theGroupId) return App::abort(403);

}

评论@PaulLucero

后编辑

因此,如果我理解正确的话,只有同一组的用户才能访问彼此的个人资料页面 (view/profile/{id})。你也想用中间件来解决这个问题,但是无法获取路由参数{id}。

您可以使用 Route::input('yourParameter') 在路由外检索 Laravel 4 中的参数。选中 this 并向下滚动到 访问路由参数值

示例:

class YourMiddleware
{

    public function handle($request, Closure $next)
    {

        // Get id from route and get user model
        $user_id = Route::input('id');

        $user = User::find($user_id);

        // Do some checks
        ....

        // Get user from auth
        $auth_user = Auth::user();

        // Do some checks
        ....

        // If groups don't match throw 403
        if ($user->group_id != $auth_user->group_id) return App::abort(403);

        return $next($request);

    }

}

我认为这应该可以解决问题。

像这样尝试创建自定义中间件

public function yourMethod()
        {
           $user = Auth::user();
           if ($user->group_id == 1) {
              return Response::redirect('yourRouteToGroupID-1');
           else if(if ($user->group_id == 2) {)
              return Response::redirect('yourRouteToGroupID-2');
           else{
              return App::abort(403);
           }
         }