2

우리는 권한 부여 사항이 교차 관심사라는 것을 알고 있으며 우리가보기에는 비즈니스 논리를 병합하지 않을 수있는 모든 조치를 취하고 있습니다.ASP.Net MVC의 우아한 UI 및 ModelBinder 승인

그러나 비즈니스 로직으로보기를 오염시키지 않으면 서 현재 사용자 역할을 사용하여 UI 구성 요소 (예 : 위젯, 양식 요소, 표 등)를 필터링하는 우아한 방법을 찾지 못했습니다. 모델 바인딩에도 동일하게 적용됩니다.


형태 : 제품 만들기

분야 :

  • 이름
  • 가격
  • 할인

역할 :

    • 보고 수정
    • 볼 수있는 이름 필드와 가격 필드를 수정할 수 있나요 역할 관리자
    • th를보고 수정할 수 있습니다. 전자 할인
  • 역할 관리자 보조

    • 는 가격

Fields을보고

  • 볼 수있는 이름을 수정하고 수정하도록 허용 각 역할에 표시된 다른, 또한 model binding은 '관리자 보조자'역할의 경우 discount field을 무시해야합니다.

    어떻게 할 수 있습니까?

  • +0

    화면에 EditorFor()를 사용하고 있습니까? – jfar

    +0

    아직 없습니다. MVC 1 (마이그레이션 예정)을 사용하고 있습니다. 이유는 무엇입니까? – SDReyes

    +2

    템플릿이있는 도우미와 모델 메타 데이터를 사용하면 훨씬 쉽습니다. – jfar

    답변

    1

    컨트롤러에 권한 부여 공급자에 대한 현재 사용자와 액세스 권한이 이미 있으므로이 권한이 가장 이상적입니다. 순진한 구현을 사용하면 현재 사용자가 액세스 할 수있는 위젯을 필터링 한 후에 위젯 모음을보기로 전달할 수 있습니다. 양식 필드의 경우 클라이언트 측 유효성 검사를 고려할 때 사소한 문제가 발생할 수 있습니다.

    바인딩 부분이 가장 직선입니다.이 특수한 경우를 위해 사용자 지정 바인더를 사용하면 컨트롤러 컨텍스트에 대한 액세스 권한을 가지므로 특수한 작업을 수행 할 수 있으며 현재 사용자를 붙잡고 바인딩 할 수 있습니다 역할 정의에 따른 값.

    +0

    안녕하세요 호세, MVC 컨텍스트에서 나는 컨트롤러에'UI' 및'ModelBinding' 로직을 넣는 것에 동의합니다. (사용자는 이러한 경우에 이미 존재하는 사용자 정의 ModelBinders 외에도 필요한 모든 구성 요소에 액세스 할 수 있습니다). 멋진 접근 +1 – SDReyes

    3

    내가 생각하기에 이것은 input extension methods의 고유 버전을 만드는 것이라고 생각할 수 있습니다. 대신 TextBox의 예를 들어, 당신은 TextBoxRoles을 만들 수 있으며, 이런 식으로 정의 :

    public static MvcHtmlString TextBoxRoles(
        this HtmlHelper htmlHelper, 
        string name, 
        string RolesEdit, 
        string RolesView 
    ) 
    

    다음 코드는 다음과 같을 것이다 :

    <%= Html.TextBoxRoles("Price", "Administrator","Administrator,Assistant") %> 
    

    그런 TextBoxRoles의 구현은 현재의 역할을 확인할 것 사용자에게 User.IsInRole()을 통해 페이지에 표시 할 내용을 결정하십시오.

    물론 모든 입력 확장 방법에 대해이 작업을 수행해야합니다.

    +0

    안녕하세요 Keltex, 좋은 workaroud +1!, 그럼에도 불구하고,이 방법을 사용하여 여전히 당신의보기에 권한 부여 역할을 정의 할 수 있습니다 : |. 우리가이 모든 논리를 다른 층으로 옮길 수 있을지 궁금합니다. 어떻게 생각해? 다시 Keltex에 감사드립니다! : D – SDReyes

    1

    LinFu, AOP 프레임 워크와 같은 것은 어떻습니까? 그것이 크로스 커팅 (crosscutting)이라면, 그렇게 선언하고 그렇게 취급하십시오.

    +0

    안녕하세요 스캇, AOP 아주 좋은 접근 +1처럼 보입니다, 감사합니다!. 당신은 헬퍼로부터 렌더링 방법을 가로 채고 권한 부여 로직을 추가하는 것과 같은 것을 의미합니까? – SDReyes