【问题标题】:ACL implementation in symfony2symfony2 中的 ACL 实现
【发布时间】:2016-03-03 17:27:00
【问题描述】:

我是 symfony 新手,需要处理 ACL 部分 我需要在我的项目中构建 ACl,可以用下表解释

Users/Access    User_List_View  User_Create User_Edit   User_Delete User_Status Edit_ownDetails
Super Admin     Yes             Yes         Yes         Yes         Yes         Yes
Admin           Yes             No          Yes         No          Yes         Yes
Client          No              No          No          No          No          Yes

角色分配

User    Role
User-A  Super Admin
User-B  Admin
User-C  Client
User-D  Client

我已经检查了下面的许多链接
http://symfony-gu.ru/documentation/en/html/cookbook/security/acl.html
https://github.com/Problematic/ProblematicAclManagerBundle
https://www.adayinthelifeof.nl/2012/07/04/symfony2-implementing-acl-rules-in-your-data-fixtures/
http://knpuniversity.com/screencast/question-answer-day/symfony2-users-menu-cms
https://knpuniversity.com/screencast/symfony-voters
http://kriswallsmith.net/page/4
http://problematic.io/2012/03/10/symfony2-bundles-i-cant-live-without/

我发现最受欢迎的是 FOSUserbundle,但我需要使用角色手动编写,同样我还检查了选民,这也是一个很好的选民,但我的客户的要求是他甚至应该能够为每个单独的用户创建自定义权限。所以我需要实现类似 ACL 的表结构,这应该很容易让他在个人层面进行修改。

为了创建一个示例,我尝试实现http://symfony.com/doc/current/cookbook/security/acl.html,但从链接中我并没有清楚地了解在哪里为用户添加角色以及如何检查我的网格中的角色和访问权限。该文档似乎很难理解以实施。

如果有人以某种或其他方式或使用任何第三方库实现了这一点?

即使我在 stackoverflow 中检查了以下链接,但没有可以使用的响应 Symfony Acl implementation
How to make advanced ACL in Symfony2? Check if a role is granted for a specific user in Symfony2 ACL https://stackoverflow.com/questions/6915502/symfony2-acl-roles-and-users

【问题讨论】:

    标签: php symfony doctrine-orm acl fosuserbundle


    【解决方案1】:

    以下是对我有用的解决方案。

    在继续之前,您必须按照http://symfony.com/doc/current/cookbook/security/acl.html中给出的步骤进行操作

    在用户表中将列添加为角色,如问题中角色分配下指定的那样

    在位于 src/AppBundle/Entity/User.php 的 User.php 文件中添加 get 和 set 方法

    /**
    * Set roles
    *
    * @param boolean $roles
    *
    * @return User
    */
    public function setRoles($roles)
    {
        $this->roles = $roles;    
        return $this;
    }
    
    /**
    * Get roles
    *
    * @return boolean
    */
    public function getRoles()
    {
        return array($this->roles);
    }
    

    现在检查上面的 getRoles() 我返回了一个数组,因为 symfony 还提供了一个用户可以拥有多个角色的规定,所以要么你在数据库的角色字段中指定一个数组,要么你指定一个角色并且不仅仅是从你的 user.php 文件中返回一个数组

    请注意您的每个角色都以“ROLE_”为前缀,例如 ROLE_ADMIN、ROLE_USER 等。

    通过上述内容,我们为每个用户指定了 ROLE。

    现在在您的 security.yml 中 指定访问控制

    security:
        encoders:
            AppBundle\Entity\User:
                algorithm: bcrypt
    
        acl:
            connection: default
    
        # http://symfony.com/doc/current/book/security.html#where-do-users-come-from-user-providers
        providers:
            our_db_provider:
                entity:
                    class: AppBundle:User
                    property: username
                    # if you're using multiple entity managers
                    # manager_name: customer
            in_memory:
                memory: ~
    
        firewalls:
            default:
                pattern:    ^/
                http_basic: ~
                provider: our_db_provider
                anonymous: ~
                #http_basic: ~
                form_login:
                    login_path: /login
                    check_path: /login_check
    
        access_control:
            # require ROLE_ADMIN for /admin*
            - { path: ^/admin, roles: ROLE_ADMIN }
    

    【讨论】:

      猜你喜欢
      • 2012-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-11
      • 1970-01-01
      • 2023-03-17
      • 1970-01-01
      相关资源
      最近更新 更多