2

내 인생에서 MVC 5 응용 프로그램에 단순히 역할을 추가하는 방법을 알 수 없습니다. 이것은이있는 ID와 이름 ("관리자", "사용자", 등) AspNetUsers을 가지고 4ASP.NET MVC 5 Identity 2.0에서 역할 사용

표가 상자 밖으로있다 MVC의 이러한 바람, AspNetRoles이었다 ID 및 다른 사용자 필드 AspNetUserRoles -이 테이블에는 위의 표에 매핑 된 UserId 및 RoleId가 있습니다.

로그인 한 사용자에게 "admin"역할 또는 "user"역할이 있는지 확인하고 싶습니다. 여기

내가 시도 것입니다 :

if (User.IsInRole("Admin")) 
{ 
//do something 
} 

값은 항상 다시 거짓 온다.

는 또한 시도 :

var UserManager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(context)); 
var userRole = UserManager.GetRoles(user.GetUserId()); 
if (userRole[0] == "Admin") 
    { 
    // do something 
    } 

이 오류가 발생합니다 ". 인덱스가 범위를 벗어났습니다 음수와 크기 컬렉션의 보다 작아야합니다."

현재 로그인 한 사용자의 역할을 얻을 수있는 간단한 방법이 있습니까? 역할 관리자 사용에 대한 참조를 보았지만 제대로 작동하지 못했습니다. 나는 그 오류가 userRole가 0도 지표로, 비어 있음을 말하고있다 아이덴티티 1.0

에 대한

감사

+0

사용자가 로그인 한 상태입니다. UserManager를 사용하여 다음을 확인합니다. http://stackoverflow.com/questions/23049813/asp-net-identity-2-0-check-if-current-user-is-in-role-isinrole –

답변

3

이었다 생각한다 "컬렉션의 크기보다 작아야"아니다. 즉, 해당 사용자는 어떤 역할에도 속하지 않습니다.

이 방법론은 실제로 그다지 다르지 않습니다. 역할은 먼저 존재해야하며 사용자는 해당 역할과 연관되어야합니다. 당신은이에 대한 RoleManager을 사용할 수 있습니다

db.Roles.Add(new Role { Name = "Admin" }); 

,하지만 난 당신이 단지 바로 컨텍스트를 이용할 수있을 때 그 잔인한 찾을 : 그 결과, 첫 번째 단계는 역할을 채울 것입니다. 그런 다음

:

말 그대로 모든 것이 거기에있다 것
UserManager.AddToRole(userId, "Admin"); 

. 원한다면, 에서 Seed을 대체하여 일부 사용자/역할을 데이터베이스에 자동으로 시드 할 수 있습니다. 역할에 대한 내용은 다음과 같습니다.

context.Roles.AddOrUpdate(
    r => r.Name, 
    new Role { Name = "Admin" }, 
    ... 
); 
+0

예 본 적이 있습니다. . 나는 빈 테이블을 가지고 있었다. 제 질문은 당신의 역할을 어떻게 확인합니까? 나는 (User.IsInRole ("Admin")과 항상 false이다.) 감사합니다. –

+0

qq : localdb로 local sqlserver를 가정하고 ID db를 열면 데이터가 있는지요? 내가 사용자를 생성하여 데이터베이스를 시드하려고 시도 할 때 IdentityResult가 항상 오류가 발생했는지 확인하지 않아서 결과적으로 데이터베이스가 쉽습니다. – Bill