2011-08-10 8 views
8

Sử dụng thuộc tính Authorize tôi có thể chỉ định vai trò được phép truy cập tài nguyên.ASP.NET ủy quyền thuộc tính và vai trò người dùng quản trị

[Authorize(Roles="User")] 

Nhưng nếu tôi có người dùng quản trị được phép đi tới bất kỳ nguồn tôi cần chỉ định một này cũng

[Authorize(Roles="User, Administrator")] 

Nhưng có thể có một số cách tôi có thể nói bằng cách nào đó quản trị cho phép để đi bất cứ đâu và không xác định cái này trong thuộc tính Authorize? Vì vậy, tôi có nghĩa là nếu một nơi nào đó trong mã (trên bộ điều khiển hoặc hành động) sẽ là điều này [Authorize(Roles="User")] nó có nghĩa là vai trò quản trị viên được phép đến đó là tốt.

Hoặc có thể tôi có thể đặt nó cho tất cả các vai trò ủy quyền tự động như thế nào khi ứng dụng bắt đầu?

Bất kỳ ý tưởng nào?

CẬP NHẬT:

Hiện nay tôi có một bộ điều khiển quản trị với thuộc tính Authorize [Authorize(Role="Administrator")] và tôi có một số hành động trong một số khác điều khiển với các thuộc tính [Authorize(Role="User")] vì vậy tôi sẽ cần phải thêm "Administrator" có cũng như nếu tôi không tìm thấy giải pháp tốt hơn .

+0

là giải pháp của tôi về bất kỳ trợ giúp nào? – LeftyX

Trả lời

2

Tôi nghĩ điều này sẽ phù hợp với bạn. Tạo bộ điều khiển cơ sở của riêng bạn, với AuthorizeAttribute, sau đó làm cho các Bộ điều khiển khác của bạn kế thừa lớp cơ sở của bạn.

[Authorize(Roles="Admin")] 
public class MyFancyController : Controller 
{ 
} 

[Authorize(Roles = "TaxPayer")] 
public class WizardController : MyFancyController 
{ 
... 

Điều này thật đáng sợ, theo ý kiến ​​của tôi.

Bạn có bao nhiêu bộ điều khiển/hành động? Điều gì xảy ra nếu bạn quên điều này sau và có thể bạn có một trang mà bạn không muốn quản trị viên truy cập?

Việc gỡ lỗi mã có trở nên khó khăn hơn không?

+0

Tôi nghĩ rằng đó là một điểm tốt nếu trong trường hợp tôi không muốn admin truy cập một nơi nào đó. Câu hỏi được cập nhật – Joper

1

Bạn có thể tạo bộ lọc tùy chỉnh và sử dụng bộ lọc này để trang trí cho Hành động hoặc Bộ điều khiển của bạn. Đây là một cấu trúc đơn giản, tôi đã sử dụng khá nhiều:

public class AuthorizationAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     if (!filterContext.HttpContext.User.Identity.IsAuthenticated) 
      { 
      filterContext.Result = new HttpUnauthorizedResult(); 
      return; 
     } 

     var actionName = filterContext.ActionDescriptor.ActionName; 
     var controllerName = filterContext.Controller.GetType().Name; 

     bool isAuthorized =false; 

     // Put your logic here !!!! 

     if (!isAuthorized) { 
      filterContext.Result = new HttpUnauthorizedResult();   
      return; 
     } 
    } 
} 

Bạn có thể đọc một số chi tiết here

2
[Authorize(Roles = "User, Admin")] 
public class PrestamosController : Controller 
{ 
    // controller details 
} 
+0

Sẽ tốt hơn nếu bạn giải thích mã bạn đã đăng. –

0

Đây là những gì tôi: chắc chắn rằng người dùng đang ở trong "Quản trị" vai trò cũng nằm trong vai trò "Người dùng".

0

Bạn cần các khái niệm về Vai trò tĩnhRuntime Vai trò.Dưới đây là một ví dụ đơn giản:

danh sách Vai trò của bạn và mức độ của họ:

  • Vai trò: Quản trị | Cấp: 1
  • Vai trò: Biên tập viên | Cấp: 2
  • Vai trò: Người xem | Level: 3

Users and Role tĩnh của họ (Role tĩnh là vai trò mà bạn gán cho người dùng):

  • User: John | Vai trò: Quản trị viên
  • Người dùng: Sam | Vai trò: Biên tập viên
  • Người dùng: Peter | Vai trò: Người xem

Khi chạy, bạn tạo Vai trò thời gian chạy bằng cách sử dụng Vai trò và vai trò tĩnh, Người dùng có vai trò cao hơn sẽ tự động nhận vai trò ở cấp thấp hơn. Vì vậy, sau khi tính toán, Vai trò thời gian chạy cho những Người dùng này sẽ là:

  • Người dùng: John | Vai trò: Quản trị viên, Người biên tập, Người xem
  • Người dùng: Sam | Vai trò: Biên tập viên, Người xem
  • Người dùng: Peter | Vai trò: Người xem

Và sau đó, bạn có thể chỉ cần sử dụng [Ủy quyền (Roles = "Viewer")], Người dùng có cấp độ quyền cao hơn (ví dụ: John, Sam) cũng có thể truy cập. Bởi vì họ cũng phải có vai trò người xem trong thời gian chạy.

Điểm sử dụng Vai trò tĩnh và vai trò thời gian chạy là vai trò tĩnh giúp phân công vai trò dễ dàng hơn. Và chạy vai trò thời gian làm cho việc cấp phép tài nguyên dễ dàng hơn.