Symfony2 用户权限管理
Symfony2 User permission managment
我来找你是因为我对 Symfony2 的用户及其权限管理有点担心。
让我解释一下:
我设置了 FOSUserBundle:
我现在想做的是权限管理。我有一个实体 'Post'。
我有具有以下指定角色的用户。
ROLE_GUEST - VIEW,RATE
ROLE_USER - VIEW,CREATE,RATE,EDIT_OWN
ROLE_EDITOR - VIEW,CREATE,RATE,EDIT,DELETE
我想为每个角色设置执行特定操作的权限。
谢谢:)
如果我正确理解您的必要性,您希望拥有一个基于这些角色的安全层。您可以通过多种方式做到这一点:
symfony 默认方式 -
你可以像下面的例子那样配置symfony的安全层
# app/config/security.yml
security:
# ...
access_control:
- { path: ^/post/view, roles: VIEW }
- { path: ^/post/rate, roles: RATE }
# etc
这将负责路由访问控制。有关 http://symfony.com/doc/current/cookbook/security/access_control.html
的更多信息
对于像 EDIT_OWN 这样更复杂的角色,您可以采用直接方法
if (!$post->isAuthor($this->getUser())) {
$this->denyAccessUnlessGranted('EDIT', $post);
// or without the shortcut:
//
// use Symfony\Component\Security\Core\Exception\AccessDeniedException;
// ...
//
// if (!$this->get('security.authorization_checker')->isGranted('edit', $post)) {
// throw $this->createAccessDeniedException();
// }
} else {
$this->denyAccessUnlessGranted('EDIT_OWN', $post);
}
对于所有这些以及更多内容,您可以查看 symfony 站点 http://symfony.com/doc/current/best_practices/security.html
对于更高级的角色或 ACL 要求,也请查看此处 https://symfony.com/doc/current/components/security/authorization.html and at the authorization voters https://symfony.com/doc/current/components/security/authorization.html#voters
在我在此 post 中提供的 4 个链接中,您应该可以找到实现 RBAC 和 ACL 所需的一切。您还可以找到有关您可能想要使用的一些注释的信息。还有一些对 symfony 安全层的扩展可能会派上用场,具体取决于您正在使用的 symfony 版本,例如 JMS\SecurityExtraBundle.
希望对您有所帮助,
亚历山德鲁·科索伊
我来找你是因为我对 Symfony2 的用户及其权限管理有点担心。
让我解释一下:
我设置了 FOSUserBundle:
我现在想做的是权限管理。我有一个实体 'Post'。 我有具有以下指定角色的用户。
ROLE_GUEST - VIEW,RATE
ROLE_USER - VIEW,CREATE,RATE,EDIT_OWN
ROLE_EDITOR - VIEW,CREATE,RATE,EDIT,DELETE
我想为每个角色设置执行特定操作的权限。
谢谢:)
如果我正确理解您的必要性,您希望拥有一个基于这些角色的安全层。您可以通过多种方式做到这一点:
symfony 默认方式 - 你可以像下面的例子那样配置symfony的安全层
# app/config/security.yml
security:
# ...
access_control:
- { path: ^/post/view, roles: VIEW }
- { path: ^/post/rate, roles: RATE }
# etc
这将负责路由访问控制。有关 http://symfony.com/doc/current/cookbook/security/access_control.html
的更多信息对于像 EDIT_OWN 这样更复杂的角色,您可以采用直接方法
if (!$post->isAuthor($this->getUser())) {
$this->denyAccessUnlessGranted('EDIT', $post);
// or without the shortcut:
//
// use Symfony\Component\Security\Core\Exception\AccessDeniedException;
// ...
//
// if (!$this->get('security.authorization_checker')->isGranted('edit', $post)) {
// throw $this->createAccessDeniedException();
// }
} else {
$this->denyAccessUnlessGranted('EDIT_OWN', $post);
}
对于所有这些以及更多内容,您可以查看 symfony 站点 http://symfony.com/doc/current/best_practices/security.html
对于更高级的角色或 ACL 要求,也请查看此处 https://symfony.com/doc/current/components/security/authorization.html and at the authorization voters https://symfony.com/doc/current/components/security/authorization.html#voters
在我在此 post 中提供的 4 个链接中,您应该可以找到实现 RBAC 和 ACL 所需的一切。您还可以找到有关您可能想要使用的一些注释的信息。还有一些对 symfony 安全层的扩展可能会派上用场,具体取决于您正在使用的 symfony 版本,例如 JMS\SecurityExtraBundle.
希望对您有所帮助,
亚历山德鲁·科索伊