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);
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
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. –
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