根据实体状态提供有关Laravel访问权限的建议

时间:2017-03-28 11:30:10

标签: laravel laravel-5

我为小型企业构建了一个管理平台,并实际使用Laravel 5.4来开发v2。

上下文如下:

  • 主要管理实体为授权。
  • 它有几个可以管理的项目(CRUD)
  • 可以邀请用户使用此授权,并拥有不同的角色:负责人,主经纪人,子经纪人。
  • 有些用户使用" global"权利可以使用所有的任务,如秘书或首席执行官。
  • 部分棘手的部分,访问权限根据Mandate状态而变化。

关于全球访问权限,我已经完全涵盖了基于活动/角色的访问权限。

授权访问权限存储在存储以下内容的专用表中:

mandate_status_id
role_identifier
action_identifier
is_authorized

我在主要实体上处理访问权限的方式正在困扰我,我想重构它。困扰我的是,在每次访问检查时,我必须确定当前用户角色与被触及的#34;。每个请求都会将权限访问权限表加载到单例中。

我首先考虑了权利/角色的缓存方法,但是当授权状态发生后权利没有改变时,它显示了它的限制。

在考虑任务模型时,我正在考虑建立任务访问权限或授权上下文。它将为具有访问权限的用户及其权利做好准备。

我愿意接受建议,如果你认为我以错误的方式接近它,请告诉

1 个答案:

答案 0 :(得分:0)

当我使用权限时,我将其添加到AuthServiceProvider

中的引导方法
public function boot(GateContract $gate)
    {
        $this->registerPolicies();

        $gate->before(function ($user, $ability) {
            if (! $user->isActive()) {
                return false;
            }

            if ($user->isAdmin()) {
                return true;
            }

            if ($user->isSuperAdmin()) {
                return true;
            }

            if (in_array($ability, $user->getAbilities())) {
                return true;
            }

            return false;
        });

然后在用户模型中我有getAbilities从数据库获取权限。这看起来像这样:

public function getAbilities()
{
    return $this->role->permissions->pluck('description')->toArray();
}

现在,您需要创建权限模型并在数据库中设置权限。

希望有所帮助