我很想知道是否可以阻止没有拥有者或管理员角色的用户访问laravel应用程序中的某些控制器?
答案 0 :(得分:1)
是的,你可以。您可以使用路由过滤器执行此操作。
routes.php文件
Route::group(['prefix' => 'admin', 'before' => 'auth.admin'), function()
{
// Your routes
}
]);
并在filters.php中
Route::filter('auth.admin', function()
{
// logic to set $isAdmin to true or false
if(!$isAdmin)
{
return Redirect::to('login')->with('flash_message', 'Please Login with your admin credentials');
}
});
答案 1 :(得分:1)
路由过滤器已经提出,但由于您的过滤器应该控制器特定,因此您可能需要尝试controller filters。
首先,让我们添加你的控制器
public function __construct()
{
$this->beforeFilter(function()
{
// check permissions
});
}
在执行控制器操作之前调用此函数。
在那里取决于你想做什么。我现在只是猜测,因为我不知道你的确切架构,但我想你想做这样的事情:
$user = Auth::user();
$role = $user->role->identifier;
if($role !== 'admin' && $role !== 'other-role-that-has-access'){
App::abort(401); // Throw an unauthorized error
}
您可以进行重定向,渲染视图或基本上执行任何操作,而不是抛出错误。只做一些阻止进一步执行的事情,这样你的控制器动作就不会被调用。
修改强>
您可以使用预定义的过滤器(来自routes.php或filters.php),而不是使用Closure功能。
$this->beforeFilter('filter-name', array('only' => array('fooAction', 'barAction')));
有关详细信息,请查看documentation