Php laravel-如何在2路由组中使用相同的url

Php laravel-如何在2路由组中使用相同的url,php,laravel,laravel-4,laravel-routing,laravel-filters,Php,Laravel,Laravel 4,Laravel Routing,Laravel Filters,假设我有两个过滤器 1) 管理员 2) 超级管理员 过滤器: Route::filter('Admin', function($route, $request) { if ( ! Auth::user()->Admin()) { return Response::json(array('flash' => 'You are not authorized.'), 401); } }); Route::filter('SuperAdmin', function($ro

假设我有两个过滤器

1) 管理员 2) 超级管理员

过滤器:

 Route::filter('Admin', function($route, $request)
 {
   if ( ! Auth::user()->Admin()) {
   return Response::json(array('flash' => 'You are not authorized.'), 401);
 }
});

Route::filter('SuperAdmin', function($route, $request)
{
  if ( ! Auth::user()->SuperAdmin()) {
  return Response::json(array('flash' => 'You are not authorized.'), 401);
}
});
路线:

Route::group(array('before' => array('auth|Admin')), function()
{

    Route::get('/report/{id}','ReportCntrl@getreport');
    Route::get('/create1','ReportCntrl@create1');

}


Route::group(array('before' => array('auth|SuperAdmin')), function()
{

    Route::get('/report/{id}','ReportCntrl@getreport');
    Route::get('/create2','ReportCntrl@create2');
    Route::get('/create3','ReportCntrl@create3');

}
所以问题是,当我从
superadmin
登录时,它会显示未经授权的访问

因为我认为它会将我的请求传递给两个过滤器,一个过滤器会批准它,另一个过滤器会不批准它


有没有什么方法可以让我从Laravel的两个路由组访问相同的url。

您可以这样做:

Route::filter('AdminAndSuperAdmin', function($route, $request)
 {
   if ( ! Auth::user()->Admin() && ! Auth::user()->SuperAdmin()) {
   return Response::json(array('flash' => 'You are not authorized.'), 401);
 }
});



// this route will work for both admin and super admin
Route::group(array('before' => array('auth|AdminAndSuperAdmin')), function()
{

    Route::get('/report/{id}','ReportCntrl@getreport');

} 


Route::group(array('before' => array('auth|Admin')), function()
{

    Route::get('/create1','ReportCntrl@create1');

}


Route::group(array('before' => array('auth|SuperAdmin')), function()
{

    Route::get('/create2','ReportCntrl@create2');
    Route::get('/create3','ReportCntrl@create3');

}
Route::group(array('before' => array('auth|role:Admin;SuperAdmin')), function(){
    Route::get('/report/{id}','ReportCntrl@getreport');
}

您可以这样做:

Route::filter('AdminAndSuperAdmin', function($route, $request)
 {
   if ( ! Auth::user()->Admin() && ! Auth::user()->SuperAdmin()) {
   return Response::json(array('flash' => 'You are not authorized.'), 401);
 }
});



// this route will work for both admin and super admin
Route::group(array('before' => array('auth|AdminAndSuperAdmin')), function()
{

    Route::get('/report/{id}','ReportCntrl@getreport');

} 


Route::group(array('before' => array('auth|Admin')), function()
{

    Route::get('/create1','ReportCntrl@create1');

}


Route::group(array('before' => array('auth|SuperAdmin')), function()
{

    Route::get('/create2','ReportCntrl@create2');
    Route::get('/create3','ReportCntrl@create3');

}
Route::group(array('before' => array('auth|role:Admin;SuperAdmin')), function(){
    Route::get('/report/{id}','ReportCntrl@getreport');
}

您可以这样做:

Route::filter('AdminAndSuperAdmin', function($route, $request)
 {
   if ( ! Auth::user()->Admin() && ! Auth::user()->SuperAdmin()) {
   return Response::json(array('flash' => 'You are not authorized.'), 401);
 }
});



// this route will work for both admin and super admin
Route::group(array('before' => array('auth|AdminAndSuperAdmin')), function()
{

    Route::get('/report/{id}','ReportCntrl@getreport');

} 


Route::group(array('before' => array('auth|Admin')), function()
{

    Route::get('/create1','ReportCntrl@create1');

}


Route::group(array('before' => array('auth|SuperAdmin')), function()
{

    Route::get('/create2','ReportCntrl@create2');
    Route::get('/create3','ReportCntrl@create3');

}
Route::group(array('before' => array('auth|role:Admin;SuperAdmin')), function(){
    Route::get('/report/{id}','ReportCntrl@getreport');
}

您可以这样做:

Route::filter('AdminAndSuperAdmin', function($route, $request)
 {
   if ( ! Auth::user()->Admin() && ! Auth::user()->SuperAdmin()) {
   return Response::json(array('flash' => 'You are not authorized.'), 401);
 }
});



// this route will work for both admin and super admin
Route::group(array('before' => array('auth|AdminAndSuperAdmin')), function()
{

    Route::get('/report/{id}','ReportCntrl@getreport');

} 


Route::group(array('before' => array('auth|Admin')), function()
{

    Route::get('/create1','ReportCntrl@create1');

}


Route::group(array('before' => array('auth|SuperAdmin')), function()
{

    Route::get('/create2','ReportCntrl@create2');
    Route::get('/create3','ReportCntrl@create3');

}
Route::group(array('before' => array('auth|role:Admin;SuperAdmin')), function(){
    Route::get('/report/{id}','ReportCntrl@getreport');
}

由于定义的顺序,对Laravel管线进行分组可能会造成混淆。过滤器在路由之前定义,但在路由过程中,首先匹配路由,然后才应用过滤器

只有当falsy过滤器(比如SuperAdmin==false)使Laravel忽略路由时,您试图实现的目标才会起作用


我建议将超级管理员的
Auth::user()->Admin()
也评估为
true
。这样,相等的路由仍然可以工作,但所有不同的路由(在组之间)都可以正常工作。

由于定义的顺序,分组Laravel路由可能会造成混淆。过滤器在路由之前定义,但在路由过程中,首先匹配路由,然后才应用过滤器

只有当falsy过滤器(比如SuperAdmin==false)使Laravel忽略路由时,您试图实现的目标才会起作用


我建议将超级管理员的
Auth::user()->Admin()
也评估为
true
。这样,相等的路由仍然可以工作,但所有不同的路由(在组之间)都可以正常工作。

由于定义的顺序,分组Laravel路由可能会造成混淆。过滤器在路由之前定义,但在路由过程中,首先匹配路由,然后才应用过滤器

只有当falsy过滤器(比如SuperAdmin==false)使Laravel忽略路由时,您试图实现的目标才会起作用


我建议将超级管理员的
Auth::user()->Admin()
也评估为
true
。这样,相等的路由仍然可以工作,但所有不同的路由(在组之间)都可以正常工作。

由于定义的顺序,分组Laravel路由可能会造成混淆。过滤器在路由之前定义,但在路由过程中,首先匹配路由,然后才应用过滤器

只有当falsy过滤器(比如SuperAdmin==false)使Laravel忽略路由时,您试图实现的目标才会起作用


我建议将超级管理员的
Auth::user()->Admin()
也评估为
true
。这样,相同的路由仍然可以工作,但所有不同的路由(组之间)都可以正常工作。

您必须使用一个筛选器。但是,您可以使用过滤器参数使其具有动态性和可重用性

Route::filter('role', function($route, $request, $value){
    $allowedRoles = explode(';', $value);
    $user = Auth::user();
    if(in_array('Admin', $alloweRoles) && $user->Admin()){
        return;
    }
    else if(in_array('SuperAdmin', $allowedRoles) && $user->SuperAdmin()){
        return;
    }
    return Response::json(array('flash' => 'You are not authorized.'), 401);
});
你是这样使用它的:

Route::filter('AdminAndSuperAdmin', function($route, $request)
 {
   if ( ! Auth::user()->Admin() && ! Auth::user()->SuperAdmin()) {
   return Response::json(array('flash' => 'You are not authorized.'), 401);
 }
});



// this route will work for both admin and super admin
Route::group(array('before' => array('auth|AdminAndSuperAdmin')), function()
{

    Route::get('/report/{id}','ReportCntrl@getreport');

} 


Route::group(array('before' => array('auth|Admin')), function()
{

    Route::get('/create1','ReportCntrl@create1');

}


Route::group(array('before' => array('auth|SuperAdmin')), function()
{

    Route::get('/create2','ReportCntrl@create2');
    Route::get('/create3','ReportCntrl@create3');

}
Route::group(array('before' => array('auth|role:Admin;SuperAdmin')), function(){
    Route::get('/report/{id}','ReportCntrl@getreport');
}
解释 三个过滤器参数(
$route,$request,$value
)由Laravel按顺序自动传递。第三个参数
$value
包含
之后传递的所有内容


$request
是当前请求对象(实例为
Illuminate\Http\request
),而
$route
是当前路由对象(实例为
lluminate\Routing\route

您必须使用一个筛选器。但是,您可以使用过滤器参数使其具有动态性和可重用性

Route::filter('role', function($route, $request, $value){
    $allowedRoles = explode(';', $value);
    $user = Auth::user();
    if(in_array('Admin', $alloweRoles) && $user->Admin()){
        return;
    }
    else if(in_array('SuperAdmin', $allowedRoles) && $user->SuperAdmin()){
        return;
    }
    return Response::json(array('flash' => 'You are not authorized.'), 401);
});
你是这样使用它的:

Route::filter('AdminAndSuperAdmin', function($route, $request)
 {
   if ( ! Auth::user()->Admin() && ! Auth::user()->SuperAdmin()) {
   return Response::json(array('flash' => 'You are not authorized.'), 401);
 }
});



// this route will work for both admin and super admin
Route::group(array('before' => array('auth|AdminAndSuperAdmin')), function()
{

    Route::get('/report/{id}','ReportCntrl@getreport');

} 


Route::group(array('before' => array('auth|Admin')), function()
{

    Route::get('/create1','ReportCntrl@create1');

}


Route::group(array('before' => array('auth|SuperAdmin')), function()
{

    Route::get('/create2','ReportCntrl@create2');
    Route::get('/create3','ReportCntrl@create3');

}
Route::group(array('before' => array('auth|role:Admin;SuperAdmin')), function(){
    Route::get('/report/{id}','ReportCntrl@getreport');
}
解释 三个过滤器参数(
$route,$request,$value
)由Laravel按顺序自动传递。第三个参数
$value
包含
之后传递的所有内容


$request
是当前请求对象(实例为
Illuminate\Http\request
),而
$route
是当前路由对象(实例为
lluminate\Routing\route

您必须使用一个筛选器。但是,您可以使用过滤器参数使其具有动态性和可重用性

Route::filter('role', function($route, $request, $value){
    $allowedRoles = explode(';', $value);
    $user = Auth::user();
    if(in_array('Admin', $alloweRoles) && $user->Admin()){
        return;
    }
    else if(in_array('SuperAdmin', $allowedRoles) && $user->SuperAdmin()){
        return;
    }
    return Response::json(array('flash' => 'You are not authorized.'), 401);
});
你是这样使用它的:

Route::filter('AdminAndSuperAdmin', function($route, $request)
 {
   if ( ! Auth::user()->Admin() && ! Auth::user()->SuperAdmin()) {
   return Response::json(array('flash' => 'You are not authorized.'), 401);
 }
});



// this route will work for both admin and super admin
Route::group(array('before' => array('auth|AdminAndSuperAdmin')), function()
{

    Route::get('/report/{id}','ReportCntrl@getreport');

} 


Route::group(array('before' => array('auth|Admin')), function()
{

    Route::get('/create1','ReportCntrl@create1');

}


Route::group(array('before' => array('auth|SuperAdmin')), function()
{

    Route::get('/create2','ReportCntrl@create2');
    Route::get('/create3','ReportCntrl@create3');

}
Route::group(array('before' => array('auth|role:Admin;SuperAdmin')), function(){
    Route::get('/report/{id}','ReportCntrl@getreport');
}
解释 三个过滤器参数(
$route,$request,$value
)由Laravel按顺序自动传递。第三个参数
$value
包含
之后传递的所有内容


$request
是当前请求对象(实例为
Illuminate\Http\request
),而
$route
是当前路由对象(实例为
lluminate\Routing\route

您必须使用一个筛选器。但是,您可以使用过滤器参数使其具有动态性和可重用性

Route::filter('role', function($route, $request, $value){
    $allowedRoles = explode(';', $value);
    $user = Auth::user();
    if(in_array('Admin', $alloweRoles) && $user->Admin()){
        return;
    }
    else if(in_array('SuperAdmin', $allowedRoles) && $user->SuperAdmin()){
        return;
    }
    return Response::json(array('flash' => 'You are not authorized.'), 401);
});
你是这样使用它的:

Route::filter('AdminAndSuperAdmin', function($route, $request)
 {
   if ( ! Auth::user()->Admin() && ! Auth::user()->SuperAdmin()) {
   return Response::json(array('flash' => 'You are not authorized.'), 401);
 }
});



// this route will work for both admin and super admin
Route::group(array('before' => array('auth|AdminAndSuperAdmin')), function()
{

    Route::get('/report/{id}','ReportCntrl@getreport');

} 


Route::group(array('before' => array('auth|Admin')), function()
{

    Route::get('/create1','ReportCntrl@create1');

}


Route::group(array('before' => array('auth|SuperAdmin')), function()
{

    Route::get('/create2','ReportCntrl@create2');
    Route::get('/create3','ReportCntrl@create3');

}
Route::group(array('before' => array('auth|role:Admin;SuperAdmin')), function(){
    Route::get('/report/{id}','ReportCntrl@getreport');
}
解释 三个过滤器参数(
$route,$request,$value
)由Laravel按顺序自动传递。第三个参数
$value
包含
之后传递的所有内容


$request
是当前请求对象(实例为
Illuminate\Http\request
),而
$route
是当前路由对象(实例为
lluminate\Routing\route

为什么不尝试在
SuperAdmin
过滤器中验证
Admin
,同时显示两个过滤器的代码,我建议做一个,然后做一些类似于
的事情,如果是\u admin或是\u superadmin返回true
尝试自定义筛选器,因为
超级管理员
具有管理员不应访问的某些权限。@Kyslik更新了问题,请建议您为什么不尝试在
超级管理员
筛选器中验证
管理员
,我建议做一个,然后做一些类似于
的事情,如果是\u admin或是\u superadmin返回true尝试自定义筛选器,因为
超级管理员
具有一些不应访问的权限i