【问题标题】:Laravel define abilities on a model other than UserLaravel 在除用户之外的模型上定义能力
【发布时间】:2016-05-14 00:07:25
【问题描述】:

在我的应用程序中,我使用默认的 Laravel ACL 为用户定义能力,随后与角色和权限相关联。

我建立了一个 hasMany 和一个 belongsTo 关系,其中一个用户属于一个公司模型,一个公司有很多用户。我想定义具有不同能力的公司的“类型”,与用户能力分开。例如,一家公司可能是一家“架构师”公司,其能力与“承包商”公司不同,而每个公司都有一个具有“公司管理员”角色的用户,可以在其公司中添加或删除用户,以及一堆的“普通”用户。

现在我正在处理用户可以拥有角色的部分,但我对如何实现公司“类型或角色”有点迷茫。我在想我必须创建自己的AuthServiceProvider,将其命名为其他名称并在 laravel 服务提供者中注册它,以及我自己的 Gate 实现,它注入 Company 模型而不是 User?

现在我正在我的 AuthServiceProvider 中定义我的用户能力,并使用Gate Facade 进行检查,例如:

在 AuthServiceProvider 中注册能力。

//AuthServiceProvider

/**
 * Register any application authentication / authorization services.
 *
 * @param  \Illuminate\Contracts\Auth\Access\Gate $gate
 * @return void
 */
public function boot(GateContract $gate)
{
    parent::registerPolicies($gate);

    foreach ($this->getPermissions() as $permission) {

        $gate->define($permission->name, function ($user) use ($permission) {

            return $user->hasPermission($permission);
        });
    }
}

然后在 UserController 上检查用户的能力。

//UserController

/**
 * Edit the user's email.
 *
 * @param User $user
 */
public function edit(User $user)
{
    if(Gate::allows('edit', $user){

        $user->email = $this->request->input('email');

        $user->save();
    }
}

我希望能够对 Company 模型进行相同类型的检查,即:

// Check if the Company that the user belongs to is allowed to create posts

CompanyGate::allows('create-post');

【问题讨论】:

  • 不能继续注入User,然后查询User上的Company关系吗?
  • 我要做的是检查我的应用程序的几个位置的公司能力。例如,“建筑师”公司可能会创建帖子,但“承包商”公司可能不会。
  • 您能否发布一些示例代码来检查这些功能
  • @MattMcDonald 我更新以展示我如何注册和检查用户模型能力,我希望能够以与公司模型相同的方式检查能力。
  • 那么一家公司将被认证到您的应用程序中?或者用户是否会通过身份验证进入您的应用,并且该用户属于公司?

标签: php laravel


【解决方案1】:

目前在您的 User 模型上,您似乎已经定义了一个 hasPermission 函数。

您可以简单地在您的 Company 模型上创建一个类似的方法来检查给定公司的角色和权限。

如果您想使用Gate,您仍然需要通过经过身份验证的用户检查权限,它始终会在经过身份验证的用户的上下文中验证权限 - 但由于用户属于公司,您可以继续公司的权限。

类似于以下内容:

$gate->define('create-post', function ($user) {

    return $user->company->hasPermission('create-post');
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-19
    • 2016-04-23
    • 2020-05-22
    • 2022-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多