2015-05-21 48 views
7

Tôi đang sử dụng Identity 2 để xác thực trong trang web mvc 5. Theo quan điểm của tôi, tôi muốn kiểm tra vai trò của người sử dụng:User.IsInRole trả về false

@if(User.IsInRole("Customers")) 
{ 
    @*do something*@ 
} 

nhưng điều này luôn trả về false, tôi đã thiết <roleManager enabled="true" /> trong cấu hình web. bất kỳ trợ giúp nào.

+0

Cơ sở dữ liệu của bạn có cho biết rằng người dùng chắc chắn có vai trò và tên vai trò chính xác không? Và người dùng có chắc chắn đăng nhập không? IE ... nếu bạn thêm một '[Ủy quyền]' vào bộ điều khiển, hãy thực hiện các thao tác tải? – Luke

+0

Tên của vai trò là chính xác và nó tồn tại trong db cho người dùng này. –

+0

Nếu bạn thêm '[Ủy quyền (Vai trò =" Khách hàng ")]' vào hành động của bạn, tải hành động? Bạn đã thêm người dùng vào vai trò như thế nào? – Luke

Trả lời

6

Tôi vừa làm việc với thiết lập của mình cũng đang sử dụng Khung định danh.

Tôi đã thêm một người dùng đến một vai trò bằng cách sử dụng đoạn mã sau:

this.RoleManager.CreateAsync(new Role() {Name = "Customers"}); 

this.UserManager.AddToRoleAsync(this.User.Identity.GetUserId<int>(), "Amazing"); 

Sau đó, bất cứ lúc nào sau đó, khi tôi chạy User.IsInRole("Customers"); nó trở lại sai sự thật, đó là cho đến khi tôi relogged chúng trở lại trong

.

Bạn cần phải đăng nhập lại người dùng sau khi đã thêm người dùng vào vai trò. Thông tin vai trò được lưu trữ trong các tập tin cookie.

Tôi chạy sau để đăng nhập người dùng một lần nữa:

var user = await this.UserManager.FindByNameAsync("bob"); 
var identity = await this.UserManager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie); 

this.AuthManager.SignIn(new AuthenticationProperties() { IsPersistent = true }, identity); 

Từ thời điểm này, User.IsInRole("Customers") làm việc cho tôi và trở true.

Thao tác này sẽ không hoạt động trừ khi bạn có thể xác minh trong ứng dụng của mình rằng ứng dụng nhận thức được vai trò mà bạn muốn thêm chúng vào. Bạn có thể xác minh sự tồn tại của vai trò "Khách hàng" bằng cách sử dụng RoleManager của bạn theo cách sau:

var roleExists = (this.RoleManager.FindByNameAsync("Customers").Result != null); 
1

Tôi có cùng một vấn đề kể từ khi tôi tùy chỉnh lớp IdentityDbContext. Và lý do tại sao các User.IsInRole("Customers") luôn luôn là sai trong trường hợp của tôi là bởi vì tôi có tải xuống lười biếng EF tắt trên lớp bối cảnh tùy chỉnh của tôi. Tôi đã cố gắng bật tải chậm hơn tôi đăng xuất và sau đó, và User.IsInRole đang trả lại giá trị mong đợi.

public partial class Context : IdentityDbContext<User> 
    { 
     public Context() : base("name=Context") 
     { 
      this.Configuration.LazyLoadingEnabled = true;   
     } 
+0

là một giải pháp nhưng trong trường hợp của tôi sự cố không phải là xác định. Theo tôi gỡ lỗi 'LazyLoadingEnabled = true;' là mặc định (MVC 5) –

Các vấn đề liên quan