2014-09-09 22 views
5

Trong MVC4 tôi đã sử dụng Roles.IsUserInRole để kiểm tra xem một người dùng đã có có vai trò nào không. Tuy nhiên, với MVC5 tôi không thể làm điều đó nữa ...MVC 5 - Vai trò - IsUserInRole và Thêm người dùng vào vai trò

Lúc đầu, nó yêu cầu tôi bật RoleManager tại web.config nhưng sau đó tôi phát hiện ra rằng microsoft đã chuyển khỏi Web.Security sang Microsoft.AspNet.Identity .

Câu hỏi của tôi bây giờ là, với Microsoft.AspNet.Identity làm cách nào để thực hiện một hành động tương tự như Roles.IsUserInRole? Và/hoặc tạo mối quan hệ giữa Vai trò và Người dùng.

Nhân tiện, tôi vẫn đang cố gắng hiểu các phương thức xác thực mới (ClaimsIdentity?).

Trả lời

10

Bạn nên đọc http://typecastexception.com/post/2014/04/20/ASPNET-MVC-and-Identity-20-Understanding-the-Basics.aspx để biết thông tin cơ bản về Identity 2.0!

Ngoài ra còn có một dự án trình diễn đầy đủ để giúp bạn bắt đầu: https://github.com/TypecastException/AspNet-Identity-2-With-Integer-Keys

Nếu bạn thực hiện việc này làm cơ sở cho nền tảng nhận dạng của bạn, bạn sẽ kết thúc với một cái gì đó như thế này:

var userManager = HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>(); 
const string name = "YourUsername" 
const string roleName = "Admin"; 

var user = userManager.FindByName(name); 
//check for user roles 
var rolesForUser = userManager.GetRoles(user.Id); 
//if user is not in role, add him to it 
if (!rolesForUser.Contains(role.Name)) 
{ 
    userManager.AddToRole(user.Id, role.Name); 
} 
+0

Ok, nó hoạt động ... cảm ơn. Nhân tiện, thuộc tính ủy quyền không hoạt động ... bất kỳ ý thức hệ nào? Tôi không thể đọc bài viết ngay bây giờ, nhưng tôi sẽ đọc nó từ đầu đến cuối asap. –

+1

Tôi đề nghị bạn hỏi một câu hỏi khác với một mô tả đầy đủ cho vấn đề này, bởi vì tất cả những gì tôi sẽ làm ở đây là đoán. – Marco

+0

ok cảm ơn tôi đã tạo bài đăng http://stackoverflow.com/questions/25743113/mvc-5-roles-authorizeattribute-outdated –

6

Các đăng ở trên thực sự hữu ích (Cảm ơn Serv, sẽ bỏ phiếu nếu danh tiếng của tôi cho phép tôi). Nó đã giúp tôi giải quyết một vấn đề tôi đã gặp phải với một vài thay đổi nhỏ để phù hợp với những gì tôi đã cố gắng đạt được. Vấn đề cụ thể của tôi là tôi muốn kiểm tra trong chế độ xem MVC nếu người dùng hiện tại nằm trong một nhóm vai trò nhất định. Tôi cũng thấy rằng Roles.IsUserInRole không còn hoạt động nữa.

Nếu bạn đang làm điều này trong một cái nhìn, nhưng sử dụng ASP.NET sắc 2.0 thay vì các nhà cung cấp thành viên đơn giản được cung cấp bởi các phiên bản MVC trước, sau đây có thể hữu ích như một giải pháp 1-line:

bool isAdmin = HttpContext.Current.User.IsInRole("Admin"); 

sau đó, bạn có thể kết hợp nó với HTML để chọn lọc hiển thị các mục menu (đó là những gì tôi đã sử dụng nó cho) với một cái gì đó như thế này:

@if (isAdmin) 
{ 
    <li>@Html.ActionLink("Users", "List", "Account")</li> 
} 

này cho phép tôi để ngăn chặn truy cập vào các siêu liên kết quản lý người dùng nơi người dùng không phải là thành viên của vai trò 'Quản trị viên'.

+0

Nice (1up), điều này cũng giúp tôi! –

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