Php laravel-如何在2路由组中使用相同的url
假设我有两个过滤器 1) 管理员 2) 超级管理员 过滤器: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
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