2014-04-23 20 views
11

Tôi đang làm việc để thiết lập quyền người dùng cho trang web của công ty mình và chúng tôi có một số vai trò và quyền khác nhau sẽ được tạo. Tôi đã tìm thấy một số thông tin tuyệt vời về việc tạo vai trò và nhóm thực tế cũng như cách triển khai chúng từ here. Tuy nhiên, điều này vẫn yêu cầu các vai trò được mã hóa cứng vào thẻ ủy quyền, có cách để tự động điền thẻ ủy quyền, để tôi có thể có một trang trên trang web mà tôi có thể nhanh chóng gán các quyền khác nhau cho các trang khác nhau mà không phải quay lại mã và sửa đổi tập quyền cho mỗi trang tôi tạo?Quyền đối với trang động MVC Sử dụng thuộc tính ủy quyền?

Trả lời

19

Thực hiện thuộc tính ủy quyền tùy chỉnh sau.

public class CustomAuthorizeAttribute : AuthorizeAttribute 
    { 
     public CustomAuthorizeAttribute (params string[] roleKeys) 
     { 
      var roles = new List<string>(); 
      var allRoles = (NameValueCollection)ConfigurationManager.GetSection("CustomRoles"); 
      foreach(var roleKey in roleKeys) { 
       roles.AddRange(allRoles[roleKey].Split(new []{','})); 
      } 

      Roles = string.Join(",", roles); 
     } 

     public override void OnAuthorization(AuthorizationContext filterContext) 
     { 
      base.OnAuthorization(filterContext); 
      if (filterContext.Result is HttpUnauthorizedResult) 
      { 
       filterContext.Result = new RedirectResult("~/Error/AcessDenied"); 
      } 
     } 
    } 

Sau đó, thêm dòng sau vào web.config

<section name="CustomRoles" type="System.Configuration.NameValueFileSectionHandler,System, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> 

và sau đó, là một ví dụ

<CustomRoles> 
    <add key="UsersPagePermission" value="HR,Accounts,Developers" /> 
    </CustomRoles> 

Các trên bộ điều khiển hay hành động của bạn hoặc trong các bộ lọc toàn cầu (tùy theo bạn thích :)) thêm thuộc tính

ví dụ

[CustomAuthorize("UsersPagePermission")] 
public class UserController : Controller 

Điều này sẽ cho phép bạn sửa đổi web.config thay vì mã để thay đổi quyền.

+1

Chuyển hướng tùy chỉnh Http trái phép là tùy chọn :-) – cheesesharp

+0

whoot! Giúp tôi! Cảm ơn! –

+0

công việc tuyệt vời! Cảm ơn :) –

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