gpt4 book ai didi

symfony - 在捆绑配置中定义角色

转载 作者:行者123 更新时间:2023-12-04 18:02:44 26 4
gpt4 key购买 nike

我有一些关于角色的问题,我想了解很长时间:

1. 我们在几个项目中使用了一些捆绑包。我们想在捆绑配置中定义角色,这样我们就不会将角色复制到 security.yml 中的 role_hierarchy 中。 .有什么干净的方法可以做到吗?

我的第一个想法是将它们导入到 role_hierarchy 中,如下所示:

role_hierarchy:
ROLE_ADMIN: ROLE_USER, ROLE_TRANSLATOR
ROLE_SUPER_ADMIN: ROLE_ADMIN
ROLE_NOT_APPROVED_USER: ROLE_USER
ROLE_TRANSLATOR: ROLE_USER
"%base_bundle.role.hierarchy%"

这当然行不通。有没有可能这样做(在yaml中合并数组)?

我的另一个想法是将角色存储在 DB 中,但在我看来这有点矫枉过正,因为我们没有动态角色。一切都是静态的。

有什么解决方法可以实现我尝试做的事情吗?或者在一个包中定义它是个好主意吗?

2. 我使用角色作为权限( ROLE_POST_EDITROLE_POST_DELETE 、...)和投票者来拒绝或批准对资源的访问。所以最后有很多角色。将角色与权限混合使用是个好主意吗?如果不是,最好的做法是什么?

编辑:感觉 ROLE_POST_EDIT的区别和 ROLE_USERROLE_ADMIN .用户有 ROLE_USER因为他是用户。但是用户有“权限 ROLE_EDIT_POST”可以编辑帖子。在我看来,两者是有区别的。无论如何,我应该关心这种差异还是有其他练习怎么做?

最佳答案

  1. We have some bundles that we use in couple of projects. We would like to define roles in a bundle config, so that we do not copy roles into the role_hierarchy in security.yml. Is there any clean way to do it?


您可以使用 Prepended Extensions “前置”另一个扩展的配置:

class AcmeHelloExtension extends Extension implements PrependExtensionInterface
{
// ...

public function prepend(ContainerBuilder $container)
{
$container->prependExtensionConfig('security', [
'role_hierarchy' => [
'ROLE_ADMIN' => ...
...
],
]);
}
}

  1. I use roles as permissions (ROLE_POST_EDIT, ROLE_POST_DELETE, ...) and voters to deny or approve access to the resource. So at the end there are a tons of roles. Is it a good idea to mix roles with permissions? If not what is the best practise?


这里有一个小误解:您使用 role_hierarchy 定义的角色和你传给的东西无关 isGranted() .您正在将属性传递给 isGranted() .不幸的是,对于 RoleHierarchyVoter,symfony 决定使属性类似于角色名称(即,如果角色名称以 ROLE_ 开头)。

选民对权限或被称为的属性进行投票。因此,在 isGranted() 中拥有许多权限是完全有效和良好的做法。 .

但是,我建议不要以 ROLE_* 开头。 .这些属性由 RoleVoter/RoleHierarchyVoter 检查。命名它们,例如 POST_EDIT , POST_DELETE :
if ($this->isGranted('POST_EDIT', $post)) {
// ...
}

关于symfony - 在捆绑配置中定义角色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41376951/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com