Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在ACL中设置aLaravel 4资源路由的特定方法_Php_Laravel_Laravel 4_Acl - Fatal编程技术网

Php 如何在ACL中设置aLaravel 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

我有一个相当简单的ACL系统设置。过滤器检查用户是否属于有权访问路由的用户组,或者用户是否有权访问路由。它适用于单个路线,也适用于一般资源。但是,我希望一些用户能够访问资源路由的特定方法,但不是所有方法。例如,user1是admin组的一部分,并且始终可以访问admin资源路由,但user2不是admin用户组的一部分,我想授予他访问resource admin/create的权限。我如何在Laravel 4中进行设置

数据库

 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')));

    }

}