Php 通过访问路由名称参数和检查用户';允许

Php 通过访问路由名称参数和检查用户';允许,php,permissions,routes,laravel-5,acl,Php,Permissions,Routes,Laravel 5,Acl,我已经为ACL层实现了委托角色。现在,我计划自动检查每个请求的权限,这样,每次我都不必为用户角色写入权限 我有公司资源,用户角色为“管理员”,他只能查看公司,另一个用户角色为“超级”可以管理公司。在数据库中,我为他们提供了适当的权限,但在中间件中,为了检查他们的权限,我计划实现以下目标: 如果url变为:localhost/company/create-In DB权限将为create_company,当前登录用户将基于此权限进行检查 $user->can('create_company')

我已经为ACL层实现了委托角色。现在,我计划自动检查每个请求的权限,这样,每次我都不必为用户角色写入权限

我有公司资源,用户角色为“管理员”,他只能查看公司,另一个用户角色为“超级”可以管理公司。在数据库中,我为他们提供了适当的权限,但在中间件中,为了检查他们的权限,我计划实现以下目标:

如果url变为:localhost/company/create-In DB权限将为create_company,当前登录用户将基于此权限进行检查

$user->can('create_company')  OR
$user->can(['create_company', 'view_company']);
问题1:这是否可以通过中间件实现,在中间件中可以访问路径名称,例如company.create、company.show(以便将点替换为“\ux”,我们可以检查权限)?怎么做

问题2:这是实现自动角色检查的好方法还是有其他更好的方法


任何帮助/建议都将不胜感激。

我找到了答案,在某种程度上,我已经进行了自动权限测试。我在
Authenticate.php
中间件中创建了一个函数

public function autocheckroles($request)
{
    $perms = '';
    $delimiter = '_'.$request->segment(1);
    if($request->isMethod('GET')){

        if(is_numeric($request->segment(2)) && is_null($request->segment(3))){
            $perms = 'show'.$delimiter; 
        }
        elseif($request->segment(3) == 'edit' && 
            is_numeric($request->segment(2))){
            $perms = 'edit'.$delimiter;
        }
        elseif ($request->segment(2) == 'create'){
            $perms = 'create'.$delimiter;
        }
        elseif(is_null($request->segment(2)) && is_null($request->segment(3)) &&
            ! is_null($request->segment(1))){
            $perms = 'view'.$delimiter;
        } 
    }
    elseif($request->isMethod('POST')){
        if($request->segment(1)){
            $perms = 'create'.$delimiter;
        }           
    }
    elseif($request->isMethod('DELETE')){
        $perms = 'delete'.$delimiter;
    }
    elseif($request->isMethod('PUT') || $request->isMethod('PATCH')){
        if($request->segment(1)){
            $perms = 'edit'.$delimiter;
        }
    }
    return $perms;
}
这将根据请求方法返回权限。例如,创建\u perm或创建\u角色或编辑\u角色。这样,我就不必在中间件中写入所有权限。它将根据请求自动进行检查

// Check for the user role and automate the role permission
    $perform_action = $this->autocheckroles($request);
    // Super Admin with id number 1 dosen't require any permission
    if((\Auth::user()->id == '1') || \Auth::user()->can($perform_action)){
        return $next($request);
    }
    else
    {
        \Session::flash('flash_message', 'You are not authorized for this page.');
        return new RedirectResponse(url('/home'));
    }

这样,如果用户未经授权,他将被重定向到仪表板(主页),超级用户将不会面临任何此类身份验证,因此他将被排除在外。

Tarunn,我所做的编辑是。一些问候语会自动删除,其他的,比如这样,留给编辑整理,同时保留帖子中的信息。堆栈溢出不是一个论坛;没有必要要求人们给出更好的答案,因为总是有公开的邀请。“谢谢”,你的答案会出现在一个可能需要删除的帖子列表上;我的编辑旨在保留您的答案。如果你想保持现状,那是你的选择。