Symfony2用户权限管理

问题描述:

我来找你是因为我对Symfony2的用户及其权限的管理有点担心。Symfony2用户权限管理

让我解释一下:

我成立了FOSUserBundle:

我想什么现在要做的就是权限管理。我有一个实体“发布”。 我有以下指定角色的用户。

ROLE_GUEST - VIEW,RATE 
ROLE_USER - VIEW,CREATE,RATE,EDIT_OWN 
ROLE_EDITOR - VIEW,CREATE,RATE,EDIT,DELETE 

我想为每个角色设置权限以执行某些操作。

谢谢:)

如果我正确理解你的需要,你想有基于这些角色一个安全层。您可以在5月的方式做到这一点:

symfony的默认方式 - 你可以在下面的例子中

# app/config/security.yml 
security: 
# ... 
access_control: 
    - { path: ^/post/view, roles: VIEW } 
    - { path: ^/post/rate, roles: RATE } 
# etc 

此配置的symfony的安全层一样会照顾路径的访问控制。在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和在授权选民https://symfony.com/doc/current/components/security/authorization.html#voters

在我在这篇文章中提供的4个链接,你应该找到所有y您需要实施RBAC以及ACL。您还可以找到有关您可能要使用的某些注释的信息。还有一些symfony安全层的扩展可能派上用场,取决于你正在使用的symfony版本,比如JMS \ SecurityExtraBundle。

希望这有助于,

亚历Cosoi

+0

对于具体的东西,像编辑但不能删除同一实体,是不是最好使用[选民](http://symfony.com/doc /current/cookbook/security/voters.html)来检查权限? –

+1

@ Bart Bartoman这一切都取决于你的应用程序架构。您可以在应用程序的各个位置限制一项操作。这一切都取决于复杂性和所需的信息,以决定是否允许该行为。因此,如果假设您正在开发rest api,则可以根据角色切换从路由级别开始的访问,但是如果您想要ACL,那么您需要首先检索ACL所控制的数据对象,因此,在这种情况下,选民可以做到这一点。这就是为什么我最后提到选民,以防他需要更复杂的限制规则。 –

+0

最后,为了优化,最好的办法是一旦知道它被限制就立即限制访问。在实践中,我只是在使用选民的时候,想要限制低等级的东西,以及复杂的限制规则,比如编辑实体的属性。但如果需要的话,您可以轻松地从直接方式扩展到选民。 –