사용자 지정 역할 공급자를 추가했지만 사용되지 않은 이유가 무엇이든 기본값이 계속 사용되고있는 것처럼 보입니다. 다음은 사용자 정의 역할 공급자MVC 사용자 지정 역할 공급자에 맞지 않습니다.
namespace Models.Security
{
public class MatchMakerRoleProvider: RoleProvider
{
public override string[] GetRolesForUser(string username)
{
username = username.Split('\\')[1].ToLower();
using (var db = new EncodingEntities())
{
var user = db.Admin_Users.FirstOrDefault(u => u.UserName.Equals(username, StringComparison.CurrentCultureIgnoreCase));
var roles = from ur in user.Admin_UserRoles
from r in db.Admin_Roles
where ur.RoleId == r.RoleId
select r.RoleName;
if (roles != null)
return roles.ToArray();
else
return new string[] {};
}
}
public override string[] GetUsersInRole(string roleName)
{
throw new NotImplementedException();
}
public override bool IsUserInRole(string username, string roleName)
{
using (var db = new EncodingEntities())
{
var user = db.Admin_Users.FirstOrDefault(u => u.UserName.Equals(username, StringComparison.CurrentCultureIgnoreCase));
var roles = from ur in user.Admin_UserRoles
from r in db.Admin_Roles
where ur.RoleId == r.RoleId
select r.RoleName;
if (user != null)
return roles.Any(r => r.Equals(roleName, StringComparison.CurrentCultureIgnoreCase));
else
return false;
}
}
}
}
내 컨트롤러
[Authorize(Roles = "SuperAdmin")]
public class AdminController : Controller
그리고 내 CustomRoleProvider에 중단 점을 설정하면, 그것은 충돌 결코 극복
<authentication mode="Windows">
</authentication>
<roleManager enabled="true" defaultProvider="MatchMakerRoleProvider" cacheRolesInCookie="true">
<providers>
<clear/>
<add name="MatchMakerRoleProvider" type="Models.Security.MatchMakerRoleProvider" />
</providers>
</roleManager>
의 Web.config
내 코드입니다 .. .어떤 아이디어?
이와 같은 구성 요소를 사용할 때 디버거가 항상 적중하는 것은 아닙니다. 어떤 이유로 든 디버거에서 제대로 연결되지 않습니다. 대신 디버거를 중지하려면 Debugger.Break() 문을 추가하십시오. –
실제로 네임 스페이스가 web.config에 나열된 네임 스페이스와 일치하지 않습니다. –
사실 나는 그저 OP Ill의 수정을했는데, 실제 코드에서는 그다지 문제가되지 않았다. 또한 디버깅 된 것을 추가하려고 시도했지만 아직 깨지는 것이 없습니다 – StevieB