【发布时间】:2017-07-15 12:59:13
【问题描述】:
我创建了一个简单的系统来使用 AdminMiddleware 在管理面板中为用户设置权限。 每个用户都拥有群组、帖子、页面等权限......
路线/网络:
Route::group(['middleware' => 'admin'], function()
{
Route::get('/admin' , 'admin\AdminController@index')->name('admin');
//all admin panel routes
}
在管理中间件中
public function handle($request, Closure $next)
{
if(Auth::check()){
if ($request->user()->user_type !== 'man')
{
return redirect('/');
}
$user_permissions = Auth::user()->permissions;
foreach($user_permissions as $value){
$controller = Controllers::get_controller($value->controller_id);
$permissions['name'] = $controller->controller_name;
$all_permissions[] = $permissions;
unset($permissions);
}
foreach ($all_permissions as $value){
$controllers[] = trim($value['name']);
}
$request->user()->controllers = $controllers;
return $next($request);
}
else{
return redirect('/login');
}
}
所以我得到了代表控制器名称和每个控制器中的所有用户权限的列表(在这个控制器中,我检查用户是否具有名为“用户”的权限来访问用户控制器以查看他们的数据)
protected $user;
public function __construct(){
$this->middleware(function ($request, $next) {
$this->user= Auth::user();
if(!in_array('users',$this->user->controllers)){
session()->flash('error' , 'No permission');
return redirect('/admin');
}
else{
return $next($request);
}
});
}
我对每个控制器都使用它,它适用于一个小项目,但当涉及一个带有模块的大型项目 (nWidart/laravel-modules) 时,它会很困难。我想要的是检查整个模块的权限,而不是模块中的每个控制器。因此,如果我有一个名为 blog 的模块,我想检查登录用户是否有权访问该模块中的任何控制器,如何做到这一点?
【问题讨论】:
-
将您的模块路由添加到路由组中,并为该路由组添加中间件。这就是 laravel 对自己的路由所做的。
标签: php laravel-5 permissions middleware