2010-12-14 2 views
4

MVC 3 (RC2)을 사용하는 응용 프로그램과 같은 CMS를 개발 중이며이 시점에서 교차로에 있습니다. 제안 된 접근 방식이 적절한지 아닌지 스스로 확신 할 수 없습니다. 나는 그것이 내가 줄을 많이 무너 뜨리는 데 드는 모퉁이를 자르려고한다는 것을 알고 있기 때문에 그것이라고 생각한다.응용 프로그램 논리 (인증/권한 부여를위한 적절한 장소)

내 문제를 설명 바로 아래로 얻을 것이다 :

1) 나는 (리소스를 편집 가능한 만든되어야하는)을 호출 할 수 있습니다.

  • 는 자신의 자원 자원의
  • 편집 할 수 있습니다 기타 자원

3) 창조주를 편집 할 수 있습니다

2)는 사용자 지정 권한 시스템은 2 (많은) 권한이있는 구현 A는 '자신의 리소스를 편집 할 수 있음'권한이 있으면 편집 할 수 있습니다.

4) 별도의 사용자 만 편집 할 수 A를 그들이 권한이있는 경우 '편집 할 수 있습니다 기타 자원'

이제 요구 사항이 설명되어 있음을, 내가 지금까지 당신이 내 방법을 알려주지 :

1) I 'ResourceController'나는 액션이 ​​불렀다

2) '편집'이라는 컨트롤러가있는 것은

3) 동작은 그것에 속성이 있습니다 : [CustomerAuthorize (Perm.CanEditOwnResource, Perm.CanEditOtherResource, 모든 = TRUE) ]

4) 도메인 유효성 검사를 담당하는 서비스 클래스가 있습니다.

따라서 사용자가 '자체 리소스 편집 가능'또는 '다른 리소스 편집 가능'권한이있는 경우 작업 메서드를 호출 할 수 있습니다.

사용자가 올바른 사용 권한을 가지고 있는지 여부 (리소스를 소유하고 있는지 여부에 따라 결정) (어떻게 결정해야합니까?) 컨트롤러 작업, 리소스 서비스 클래스 , 별도의 서비스 클래스에? 서로 다른 의견을 듣기 위해 대기

...

답변

2

MVC의 본질 때문에 다양한 지점에서 인증 검사를하고 싶을 것입니다.

하나의 경우 UI에 시각적 신호를 표시 할 수 있어야합니다 (예 : 수정 버튼을 표시하거나 표시하지 않음). 그러면 로직을 조회수에서 사용할 수 있어야합니다.

물론 UI 용입니다. 누군가가 UI에 액세스하여 액세스하는 경우를 대비하여 컨트롤러 동작에 대한 인증/권한 부여를 원할 것입니다.

마지막으로 작업을 인증하고 승인하는 가장 안전한 장소는 수행하기 직전입니다. 예를 들어, 핸들러가있는 경우 여기에 권한 부여 로직을 배치합니다. 누군가 다른 곳에서 서비스를 호출하여 아무도 보안 논리를 쓸 수 없도록하고 그 서비스에 제한이 있음을 알지 못하게하려고합니다. 이렇게하면 보안 옵션을보다 세부적으로 만들 수 있습니다.

+0

하지만 그 논리의 중복은? 같은 수표를 여러 번 반복하면됩니까? 하지만 당신의 우려를 이해합니다. 패턴을 배우기 위해 일부 OSS 프로젝트를 볼 수 있는지 궁금합니다. – kidoman

+0

@ KiD0M4N : 반복하지 않는 것보다 장기간 유지 보수 고려 사항을 포함한 일부 논리를 반복하는 것이 더 쉬운 시나리오가 있습니다. 즉 때로는 기술적 제약이나 기존 디자인 결정에 따라 완전히 순수한 "반복하지 말고 자신을 추구하는"것이 부당하게 어렵습니다. –

0

한 가지 방법은 "EditOwnResource"와 "EditOtherResource"을 가지고, 그것은이 작업을 대신 전용 "편집"을하는 것입니다 접근합니다. 그런 다음 각각에 대해 단일 사용 권한을 설정할 수 있습니다.

MVVM 패턴을 사용하는 경우 이러한 작업의 가용성을 ownResource 또는 otherResource 인 것으로 바인딩 할 수 있습니다. 이러한 값의 설정은 뷰 모델에서 수행됩니다.

+0

ASP.NET MVC를 사용하고 있습니다. 따라서 MVVM 비트는 적용되지 않습니다. 그러나 나는 두 개의 분리 된 앞 단계 행동에 관해 생각할 것이다. 하지만 아마도 내 특정 사건에서 가능하지 않을 것입니다 – kidoman

관련 문제