2016-08-29 5 views
1

리소스 묶음과 함께 몇 가지 추가 검사를 추가하여 현재 사용자에게 새 리소스를 자동으로 할당하고 (로그인 상태인지 확인) 편집 할 때 현재 리소스가 현재 사용자 사용자가 리소스를 소유하고 있습니까?현재 사용자의 기본 소유권이있는 새 리소스

설정을 통해 가능합니까? 아니면 컨트롤러의 각 동작을 재정의해야합니까?

원래는 여기에 게시 - 당신은 그것을 위해 컨트롤러에 의해 트리거되는 이벤트를 사용할 수 있습니다 https://github.com/Sylius/Sylius/issues/5907

답변

2

그냥 요약하면 다음과 같습니다.

2 사례가 있습니다. 먼저 소유 리소스를 만듭니다. 가장 좋은 방법은 현재 로그인 한 사용자를 확인하기 위해 UserContext를 주입 할 기본 리소스 팩토리를 꾸미는 것입니다. 또는 두 번째 인수로 팩토리 메서드에 전달합니다.

두 번째 것은 리소스를 업데이트하는 것입니다. 소유자 만 리소스를 편집 할 수 있습니까? 자원 ID뿐만 아니라 현재 사용자도받는 일부 저장소 메소드가 작업을 수행합니다. 그런 다음 findByIdAndCustomer 메소드가 있으므로 허용 된 사용자 만 편집 페이지에 액세스 할 수 있습니다. 그렇지 않으면 오류가 표시됩니다. 나는 이것이 404 일 것이라고 추측한다.

이것이 원하는 경우, 두 개의 재정의 된 자원 (사용자 정의 팩토리 및 저장소)으로 끝나고 라우팅을 정의 할 때 yaml에서 나머지를 처리해야한다. 컨트롤러를 변경하지 않아도됩니다.

두 가지 접근 방식 중 일부 비교 :

  1. 아마도 더 빠른 것 리스너를 해결 (하나의 클래스 만 필요) 쉽게.
  2. 이벤트 리스너를 통해 관리하는 경우 라우팅 변경이 필요하지 않습니다.
  3. 팩토리를 오버라이드 (override)하면, 지정된 객체로이 객체가 항상 생성됩니다. 이벤트는 생성 후 데이터베이스로 지속되기 전에 전달됩니다.
  4. 사용자 정의 저장소 방법을 사용하면 편집 페이지를 소유자가 아닌 사용자가 표시 할 수 없습니다.

둘 다 맞습니다. IMHO는 더 빠르며, 두 번째는 더 깨끗합니다. 필요한 것을 결정하십시오.

2

. 살펴보기 : http://docs.sylius.org/en/latest/bundles/general/events.html

수신기에서 사용자가 로그인했는지 여부를 확인할 수있는 security.context 서비스를 삽입해야합니다.

편집 : @ Łukasz의 답을 살펴보십시오. 대안으로 조금 더 깨끗한 해결책이 포함되어 있습니다. ;)

0

Paweł도 이벤트를 추천하고 있습니다.하지만 제가 처음에는 Łukasz가 공장 및 리포지토리의 일부 재정의를 제안했습니다.

나는 둘 다 정확하고 원래의 포스터가 목표를 달성하는 데 도움이된다고 생각하지만, 나는 둘 다 뒤에 논쟁이 무엇인지 궁금합니다.

이 의견의 유일한 목적은이 두 가지 해결책에 대한 토론입니다.