관리자 패널에서 역할이 동적으로 설정되는 간단한 CMS를 구축 중입니다. 예를 들어 [Authorize(Roles="admin")]
을 추가하는 컨트롤러 메소드를 인증하는 기존의 방법은 더 이상 충분하지 않습니다. 역할 - 작업 관계는 최종 사용자가 관리 패널에서 다른 사용자와 쉽게주고받을 수 있도록 데이터베이스에 저장되어야합니다. 어떻게 구현할 수 있습니까?ASP.NET MVC - 동적 인증
답변
ASP.NET 멤버십/프로필 기능이 제공하는 기능입니다. 그리고 Authorize 속성과 함께 작동합니다.
자신을 롤업하려는 경우 표준 인증 조치 필터의 동작을 모방 한 사용자 정의 조치 필터를 작성할 수 있습니다. 아래의 의사 코드.
public MyAuthorizeAttribute : ActionFilterAttribute
{
public string MyRole { get; set; }
public void OnActionExecuting(ControllerContext context)
{
if (!(bool)Session["userIsAuthenticated"])
{
throw new AuthenticationException("Must log in.");
}
if (!Session["userRoles"].Contains(MyRole))
{
throw new AuthenticationException("Must have role " + MyRole);
}
}
}
당신은 당신이 위로 보이도록역할 - 액션 관계는 는 데이터베이스에 저장해야합니다
AuthorizeAttribute
를 서브 클래 싱하지 않으려면, 컨트롤러 메서드 내에서 보안을 확인해야합니다
당신을위한 데이터베이스의 역할.
인증 프로세스를 제어하려면 AuthorizeAttribute의 하위 클래스를 지정하고 AuthorizeCore 메서드를 재정의해야합니다. 그런 다음 컨트롤러를 기본값 대신 CmsAuthorizeAttribute
으로 꾸미십시오.
public class CmsAuthorizeAttribute : AuthorizeAttribute
{
public override virtual bool AuthorizeCore(HttpContextBase httpContext)
{
IPrincipal user = httpContext.User;
IIdentity identity = user.Identity;
if (!identity.IsAuthenticated) {
return false;
}
bool isAuthorized = true;
// TODO: perform custom authorization against the CMS
return isAuthorized;
}
}
이의 단점은 당신이 ctor에 주입 IOC의에 액세스 할 수 없습니다, 그래서 당신은 직접 컨테이너에서 종속성을 요청해야한다는 것입니다.
컨테이너에서 직접 종속성을 얻는 단점은 무엇입니까? 내 RoleProvider 구현을 위해 이걸 가지고 있었어 ... – Haroon
@Haroon - 단점은 디자인 중 하나입니다. 일반적으로 IoC 컨테이너에 대한 의존성을 줄이려면 코드가 IoC 컨테이너를 모르는 사이에 모범 사례로 간주됩니다. 예를 들어 성능상의 이유로 반사 기반 컨테이너를 일반적으로 피하는 WP7에서 코드를 다시 사용할 수 있습니다. –
@Haroon - MVC 3은 속성으로 장식 된 속성을 통해 필터 속성 삽입을 지원합니다. 컨테이너에 대한 지식이 여전히 필요하지만 쉽게 조롱 당합니다. –
- 1. ASP.NET MVC 동적 경로에 대한 인증
- 2. ASP.NET MVC 여러 사용자 그룹 - 인증/인증
- 3. ASP.NET MVC 역할 인증
- 4. ASP.Net MVC 지정 인증
- 5. ASP.NET MVC 사용자 인증
- 6. ASP.Net MVC 인증
- 7. ASP.NET MVC 인증 쿠키
- 8. asp.net MVC 인증 문제
- 9. 동적 양식 ASP.NET MVC
- 10. ASP.NET MVC 동적 뷰
- 11. ASP.net MVC - Windows 인증/역할 공급자로 인증
- 12. ASP.NET MVC + Silverlight + 폼 인증
- 13. ASP.NET MVC 및 로그인 인증
- 14. 마스터에서 ASP.Net MVC 인증 확인
- 15. SQL Server가없는 ASP.NET MVC 인증
- 16. 사용자 지정 인증 asp.net MVC
- 17. ASP.NET MVC 인증 페이지로 리디렉션
- 18. ASP.NET MVC 2 인증 문제
- 19. Asp.Net MVC - 혼합 인증 모드
- 20. ASP.NET MVC html 페이지 인증
- 21. 양식 인증 정보 asp.net mvc
- 22. Asp.net MVC 인증 어떻게 작동합니까
- 23. Asp.net mvc codefirst 및 인증
- 24. Asp.net Mvc : 동적 페이지 제목
- 25. asp.net mvc 동적/상대 라우팅
- 26. ASP.NET MVC Html.TextBox 동적 값
- 27. ASP.NET, MVC 및 동적 데이터
- 28. 동적 다중 격자 asp.net mvc
- 29. ASP.NET MVC 3의 동적 TempData
- 30. ASP.NET MVC 동적 목록 바인딩
나는 그 일에 아주 익숙하지 만 코드에서 역할이 구체적으로 할당 된 예제를 보았습니다. 예를 들어, 일부 클라이언트는 특정 권한을 가진 "Engineer"라는 사용자 그룹을 가질 수 있습니다. 코드 조각을 건드리지 않고 관리자 패널에서 설정할 수 있기를 바랍니다. 지금 당장은 표준 인증 특성을 사용하는 방법을 볼 수 없습니다 – xantrus
감사합니다. 나는 그것을 조사 할 것입니다. – xantrus
그러면 데이터베이스에 조회를 추가해야하는데, 아마도 사용자와 컨트롤러를 일치시켜야 할 것입니다/DB에있는 액세스 규칙이있는 작업 이름. 아니면 그런 식으로. – rmac