Php 如何在ACL中设置aLaravel 4资源路由的特定方法
我有一个相当简单的ACL系统设置。过滤器检查用户是否属于有权访问路由的用户组,或者用户是否有权访问路由。它适用于单个路线,也适用于一般资源。但是,我希望一些用户能够访问资源路由的特定方法,但不是所有方法。例如,user1是admin组的一部分,并且始终可以访问admin资源路由,但user2不是admin用户组的一部分,我想授予他访问resource admin/create的权限。我如何在Laravel 4中进行设置 数据库Php 如何在ACL中设置aLaravel 4资源路由的特定方法,php,laravel,laravel-4,acl,Php,Laravel,Laravel 4,Acl,我有一个相当简单的ACL系统设置。过滤器检查用户是否属于有权访问路由的用户组,或者用户是否有权访问路由。它适用于单个路线,也适用于一般资源。但是,我希望一些用户能够访问资源路由的特定方法,但不是所有方法。例如,user1是admin组的一部分,并且始终可以访问admin资源路由,但user2不是admin用户组的一部分,我想授予他访问resource admin/create的权限。我如何在Laravel 4中进行设置 数据库 Routes: id route
Routes:
id
route
created_by
last_editted_by
created
updated
deleted_at
acl (table it looks at to see if user has access)
id
routes_id
user_id
group_id
created
updated
deleted_at
Filter
if (Auth::check()){
$route = Request::segment(1);
$user_id = Auth::user()->id;
$acl_count = Acls::join('routes','routes.id','=','acl.routes_id')
->where('routes.route','=',$route)
->Where(function($in_parenthesis) use($user_id){
$in_parenthesis->whereIn('acl.group_id',function($where_in) use($user_id){
$where_in->select('group_id')
->from('user_group_junction')
->where('user_id','=',$user_id);
})
->orWhere('acl.user_id','=',$user_id);
})
->count();
if($acl_count < 1){
return Redirect::to('/');
}
}else{
return Redirect::to('/');
}
Routes
Route::get('/','HomeController@index');
Route::get('login','AuthorizationController@loginForm');
Route::post('authenticate','HomeController@authenticate');
Route::get('logout','HomeController@logout');
Route::group(array('before'=>'auth'),function(){
Route::group(array('before'=>'user_permission'),function(){
Route::get('protected','HomeController@protectedPage');
Route::resource('sources', 'SourcesController');
Route::resource('admins', 'AdminsController');
});
});
路线:
身份证件
路线
创建于
最后编辑人
创建
更新
删除
acl(查看用户是否具有访问权限的表)
身份证件
路线号
用户id
组id
创建
更新
删除
滤器
if(Auth::check()){
$route=请求::段(1);
$user\u id=Auth::user()->id;
$acl\u count=Acls::join('routes','routes.id','=','acl.routes\u id'))
->其中('routes.route','=',$route)
->其中(函数($在括号中)使用($用户id){
$in_括号->其中('acl.group_id',函数($where_in)使用($user_id){
$where\u in->select('group\u id')
->发件人('user\u group\u junction')
->其中('user\u id','=',$user\u id);
})
->orWhere('acl.user\u id','=',$user\u id);
})
->计数();
如果($acl\U计数<1){
返回重定向::到('/');
}
}否则{
返回重定向::到('/');
}
路线
路由::获取('/','HomeController@index');
路由::get('login','AuthorizationController@loginForm');
路由::post('authenticate','HomeController@authenticate');
路由::get('logout','HomeController@logout');
路由::组(数组('before'=>'auth'),函数(){
路由::组(数组('before'=>'user_permission'),函数(){
路由::get('protected','HomeController@protectedPage');
路由::资源('sources','sourcescoontroller');
路由::资源('admins','AdminsController');
});
});
您可以像这样在AdminBaseController
的构造中使用beforeFilter
方法(仅为管理员控制器创建一个不同的方法)
此外,您可以在资源
控制器内直接使用此beforeFilter
,并使用except
,或者您可以仅使用except
(仅与except相反,允许访问数组中提到的所有方法,但过滤器除外)。您还可以检查构造函数方法内部的条件。您可以在AdminBaseController
的构造方法内部使用beforeFilter
,如下所示(仅为管理员控制器创建一个不同的方法)
此外,您可以在资源
控制器内直接使用此beforeFilter
,并使用except
,或者您可以仅使用except
(仅与except相反,允许访问数组中提到的所有方法,但过滤器除外)。您还可以检查构造函数方法内部的条件。您可以在AdminBaseController
的构造方法内部使用beforeFilter
,如下所示(仅为管理员控制器创建一个不同的方法)
此外,您可以在资源
控制器内直接使用此beforeFilter
,并使用except
,或者您可以仅使用except
(仅与except相反,允许访问数组中提到的所有方法,但过滤器除外)。您还可以检查构造函数方法内部的条件。您可以在AdminBaseController
的构造方法内部使用beforeFilter
,如下所示(仅为管理员控制器创建一个不同的方法)
此外,您可以在资源
控制器内直接使用此beforeFilter
,并使用except
,或者您可以仅使用except
(仅与except相反,允许访问数组中提到的所有方法,但过滤器除外)。您还可以检查构造函数方法的内部条件。我发现我的部分问题在于过滤器。如果我的路由(无论是资源还是只包含“/”的路由)无法正常工作,我只查看url的第一个部分,该部分无法正常工作。因此,我问了另一个问题,我发现我的问题的一部分与过滤器有关。如果我的路由(无论是资源还是只包含“/”的路由)无法正常工作,我只查看url的第一个部分,该部分无法正常工作。因此,我问了另一个问题,我发现我的问题的一部分与过滤器有关。如果我的路由(无论是资源还是只包含“/”的路由)无法正常工作,我只查看url的第一个部分,该部分无法正常工作。因此,我问了另一个问题,我发现我的问题的一部分与过滤器有关。如果我的路由(无论是资源还是只包含“/”的路由)无法正常工作,我只查看url的第一个部分,该部分无法正常工作。因此,我问了另一个位于acl:Access Control Listacl:Access Control Listacl:Access Control Listacl:Access Control Listacl的问题,但是任何人都可以使用创建方法。是的,你是对的,如果你不想让任何人访问它,那么你可以更改它,将其从除
外删除。但是任何人都可以使用create方法。是的,你是对的,如果你不想让任何人访问此方法,那么你可以更改它,将其从除
外删除。但是任何人都可以使用create方法。是的,你是对的,如果你不想让任何人访问此方法,那么你可以
class AdminController extends AdminBaseController {
function __construct() {
// Use filter on all methods but not on create
$this->beforeFilter('admin', array('except' => array('create')));
}
}