我目前正在使用Laravel开发一个网站。 用户属于1且仅属于1个组。 如何限制路线
Route::('/view/profile/{id}', 'ProfileController@showProfile');
只能由属于同一组的其他用户访问。我还想让管理员访问此路由。但是,管理员不属于任何组。
答案 0 :(得分: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);
}
}
我认为这应该可以解决问题。
答案 1 :(得分:0)
创建一个像这样的自定义中间件
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);
}
}