문제

asp.net 멤버십, 역할 공급자 등을 설정하는 데 대한 많은 질문(및 정보)이 있습니다.Microsoft에서 제공하는 기본 제공 플랫폼을 사용해야 하는지 아니면 자신만의 기본 클래스와 역할을 확장해야 하는지 여부입니다.

저는 기본 공급자를 확장하고 자체 멤버십 및 역할 공급자를 구현하기로 결정했습니다.이제 내 질문은 특히 역할 인증에 관한 것입니다.

전통적으로는 '관리자, 관리자, 직원, 슈퍼 유저' 등 원하는 역할을 만들었습니다.하지만 내가 더 세밀한 통제라고 생각하는 권한과 관련하여 무엇을 하시겠습니까/해야 합니까?자세히 설명하자면....

내 asp.net mvc 사이트에는 관리, 관리, 메시징, 보고 등과 같은 다양한 영역이 있습니다.나는 '관리자', '관리자', '보고자' 등과 같은 이들 각각에 대한 역할을 만들 것입니다.적절한 역할이 없으면 사이트의 해당 영역에 액세스할 수 없습니다.그래서 클래스 수준에서 이를 사용하여 전체 컨트롤러를 잠급니다.

하지만 이제 한 영역을 예로 들어 보겠습니다.메시지를 보내고 CRUD에 대한 더 세부적인 권한을 갖고 싶다고 말합니다.메시지 작성, 메시지 보기/읽기, 메시지 편집, 메시지 삭제 등

마지막으로 내 질문입니다.이렇게 세밀한 제어를 구현하는 것이 가장 좋은 방법은 무엇일까요?내가 보기에(좋은지 확실하지 않음) 한 가지 접근 방식은 모든 것에 대해 asp.net 멤버십 역할을 만드는 것입니다.그래서 그랬을 수도 있겠네요....

메신저(광범위한 역할), CreateMessage, ReadMessage, EditMessage, DeleteMessage.

한편으로는 일부 사용자가 메시지를 읽고 볼 수 있기를 바랍니다.그러나 반드시 생성하거나 삭제할 필요는 없습니다.개별 컨트롤러 작업에는 특정 역할이 적용될 수 있습니다.

이 접근 방식에 문제가 있다고 보시나요?더 좋은 생각이 있나요?

지금까지의 솔루션

나는 나만의 스키마를 만들고 사용자 정의 멤버십 및 역할 공급자를 구현하기로 결정했습니다.내 스키마에는 다음이 포함됩니다.

  • 사용자
  • 유저 프로필
  • 허가
  • 권한할당
  • 역할
  • 역할 할당

다음 날이나 이틀 동안 자리를 비울 예정이지만 기회가 생기면 더 많은 정보를 업데이트하겠습니다.

도움이 되었습니까?

해결책

권한 부여 메커니즘에 대한 역할을 잊어버리고 대신 권한을 요청해야 한다고 생각합니다(결국 역할은 권한의 집합입니다). Authorize 속성은 특정 역할이 아닌 엔터티와 작업을 요청해야 합니다.다음과 같은 것 :

[Authorize(Entities.Message, Actions.Create)]
public ActionResult CreateMessage()

[Authorize(Entities.Message, Actions.Edit)]
public ActionResult EditMessage()

[Authorize(Entities.Message, Actions.View)]
public ActionResult ViewMessage()

이렇게 하면 귀하의 역할이 융통성 없는 액세스 수준 방식을 결정하는 대신 최선을 다해 추상적인 권한 수집을 수행할 수 있습니다.

편집하다: David Robbins가 지적한 것과 같은 특정 규칙을 처리하기 위해 관리자 A는 관리자 B가 생성한 메시지를 삭제할 수 없습니다. 두 사람 모두 이 컨트롤러 작업에 액세스하는 데 필요한 권한이 있다고 가정하면 승인은 이러한 유형의 규칙을 확인할 책임이 없습니다. Action Filter 수준에서 확인하려고 해도 번거로울 수 있으므로 Authorize 검증을 ActionResult로 확장하고(검증 결과가 포함된 작업 매개변수 주입) ActionResult가 논리 결정을 내리도록 하는 것입니다. 모든 주장이 제자리에 있습니다.

이것 비슷한 질문입니다. 여기서 정확히 지적한 사례는 아니지만 작업 매개변수를 사용하여 승인 유효성 검사를 확장하는 좋은 시작점이 됩니다.

다른 팁

Crud 예제와 관련하여 권한 부여에 대해 실제로 이야기하지 않으며 권한 부여는 회원 역할 "Manager"와 "Reporter"사이에 다릅니다.역할이 메시지 간의 읽기 및 쓰기 권한을 구별하지 않으면 분리 된 그레인 액티브에 대해 별도의 메커니즘을 만들어야한다고 생각합니다.

각 동작에 대한 역할을 만들려면 - EditMessage, DeleteMessage - Manager A는 Manager B에 대한 메시지를 삭제할 수 없어야하는 경우에 무엇을 할 것입니까?

및 컨트롤러 위에 [Authorize(Roles="Administrator")] 등을 추가하십시오.도

에 해당 속성을 도 놓을 수도 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top