나는 사용자 지정 역할 제공자와 MVC 5 응용 프로그램을 개발하고 위해 AuthorizeAttribute와 문제를 가지고 있지만, AuthorizeAttribute 결코 내 고객 역할 공급자를 호출하지 것 같다, 내 코드는 다음과 같습니다 :사용자 지정 역할 공급자 MVC
내 고객 제공 :
namespace MyDomain
{
public class CustomRoleProvider : RoleProvider
{
public override string[] GetRolesForUser(string username)
{
using (MyContext objContext = new MyContext())
{
var objUser = objContext.Users.FirstOrDefault(x => x.Username == username);
if (objUser == null)
{
return null;
}
else
{
string[] ret = { objUser.Access_Levels.Name };
return ret;
}
}
}
public override bool IsUserInRole(string username, string roleName)
{
var userRoles = GetRolesForUser(username);
return userRoles.Contains(roleName);
}
}
내 컨트롤러 :
[Authorize(Roles = "Administrator")]
public class AdminController : Controller
그리고있는 Web.Config :
<system.web>
<roleManager defaultProvider="CustomRoleProvider" enabled="true" >
<providers>
<clear />
<add name="CustomRoleProvider" type="Online_Storage_Portal.CustomRoleProvider" cacheTimeoutInMinutes="30"/>
</providers>
</roleManager>
</system.web>
이 또한 내 사용자 지정 역할 공급자, 나는 내 컨트롤러 내에서
문자열 []의 역할을 다음 코드로 내 사용자 지정 역할 공급자 메서드를 호출 할 수 있어요 내 다른 컨트롤러와 같은 프로젝트에 = Roles.GetRolesForUser (사용자 이름)
하지만 [Authorize (Roles = "Administrator")]가있는 컨트롤러는 사용자 로그인과 역할이 모두 평가 된 경우에도 페이지를 로그인 화면으로 항상 리디렉션합니다.
도와주세요 !!
Dan에 대한 귀하의 의견을 보내 주셔서 감사합니다. 추가 기능을 제공하기 위해 WindowsPrincipal IsInRole 메서드를 재정의 한 CustomerPrincipal을 사용하는 것을 제외하고는 동일한 작업을 수행 할 수있었습니다. https://dotnetfiddle.net/sTU8EQ –
여기와 같습니다. 댄, 너는 남자 야. 게시물 인증, WindowsPrincipal 래핑 개념 또는 기본 impl이 캐시 된 역할만을 사용한다는 개념을 알지 못했습니다. – Visser