Bước đầu tiên là tạo vai trò admin
. Đây là dễ dàng đủ:
context.Roles.Add(new IdentityRole { Name = "admin" });
context.SaveChanges();
Để thêm vai trò của một người dùng hiện có:
var role = context.Roles.SingleOrDefault(m => m.Name == "admin");
user.Roles.Add(new IdentityUserRole { RoleId = role.Id });
Cả hai bước này có thể và cần được xử lý theo phương pháp Seed
lại Migrations\Configuration.cs
, cùng với việc tạo ra bất kỳ người dùng ban đầu đó phải là quản trị viên.
Để khả năng quản trị viên thêm vai trò cho người dùng khác, bạn đã có bước đầu tiên được bảo vệ: bảo vệ hành động với [Authorize(Roles = "admin")]
.
Tiếp theo, bạn sẽ cần một mô hình xem để làm việc với người dùng của mình. Một cái gì đó như sau:
public class UserViewModel
{
// user properties you'd like to edit here
public List<int> SelectedRoleIds { get; set; }
public IEnumerable<SelectListItem> RoleChoices { get; set; }
}
Bạn sẽ cần phải bản đồ ApplicationUser
của bạn đến/từ mô hình chế độ xem này.Sau đó, bạn sẽ cần phải tự cư hai thuộc tính trong vai trò UserViewModel
:
RoleChoices
phải là một đếm được của tất cả các vai trò có sẵn:
model.RoleChoices = context.Roles.Select(m => new SelectListItem
{
Value = m.Id,
Text = m.Name
});
SelectedRoleIds
phải là một danh sách các id của tất cả các vai trò hiện giao cho người sử dụng:
model.SelectedRoleIds = user.Roles.Select(m => m.RoleId);
Theo quan điểm của bạn, sau đó, bạn sẽ xây dựng multiselect của bạn:
@Html.ListBoxFor(m => m.SelectedRoleIds, Model.RoleChoices)
Khi tạo một người dùng mới, bạn chỉ có thể thiết lập vai trò của người sử dụng trực tiếp trên bài:
user.Roles = model.SelectedRoleIds.Select(m => new IdentityUserRole { RoleId = m });
Khi chỉnh sửa một người dùng hiện, chăm sóc nhiều hơn phải được thực hiện, vì bạn sẽ nhận được lỗi vẹn nếu bạn lưu cùng một id vai trò hai lần cho cùng một người dùng. Trước tiên, bạn sẽ cần phải loại bỏ bất kỳ vai trò đã được bỏ chọn:
user.Roles.Where(m => !model.SelectedRoleIds.Contains(m.RoleId))
.ToList().ForEach(role => user.Roles.Remove(role));
Sau đó, bạn sẽ cần phải thêm bất kỳ vai trò mới chọn:
var existingUserRoles = user.Roles.Select(m => m.RoleId);
model.SelectedRoleIds.Except(existingUserRoles)
.ToList().ForEach(roleId => user.Roles.Add(new IdentityUserRole
{
RoleId = roleId
}));
nào bạn muốn thêm vai trò sử dụng giao diện người dùng? hoặc bạn sẽ nhớ sử dụng kịch bản lệnh sql đơn giản để thực hiện điều đó và gán các vai trò đó khi đăng ký người dùng? – DSR
Rất nhiều tài liệu về vai trò có sẵn trong google. Có nhiều hơn một chút so với bạn đã bao gồm. Tại sao không cung cấp cho một trong những hướng dẫn một thử và cho chúng tôi biết nếu bạn gặp khó khăn hơn là yêu cầu chúng tôi làm điều đó cho bạn. Mục đích chính của bài đăng của tôi là giới thiệu một phương án thay thế: http://visualstudiomagazine.com/articles/2013/08/01/leveraging-claims-based-security-in-aspnet-45.aspx – RandomUs1r
@DSR Id thích người dùng có vai trò quản trị viên để thêm vai trò cho người dùng khác bằng cách sử dụng ui – Rob