В основном !$request->user()->hasPermission($permission)
говорит, что если пользователь, связанный с запросом, не имеет этого разрешения, которое передает промежуточное программное обеспечение, однако это не то, что вам нужно. Вот что вы должны сделать:
Если вам нужно, чтобы у пользователя было одно из указанных разрешений, которые вам необходимо сделать:
class HasPermission
{
public function handle($request, Closure $next,$permissions)
{
$permissions_array = explode('|', $permissions);
foreach($permissions_array as $permission){
if ($request->user()->hasPermission($permission)){
return $next($request);
}
}
return redirect()->back();
}
}
Если вы хотите, чтобы у пользователя были все заявленные разрешения, вам нужно сделать:
class HasPermission
{
public function handle($request, Closure $next,$permissions)
{
$permissions_array = explode('|', $permissions);
foreach($permissions_array as $permission){
if (!$request->user()->hasPermission($permission)){
return redirect()->back();
}
}
return $next($request);
}
}
В качестве дополнительной заметки, если вы хотите сделать это более элегантным способом, вы можете сделать:
class HasPermission
{
public function handle($request, Closure $next, ...$permissions_array)
{
//Function body from above without the explode part
}
}
И
function __construct()
{
$this->middleware('auth');
$this->middleware('HasPermission:Role_Read,Role_Update,Role_Delete');
}
Если вы используете запятые, то фреймворк разделит строку на аргументы для вас.