얼마 전부터 GetRolesForUser
에 사용 된 직류가 그대로 유지됩니다. 따라서 이전에 사용자를 다시 얻은 다음 동일한 사용자에게 다시 요청하면 동일한 데이터 컨텍스트를 사용하여 해당 데이터 컨텍스트로 캐시 된 사용자를 반환합니다.
음 사용자 이름 매개 변수는 이전 사용자 이름, 당신은 이전 사용자를 위해 어떤 역할을 반환하지 올바르게 작품을 제공하는 기능을 보유하고있는 경우
public override string[] GetRolesForUser(string username)
{
using (var ctx = new MyDataContext()) {
return ctx.Users.Where(u => u.UserName== username)
.SingleOrDefault().Roles
.Select(r => r.RoleName).ToArray<string>();
}
}
편집을 사용하여보십시오 ... 만들기 새 사용자 이름을 함수에 전달했는지 확인하십시오. 나는. 그것은 기능의 문제가 아니라 기능에 전달되는 가치를 보유하는 문제입니다.
2 편집 현재 사용자의 자격 증명을 변경하지 않는 데이터베이스에 사용자를 저장
(A RoleProvider를 사용하는 것을 알고 후). 로그인 중에 설정됩니다. cou를 확인하려면 HttpContext.User
에 여전히 사용자 이름이 있는지 여부를 확인할 수 있습니다. 그래서 당신이해야 할 일은 uer가 다시 로그인하도록 강요하거나, imutable 식별자를 자격 증명으로 사용하는 것입니다. 각 사용자에게 GUID가 할당되면 사용자 이름이 변경 될 수 있고 역할은 여전히 해결 될 수 있습니다.
방금 시도했지만 작동하지 않았습니다. GetRolesForUser가 호출되는 클래스는 실제로 새로운 데이터 컨텍스트를 생성합니다. 난 여전히 같은 오류가있어, 그것은 이전 사용자 이름에서 사용자 이름 변수에 전달됩니다. – Xaisoft
이 솔루션이 작동하지 않으면 실제로 저장하기 전에 값을 가져 오는 중임을 나타내는 수명주기 문제가 있습니다. – citronas
수명주기는 다음과 같습니다. 사용자에게 새 사용자 이름이 지정되었습니다. SubmitChanges가 호출되었습니다. GetRolesforUser가 호출되었지만 이전 사용자 이름이 전달되었습니다. – Xaisoft