수십 년 동안 다양한 인증 및 권한 부여 기술을 사용해온 현재 MVC 응용 프로그램은 다음 방법을 사용합니다.
클레임은 모든 승인에 사용됩니다. 사용자에게 하나의 역할이 할당됩니다 (여러 역할이 가능하지만 필요하지 않음). 아래에서 더 자세히 알아보세요.
일반적으로 A ClaimsAuthorize 속성 클래스가 사용됩니다. 대부분의 컨트롤러 작업은 CRUD이므로 모든 컨트롤러 작업을 반복하고 읽기 / 편집 / 만들기 / 삭제의 각 컨트롤러 작업 속성에 대한 클레임 유형을 만드는 코드 우선 데이터베이스 생성 루틴이 있습니다. 예 :
[ClaimsAuthorize("SomeController", "Edit")]
[HttpPost]
MVC 뷰에서 사용하기 위해 기본 컨트롤러 클래스는 뷰 백 항목을 제공합니다.
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
var user = filterContext.HttpContext.User as System.Security.Claims.ClaimsPrincipal;
if (user != null)
{
List<Claim> claims = user.Claims.Where(c => c.Type == this.GetType().Name).ToList();
ViewBag.ClaimRead = claims.Any(c => c.Value == "Read");
ViewBag.ClaimEdit = claims.Any(c => c.Value == "Edit");
ViewBag.ClaimCreate = claims.Any(c => c.Value == "Create");
ViewBag.ClaimDelete = claims.Any(c => c.Value == "Delete");
}
base.OnActionExecuting(filterContext);
}
웹 사이트 메뉴 및 기타 비 컨트롤러 작업에 대해 다른 주장이 있습니다. 예 : 사용자가 특정 통화 필드를 볼 수 있는지 여부.
bool UserHasSpecificClaim(string claimType, string claimValue)
{
var user = this.HttpContext.User as System.Security.Claims.ClaimsPrincipal;
if (user != null)
{
return user.Claims.Any(c => c.Type == claimType && c.Value == claimValue);
}
return false;
}
public bool UserHasTradePricesReadClaim
{
get
{
return UserHasSpecificClaim("TradePrices", "Read");
}
}
그렇다면 역할은 어디에 적합합니까?
역할을 (기본) 클레임 집합에 연결하는 테이블이 있습니다. 사용자 권한을 설정할 때 기본값은 사용자에게 역할에 대한 클레임을 제공하는 것입니다. 각 사용자는 기본값보다 더 많거나 적은 클레임을 가질 수 있습니다. 편집을 간단하게하기 위해 클레임 목록은 컨트롤러 및 작업 (연속)별로 표시되고 다른 클레임이 나열됩니다. 버튼은 약간의 자바 스크립트와 함께 사용되어 클레임을 선택하는 데 필요한 "클릭"을 최소화하기 위해 일련의 작업을 선택합니다. 저장시 사용자 클레임이 삭제되고 선택한 클레임이 모두 추가됩니다. 웹 애플리케이션은 클레임을 한 번만로드하므로 모든 변경 사항은이 정적 데이터 내에서 다시로드하라는 메시지를 표시해야합니다.
따라서 관리자는 각 역할에있는 클레임과 역할 및 기본 클레임으로 설정 한 후 사용자가 갖는 클레임을 선택할 수 있습니다. 시스템에는 사용자 수가 적기 때문에이 데이터를 관리하는 것은 간단합니다.