【问题标题】:Laravel spatie/laravel-permissions Naming ConventionsLaravel spatie/laravel-permissions 命名约定
【发布时间】:2019-01-19 12:31:24
【问题描述】:

在命名权限方面我应该遵循一些命名准则吗?现在,我发现的所有内容都只是“添加 Foo”、“编辑 Foo”、“删除 Foo”、“添加 FooBar”、“编辑 FooBar”、“删除 FooBar”等等。

请记住,没有分组(这真的很遗憾),并且当您拥有所有上述权限的管理屏幕时 - 上述方法似乎很草率。

你所有的“添加”都在一起,“编辑”在一起,等等。 例如:

 - Add Foo
 - Add FooBar
 - Add FooBarBez
 - Edit Foo
 - Edit FooBar
 - Edit FooBarBez
 - Delete Foo
 - Delete FooBar
 - Delete FooBarBez

现在我倾向于路线名称的样子,例如:

 - foo.add
 - foo.edit
 - foo.delete
 - foobar.add
 - foobar.edit
 - foobar.delete
 - foobarbez.add
 - foobarbez.edit
 - foobarbez.delete

在将所有“父”权限放在一起(即:所有 Foo 放在一起、所有 FooBar 放在一起等)方面更有条理。当然,如果有这方面的实际指导方针,请告诉我,或者如果您有其他宝贵的意见/建议?

//为清晰而编辑更新

具体来说,

- __Are__ any naming conventions? 
- Are there any preferences in terms of use of singular/plural when it comes to parents (eg: "User Create", "Users Create")
- If parents and action should be separated with a space, a dot, something else? (eg: "users.create"; "users create"; "users->create")
- What about nested resources (Parent.Child)? eg: "users.banking_details.create"
- Captilisation? Lowercase? Camel Case?

如前所述,倾向于 laravel 命名路线作为指导方针,因此将是:复数,小写,用点分隔,包括完整路径(父+子关系)。仅仅因为这就是我所倾向于的,并不意味着它是正确的,因此我向社区征求意见:)

【问题讨论】:

    标签: laravel laravel-5 naming-conventions user-permissions laravel-permission


    【解决方案1】:

    我会使用the same names that Laravel uses when authorizing resources:

    • view
    • create
    • update
    • delete

    您可以在此处阅读更多相关信息:Gate and authorization improvements in Laravel

    【讨论】:

    • 是的,谢谢 - 这很有帮助;但没有就整个问题提供任何反馈 - 只是其中的一部分。
    【解决方案2】:

    不要使用 foo 什么的,只需使用

    • 创建
    • 编辑
    • 查看
    • 更新
    • 销毁 当您开始进行身份验证时,它会有所帮助并使这些步骤更容易。

    【讨论】:

    • 我认为您误解了“foo”/“foobar”等的使用。它只是一个占位符/伪代码。即一个真实的例子是 users.create ; users.delete ;等
    【解决方案3】:

    在文档中,他们列出了一个示例播种器,并提供了其他示例。 https://github.com/spatie/laravel-permission

    'edit articles'
    'delete articles'
    'publish articles'
    'unpublish articles'
    

    我认为这不是一个好的约定,所以我最终在 PostController 中使用了这个:

    function __construct()
    {
      $this->middleware('auth', ['except' => ['index', 'show']]);
      $this->middleware(['permission:post create'], ['only' => ['create', 'store']]);
      $this->middleware(['permission:post edit'],   ['only' => ['edit', 'update']]);
      $this->middleware(['permission:post delete'], ['only' => ['delete']]);
    }
    

    我每次都必须使用 $this,因为您似乎无法链接中间件。

    【讨论】:

      【解决方案4】:

      有任何命名约定吗?

      我不知道。正如您所指出的,这些示例使用“创建帖子”等,这是一种可怕的处理方式。

      当涉及到父母时,在使用单数/复数方面是否有任何偏好(例如:“用户创建”、“用户创建”)

      这真的取决于你的使用情况。下面是一个在不同实例中使用单数和复数的示例。

      返回单个用户的路由可以受user.read 保护,返回多个用户的路由可以受users.read 保护。我认为最好的方法是使用对您和/或您的团队有意义的方法。

      如果父母和行动应该用空格、点或其他东西分开? (例如:“users.create”;“用户创建”;“users->create”)

      点是首选方法,尤其是在您要使用通配符时。

      嵌套资源(Parent.Child)呢?例如:“users.banking_details.create”

      使用起来非常好,但是在涉及通配符权限时要小心。 wildcard 权限将授予使用 ALL 子权限的权限。

      如果您要授予某人usersusers.* 被视为相同的权限,他们将能够执行此父级下的所有权限。

      资本化?小写?骆驼案?

      选择一致的风格并坚持下去。

      我个人使用 Web 操作 (CRUD) 常用的命名约定。

      task.create
      task.read
      task.update
      task.delete
      

      【讨论】:

        猜你喜欢
        • 2020-09-15
        • 1970-01-01
        • 1970-01-01
        • 2020-01-25
        • 2017-05-30
        • 2021-05-01
        • 2015-07-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多