Laravel spatie/laravel-permissions 命名规范

7
有关权限命名,我是否应该遵循一些命名准则?目前,我找到的所有内容都只是“添加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命名路由作为指南,因此应该采用以下方式:复数形式、小写字母、用点分隔、包括完整路径(父子关系)。但仅仅因为这是我的偏好,并不意味着它是正确的,因此我向社区寻求意见。

4个回答

5

是否有命名约定?

据我所知没有。正如你指出的,这些示例使用“Create post”等方式是处理它的可怕方式。

在父级(例如:“User Create”,“Users Create”)方面,在使用单数/复数时有任何偏好吗?

这取决于你的用法。以下是使用单数和复数的不同实例的示例。

返回单个用户的路由可以由user.read保护,而返回多个用户的路由则可以由users.read保护。我认为最好的方法是根据您和/或您的团队的理解来使用它。

如果父级和操作需要用空格、点或其他分隔,请说明?(例如:“users.create”;“users create”;“users->create”)

点是首选方法,特别是如果您将使用通配符。

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

完全可以使用,但是在使用通配符权限时要小心。 通配符 权限将允许使用所有子权限。

如果您授予某人usersusers.*权限,它们将能够执行此父级下的所有权限。

大写?小写?驼峰式?

选择一致的样式并坚持使用它。

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

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

好主意。我一直在考虑这个问题。另外,如果供应商的产品具有类似于“编辑帖子”这样的通用名称的权限,怎么办?我正在考虑在所有应用程序权限前面加上某些前缀。 - dougd_in_nc
如果您有多个供应商,并且可能会出现权限名称冲突,您可以在前缀中加上供应商的名称。 - Savlon

4
我会使用 Laravel 在授权资源时使用的相同名称:
  • view(查看)
  • create(创建)
  • update(更新)
  • delete(删除)
你可以在这里阅读更多相关信息:Laravel 中的 Gate 和授权改进

是的,谢谢 - 这很有帮助;但它并没有针对整个问题给出任何反馈 - 只是其中的一部分。 - SupaMonkey

1
在文档中,他们列出了一个示例seeder,并提供其他示例。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,因为似乎不能链接中间件。

0

与其使用foo或者其他什么,不妨直接使用

  • 创建
  • 编辑
  • 查看
  • 更新
  • 删除 在开始进行身份验证时,这将有助于使步骤更加简单。

1
我认为你误解了“foo”/“foobar”等的用法。它只是一个占位符/伪代码。例如,真实的例子可能是users.create;users.delete;等等。 - SupaMonkey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接