Laravel: 如何限制管理员和群友的路由
Laravel: How to restrict route to admin and groupmates
我目前正在使用 Laravel 开发网站。
一个用户属于 1 个且仅属于 1 个组。
如何限制路由
Route::('/view/profile/{id}', 'ProfileController@showProfile');
只能由属于同一组的其他用户访问。我还想允许管理员访问这条路线。但是管理员不属于任何组。
我知道有两种方法可以解决你的问题。
- 您可以创建自定义 middleware and bind 它到您的路线。
- 或者您可以在控制器方法中做一个简单的检查。
我将以第二种方法为例,因为它是最简单的。
示例:
// 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);
}
}
我目前正在使用 Laravel 开发网站。 一个用户属于 1 个且仅属于 1 个组。 如何限制路由
Route::('/view/profile/{id}', 'ProfileController@showProfile');
只能由属于同一组的其他用户访问。我还想允许管理员访问这条路线。但是管理员不属于任何组。
我知道有两种方法可以解决你的问题。
- 您可以创建自定义 middleware and bind 它到您的路线。
- 或者您可以在控制器方法中做一个简单的检查。
我将以第二种方法为例,因为它是最简单的。
示例:
// 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);
}
}