2017-01-10 1 views
3

Symfony 3부터 시작하겠습니다. 동적 인증 및 인증 구현 프로세스를 진행하는 방법에 대한 지침이 필요합니다.Symfony3 인증 프로세스

우선 인증 비트가 거의 완료되었습니다.이 링크는 symfony의 문서 (http://symfony.com/doc/current/security/entity_provider.html)에 따라 작성되었습니다. 아직 이해해야 할 것은 데이터베이스에서 값을 반환하기 위해 (사용자 테이블과 관련된 테이블 역할이 있습니다) 인터페이스 함수 getRoles()을 구현하는 방법입니다.

두 번째로 인증 부분. 내 응용 프로그램은 최종 사용자가 자신의 액세스 메커니즘을 만들 것을 요구합니다. 즉, 사용자가 역할을 만들고 로그인 할 수있는 페이지와 권한이있는 페이지를 정의하는 인터페이스가 있습니다 (작성, 읽기, 업데이트, 삭제 등). 그 후에 역할은 응용 프로그램 사용자에 기인합니다.

Symfony가 깨끗하게 할 수 있도록 모든 것이 꽤 표준적인 것입니다. 지금까지 알아 낸 점은 ACL을 사용해야한다는 것입니다. 따라서 문서에서와 같이했습니다. http://symfony.com/doc/current/security/acl.html

정직한 질문은 무엇입니까? 지금은 무엇입니까? 인증 메커니즘을 완전히 구현하려면 어떤 단계를 밟아야합니까? 액세스 규칙을 유지하고 검색하기 위해 지금해야 할 일은 무엇입니까? 그것들을 사용자 역할과 어떻게 관련 지을 수 있습니까?

P.S :이 질문은 여기에 몇 가지 다른 질문이 중복되어있을 수도 있지만 진실을 말하면 그 질문은 나를 도울 수 없으며 문서에서 내 청소도하지 못했습니다.

답변

3

귀하의 질문은 매우 광범위합니다. 어쨌든 좋은 질문이므로 회신을하겠습니다. 심포니에서 등록/로그인 시스템을 구현하는 가장 좋은 방법이며, 그것은 당신에게 아이디어를 줄 것이다 :

인증 여기에 말을

아무것도 기사 자체에 의해 제안, 간단히 말해서 나는 당신이 FOSUserBundle을 사용 희망 전체 프로세스가 작동하는 방식에 대해 설명합니다. Symfony 경험이없는 개발자라면 처음부터 시작하는 것이 가장 좋은 아이디어는 아닙니다.

FOSUserBundle 시도하십시오! Voters의 사용과 ACL의 사용 : 인증에 대해

인증 과정

당신은 기본적으로 두 가지 옵션이 있습니다.

제 경험상 최상의 옵션은 Voters입니다.

대부분의 경우 실제로 사용자와 권한이있는 객체 사이의 엔티티에서 양방향 참조 (Doctrine의 documentation about this 참조)를 갖게됩니다. 이 경우 ACL은 필요하지 않으며 권장하지 않습니다.

실제로 ACL은 두 개의 개체 (사용자 및 사용 사례의 기사) 간의 관계를 만드는 것 이상을 수행하지 않습니다. 이 관계를 관리하려면 데이터베이스의 테이블을 사용하므로 을 쿼리하여 관계를 가져와 권한 부여 권한을 확인해야합니다.

엔티티에서 사용자와 기사/그룹 간의 직접적인 양방향 참조가 이미있는 경우이 관계가 이미 설정되어 있으므로 유권자를 사용할 수 있으며 ACL 사용은 불필요하며 심지어 짝수입니다. 말했듯이, 그것은 쓸데없는 복제이기 때문에 낙담했다.

엔티티에서이 양방향 관계가없는 경우 엔티티를 작성하십시오. 미래에 다른 것들에 유용 할 것이고 어쨌든 당신은 당신의 엔티티에서 직접 링크 된 엔티티에 액세스 할 수 있습니다. 엔티티 트리!

더 많은 경우 시나리오에 따라 ACL을 사용할 수 없으므로 개체에 대한 사용자 지정 권한/권한이 있습니다. 유권자가 이런 종류의 작업을 수행 할 수있는 최상의 옵션입니다.

내가 할 것이 첫 번째 일을하려면 어떻게

Don't use ACL, but Voters insteadinterface 가능한 모든 권한에 나열하는 것입니다 : 결국, 그들은 엄격하게 애플리케이션 비즈니스 로직에 관련된 사용자가 앱이 할 수없는 작업을 수행 할 수 없도록하기 때문에 : 애플리케이션이 편집 흐름을 구현하지 않으면 사용자가 다른 사용자에게 기사를 수정할 수있는 권한을 부여 할 수 없습니다 . 그것은 분명합니다.

그래서,이 같은 좋은 될 수있다 : 당신이 볼 수 있듯이

interface PrivilegesEnum 
{ 
    const CREATE = 1; 
    const EDIT = 2; 
    const DELETE = 4; 
    const READ = 8; 
    const OTHER = 16; 
    // ... Other privileges 
} 

, 나는 각 권한에 숫자 값을 준이 정말 강력한 당신에게 비트 마스크를 사용할 수있는 기능을 제공합니다 메커니즘을 사용하면 데이터베이스의 한 필드 만 사용하여 모든 권한을 나열 할 수 있습니다.

현재 비트 마스크에 대한 자세한 내용을보실 수 있습니다 :

내가 과거에이 시스템을 사용

  • http://php.net/manual/it/language.operators.bitwise.php
  • http://php.net/manual/en/language.operators.bitwise.php

  • How to implement a bitmask in php? 12,359,817,내가 수집 한 몇 가지 유용한 링크입니다. 그들은 너를 도울지도 모른다!

    BUILD 형태는 특권

    당신이 유용하게 사용할 수있는 또 다른 것은 사용 가능한 권한을 목록에 FormType입니다 나열하려면 :이 간단한 custom FormType를 작성 할 수 있습니다. 역할을 관리하려면

    관리하는 방법에 ROLES

    how Roles are managed by the Security Component를 읽고 사용자 및 그룹과 기사

    당신이해야이 지점에 도달하면 BETWEEN FOSUserBundle (on Stackoverflow)

    의 관계에서 더 많은 엔티티를 가지고 있고, Doctrine 관계 메커니즘에 대해 더 잘 알고 있고 사용자를 자신의 역할과 관련시킬 수 있어야합니다. eir 그룹 및 기사.

    어쨌든 구체적인 구현을 위해 더 잘 생각하는 데 필요한 개념적 도구와 실용적인 도구가 모두 필요합니다. 당신이 볼 수 있듯이, 인증 과정은 그렇게 간단하지가 얼마나 이러한 유형을 구현

    FINAL 참고

    .

    나는 앱 개발의이 단계에서 정말 필요한지 매우 신중하게 생각해보십시오. 앞으로 앱을 연기 할 수 있다면, 그렇게 할 것을 제안합니다.

    최대한 빨리 온라인 상태로 전환하려면이 시스템을 구현하는 데 코드를 배우고 구현하고 디버그하고 재 작성하는 데 많은 시간이 필요합니다.

    이 시간이 있다면이 시스템을 구현하십시오. 그러나 당신이 이번에는 모두가 아니라고 생각한다면, 더 "정적 인"시스템으로 가서 온라인으로 가서 "동적"으로 만드십시오.

    결국 이것은 Lean Startup era입니다!

    행운을 빈다.

  • +2

    답변에 느리게 박수 친다! 그것은 승인/인증 주제에 관심있는 모든 사람들을위한 금광입니다 ... –

    +0

    큰 반향을 보내 주셔서 감사합니다. 나는 그것을 할 것이며 가능한 한 빨리 내 의견을 알려 드리겠습니다. 제대로 구현하려면 시간이 걸릴 것이지만 실제로 필요합니다. 저는 이미 Java로 처음부터이 작업을 수행했습니다. 그러나 모든 것을 자신의 방식으로 수행하는 데 너무 많은 것을 묶는 프레임 워크를 사용하지 않았습니다. 그래서 나는 그 뒤에있는 논리를 잘 알고있다. (나는 실제로 그것을 다시하고 Symfony 보안 설정을 '오버라이드 (override)'하려고 시도하고있다. 기본적으로 나는 Symfony 방식으로 고심하고있었습니다. – Eduardo

    +0

    글쎄, 유권자 ... 솔직히 말해서 "유권자를 사용하라"는 말은 내 문제를 실제로 해결하지 못한다. 아마도 나는 그들에 관한 문서를 이해하지 못했을 것이다. 그리고 저는 왜 그런지 깨달았습니다. 여러분에게 질문을 드리겠습니다 : 모든 대상에 대해 유권자를 만들어야합니까? – Eduardo