Symfony2安全性:多个提供者

And*_*iaz 6 symfony symfony-security

我的项目中有2个包:

  • SRC /韩国/ AlmacenBundle
  • SRC /加尔韦斯/ RepuestosBundle

每个都有自己的数据库

  • korea_motos - > AlmacenBundle
  • galvez_motos - > RepuestosBundle

实际上我的security.yml只有一个提供者:

providers:
    korea:
        entity: { class: Korea\AlmacenBundle\Entity\Usuario, property: username }
Run Code Online (Sandbox Code Playgroud)

如您所见,两个bundle都通过同一个表进行身份验证:Usuario,在korea_motos中

表:Usuario(korea_motos数据库)

--ID-- | ---- ---- USERNAME | ---------管束---

----- ----- 1 | -------------管理---------------- | ------- --- AlmacenBundle ----------

----- ----- 2 | -------------管理---------------- | ------- --- RepuestosBundle -------

现在我想验证用户,对于RepuestosBundle,在galvez_motos中使用表Usuario,删除上一表中的"bundle"列.

问题出在security.yml文件中.如果我这样做:

providers:
    korea:
        entity: { class: Korea\AlmacenBundle\Entity\Usuario, property: username }
    galvez:
        entity: { class: Galvez\RepuestosBundle\Entity\Usuario, property: username }
Run Code Online (Sandbox Code Playgroud)

Symfony发布了一个例外:

The class 'Galvez\RepuestosBundle\Entity\Usuario' was not found in the chain configured namespaces Korea\AlmacenBundle\Entity
Run Code Online (Sandbox Code Playgroud)

我试图使用2个提供商,每个捆绑一个表..这可能吗?

文件:security.yml

jms_security_extra:
secure_all_services: false
expressions: true
Run Code Online (Sandbox Code Playgroud)

security:encoders:Korea\AlmacenBundle\Entity\Usuario:algorithm:sha1 encode_as_base64:false iterations:1 Galvez\RepuestosBundle\Entity\Usuario:algorithm:sha1 encode_as_base64:false iterations:1

role_hierarchy:
    ROLE_ADMIN:       ROLE_USER
    ROLE_SUPER_ADMIN: [ ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH ]

providers:
    korea:
        entity: { class: Korea\AlmacenBundle\Entity\Usuario, property: username }
    galvez:
        entity: { class: Galvez\RepuestosBundle\Entity\Usuario, property: username }

firewalls:
    dev:
        pattern:  ^/(_(profiler|wdt)|css|images|js)/
        security: false

    login:
        pattern:  ^/demo/secured/login$
        security: false

    secured_area:
        pattern:    ^/
        anonymous: ~
        access_denied_handler: accessdenied_handler
        form_login:
            login_path:  /login
            check_path:  /login_check
            default_target_path: /redirect
            always_use_default_target_path: true
        logout:
            path:   /logout
            target: /login
        #anonymous: ~
        #http_basic:
        #    realm: "Secured Demo Area"

access_control:
    - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/redirect, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/galvez, roles: ROLE_ADMIN_GALVEZ }
    - { path: ^/, roles: ROLE_ADMIN_KOREA }
Run Code Online (Sandbox Code Playgroud)

config.yml - 无法复制/粘贴所有:(

doctrine:
dbal:
    default_connection:   default
    connections:
        default:
            driver:   "%database_driver%"
            dbname:   "%database_name%"
            user:     "%database_user%"
            password: "%database_password%"
            host:     "%database_host%"
            port:     "%database_port%"
            charset:  UTF8
        galvez:
            driver:   %database_driver%
            dbname:   %database_name2%
            user:     %database_user2%
            password: %database_password2%
            host:     %database_host%
            port:     %database_port%
            charset:  UTF8
orm:
    default_entity_manager:   default
    entity_managers:
        default:
            connection:       default
            mappings:
                AlmacenBundle: ~
        galvez:
            connection:       galvez
            mappings:
                RepuestosBundle: ~
Run Code Online (Sandbox Code Playgroud)

parameters.yml

parameters:
database_driver: pdo_mysql
database_host: localhost
database_port: null
database_name: korea_motos
database_user: root
database_password:
mailer_transport: smtp
mailer_host: localhost
mailer_user: null
mailer_password: null
locale: en
secret: 5f7ac4e7c2b38d6dbe55a1f05bee2b02
database_path: null

database_name2: galvez_motos
database_user2: root
database_password2:
Run Code Online (Sandbox Code Playgroud)

PD:Sry for my english:S

Cal*_*ino 11

老问题,但对于任何寻找解决方案的人来说,手册都在这里解释了一切.基本上,您需要像这样链接您的提供者:

# app/config/security.yml
security:
    providers:
        chain_provider:
            chain:
                providers: [korea, galvez]
        korea:
            entity: { class: Korea\AlmacenBundle\Entity\Usuario, property: username }
        galvez:
            entity: { class: Galvez\RepuestosBundle\Entity\Usuario, property: username }
Run Code Online (Sandbox Code Playgroud)


Mar*_*tis 0

这可能是您的类的名称空间的问题。检查类是否Galvez\RepuestosBundle\Entity\Usuario位于正确的命名空间中以及配置是否正确 - 也许您不小心留下了其他实体的一些复制粘贴代码。

尝试保留这两个实体并获取它们(没有安全上下文) - 我想你会在那里找到你的问题。