public function routeNeedsRoleOrPermission($route, $roles, $permissions, $result = null, $requireAll = false)
{
$filterName = is_array($roles) ? implode('_', $roles) : $roles;
$filterName .= '_' . (is_array($permissions) ? implode('_', $permissions) : $permissions);
$filterName .= '_' . substr(md5($route), 0, 6);
$closure = function () use($roles, $permissions, $result, $requireAll) {
$hasRole = $this->hasRole($roles, $requireAll);
$hasPerms = $this->can($permissions, $requireAll);
if ($requireAll) {
$hasRolePerm = $hasRole && $hasPerms;
} else {
$hasRolePerm = $hasRole || $hasPerms;
}
if (!$hasRolePerm) {
return empty($result) ? $this->app->abort(403) : $result;
}
};
// Same as Route::filter, registers a new filter
$this->app->router->filter($filterName, $closure);
// Same as Route::when, assigns a route pattern to the
// previously created filter.
$this->app->router->when($route, $filterName);
}