Symfony 2 Custom Security Provider - PullRequest
       5

Symfony 2 Custom Security Provider

0 голосов
/ 22 июня 2011

Есть ли способ создать собственного провайдера безопасности без использования сеансов, используя мой собственный класс базы данных и получить пользователя из базы данных с помощью электронной почты, а не без хакерства getUsername, возвращающего электронную почту?

1 Ответ

2 голосов
/ 10 ноября 2011

Вы можете использовать SecurityBundle для этого, например. см. пример ниже:

security.yml

encoders:
        MyComapnyMysuperBundle\Entity\User:
            algorithm: sha512
            encode-as-base64: true
            iterations: 10

    providers:
        main:
            entity: { class: MyComapnyMysuperBundle:User, property: username }

    firewalls:
        main:
            pattern: /.*
            form_login:
                check_path: /login_check
                login_path: /login
            logout: true
            security: true
            anonymous: true

    access_control:
        - { path: /admin/.*, role: ROLE_ADMIN }
        - { path: /.*, role: IS_AUTHENTICATED_ANONYMOUSLY }

Вы можете использовать сущность доктрины в качестве обеспечения безопасности, например, схему yml сущности пользователя:

User.orm.yml

MyComapny\MysuperBundle\Entity\User:
    type: entity
    table: user
    id:
        id:
            type: integer
            generator: { strategy: AUTO }
    fields:
        username:
            type: string
            length: 255
        password:
            type: string
            length: 255
        first_name:
            type: string
            length: 255
        last_name:
            type: string
            length: 255
        email:
            type: string
            length: 255
        created_at:
            type: datetime
        salt:
            type: string
            length: 255
    manyToMany:
        userRoles:
            targetEntity: Role
            joinTable:
                name: user_role
                joinColumns:
                    user_id:
                        referencedColumnName: id
                inverseJoinColumns:
                    role_id:
                        referencedColumnName: id

и роль субъекта:

Role.orm.yml

MyComapny\MysuperBundle\Entity\Role:
    type: entity
    table: role
    id:
        id:
            type: integer
            generator: { strategy: AUTO }
    fields:
        name:
            type: string
            length: 255
        created_at:
            type: datetime

и пример routing.yml

login:
    pattern:  /login
    defaults: { _controller: MyComapnyMysuperBundle:Security:login }

login_check:
    pattern:  /login_check

logout:
    pattern:  /logout

eTracker_home:
    pattern:  /admin/{name}
    defaults: { _controller: MyComapnyMysuperBundle:Admin:index }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...