我对我长期以来想要了解的角色有一些疑问:
1.我们有一些捆绑,我们在几个项目中使用.我们想在bundle配置中定义角色,这样我们就不会将角色复制到role_hierarchy中security.yml.有没有干净的方法呢?
我的第一个想法是将它们导入到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%"
Run Code Online (Sandbox Code Playgroud)
这当然不起作用.有没有可能这样做(在yaml中合并数组)?
我的另一个想法是将角色存储在数据库中,但在我看来这是过度的,因为我们没有动态角色.一切都是静止的.
是否有任何解决方法可以实现我的目标?或者在捆绑中定义它是一个好主意?
2.我使用角色作为权限(ROLE_POST_EDIT,, ROLE_POST_DELETE...)和选民拒绝或批准对资源的访问.所以最后有很多角色.将角色与权限混合是一个好主意吗?如果不是最佳做法是什么?
编辑:我感觉之间的差异ROLE_POST_EDIT和ROLE_USER或ROLE_ADMIN.用户有,ROLE_USER因为他是用户.但是用户有"权限ROLE_EDIT_POST"才能编辑帖子.在我看来,两者之间存在差异.无论如何我应该关心这种差异还是有其他的做法怎么办?
- 我们在一些项目中使用了一些捆绑包.我们想在bundle配置中定义角色,这样我们就不会将角色复制到security.yml中的role_hierarchy中.有没有干净的方法呢?
您可以使用Prepended Extensions "添加"另一个扩展的配置:
class AcmeHelloExtension extends Extension implements PrependExtensionInterface
{
// ...
public function prepend(ContainerBuilder $container)
{
$container->prependExtensionConfig('security', [
'role_hierarchy' => [
'ROLE_ADMIN' => ...
...
],
]);
}
}
Run Code Online (Sandbox Code Playgroud)
- 我使用角色作为权限(ROLE_POST_EDIT,ROLE_POST_DELETE,...)和选民拒绝或批准对资源的访问.所以最后有很多角色.将角色与权限混合是一个好主意吗?如果不是最佳做法是什么?
小misconfusion在这里:你所定义的角色role_hierarchy是不相关的,你传递给的东西isGranted().你正在传递属性isGranted().不幸的是,对于RoleHierarchyVoter,symfony决定将属性similair设置为角色名称(即,如果角色名称以#开头ROLE_).
选民在调用权限或属性时进行投票.因此,拥有许多权限是完全有效和良好的做法isGranted().
但是,我建议不要启动它们ROLE_*.RoleVoter/RoleHierarchyVoter检查这些属性.它们命名例如POST_EDIT,POST_DELETE:
if ($this->isGranted('POST_EDIT', $post)) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
148 次 |
| 最近记录: |