.NET 2.0에서는 설정 역할을 처리하는 the built-in role management feature을 사용할 수 있습니다.
.NET 1.1의 경우 또는 기본 제공 역할 관리를 사용할 수 없거나 사용하지 않으려는 경우 PostAuthenticateRequest 이벤트를 사용하는 것이 좋습니다.
(a) 세션의 수명이 양식 인증 쿠키의 유효 기간과 완전히 독립적이며 (b) 세션이 활성화되지 않았기 때문에 세션은 역할 저장에 사용되지 않습니다.
각 요청마다 역할을 설정해야하지만 이는 문제가되지 않습니다. 데이터베이스 (*)에서 매번 검색 할 필요가 없습니다. 어딘가에 캐시 할 수 있습니다. 세션에서 캐시하는 것은 합리적인 해결책이지만 데이터베이스를 찾지 못하면 데이터베이스에서 다시 읽는 코드를 포함시켜야합니다.
(*) 또는 저장 한 곳 어디에서나 사용할 수 있습니다.
편집
예를 들어, 당신은 같은 것을 할 수있는 세션에서 역할 캐시 : 또는 당신이 ASP.NET 캐시의 역할을 저장하여 세션에 대한 종속성을 피할 수
string[] GetRoles(string userName)
{
string[] roles = Session["Roles"] as string[];
if (roles == null)
{
roles = GetRolesFromDatabase(userName);
Session["Roles"] = roles;
}
return roles;
}
을 아마도 슬라이딩 만료와 함께. 캐시는 모든 요청간에 공유되므로 캐시 키의 일부로 사용자 이름을 사용해야합니다.
string[] GetRoles(string userName)
{
string cacheKey = "Roles:" + userName;
string[] roles = Cache[cacheKey] as string[];
if (roles == null)
{
roles = GetRolesFromDatabase(userName);
Cache.Insert(cacheKey, roles, ...);
}
return roles;
}
출처
2009-07-19 08:42:01
Joe
멋진 솔루션을 제공해 주셔서 감사합니다. 귀하의 회신 즉 마지막 단락. "세션에서 역할을 잡는 것이 합리적인 해결책입니다" 예제 링크가 있으면 이해할 수 있도록하십시오. –
@HemantKothiyal : 지옥, 왜이 대답을지지하지 않고 받아들이지 않았습니까? 매우 유용하며 Joe는 귀하의 의견을 듣고 추가 정보를 제공하기까지했습니다. 나는 왜 당신이 그의 노력에 감사하지 않는지 이해하지 못합니다. – Slauma