2010-02-24 38 views
9

Tất cả các công cụ bảo mật tôi đã làm việc trong quá khứ trong ASP.Net cho hầu hết các phần đã được dựa trên vai trò. Điều này là dễ dàng, đủ để thực hiện và ASP.Net là hướng cho loại mô hình bảo mật. Tuy nhiên, tôi đang tìm kiếm một thứ gì đó tốt hơn một chút so với bảo mật dựa trên vai trò đơn giản.Bảo mật ASP.Net bằng cách sử dụng Bảo mật dựa trên hoạt động

Về cơ bản tôi muốn để có thể viết mã như thế này:

if(SecurityService.CanPerformOperation("SomeUpdateOperation")){ 
    // perform some update logic here 
} 

Tôi cũng sẽ cần hàng truy cập bảo mật ở mức như thế này:

if(SecurityService.CanPerformOperation("SomeViewOperation", SomeEntityIdentifier)){ 
    // Allow user to see specific data 
} 

Một lần nữa, tiền phạt kiểm soát truy cập grained. Có cái gì như thế này đã được xây dựng? Một số khung mà tôi có thể thả vào ASP.Net và bắt đầu sử dụng, hoặc tôi sẽ phải xây dựng bản thân mình?

+0

@Josh: Bạn đã bao giờ tìm thấy một cách thích hợp để thực hiện một cái gì đó như thế này? – Breadtruck

+0

Có một phần. Tôi đã giải quyết vấn đề hoạt động bằng cách tạo một bảng vai trò trong cơ sở dữ liệu có bảng xRef liên kết ngược lại với chính nó. Bằng cách này, tôi có thể tạo ra một cấu trúc cây của các vai trò, và sử dụng một CTE để mang lại hệ thống phân cấp phẳng. Tôi tạo ra vai trò tùy chỉnh và các nhà cung cấp thành viên để làm công việc bẩn và để cho ASP.Net xử lý phần còn lại. Có vẻ hơi buồn cười trong mã bởi vì mọi thứ đều là một vai trò hợp lý, nhưng về mặt khái niệm thì có vai trò và quyền hạn. – Josh

Trả lời

1

Bạn đã xem Trình quản lý ủy quyền (AzMan) chưa? http://msdn.microsoft.com/en-us/library/bb897401.aspx

Nó được bao gồm trong Server 2003 và đã có một vài cập nhật trong máy chủ 2008 và đi kèm với công cụ quản trị MMC.

Bạn có thể lưu trữ dữ liệu trong tệp xml hoặc phân vùng AD/ADAM bằng máy chủ phiên bản 2003 và trong máy chủ 2008, họ đã thêm hỗ trợ SQL.

Công cụ này cho phép bạn liên kết các đối tượng bảo mật của mình với nhau trong cấu trúc phân cấp vai trò, nhiệm vụ hoạt động &.

Bạn có thể sử dụng tính năng này làm nhà cung cấp dựa trên vai trò trong Asp.net nhưng chúng cũng bao gồm các lớp .net để bạn có thể truy cập trực tiếp nội dung lưu trữ ủy quyền.

+0

@squig, tôi đã xem AzMan ban đầu bởi vì nó có vẻ quá tốt là đúng. Có lẽ tôi đã không cho nó một cái nhìn gần đủ, nhưng nó dường như có hai "nhược điểm" lớn mà tôi đã thấy. 1.) Các nhà cung cấp ASP.Net AzMan chỉ hỗ trợ một tập hợp con nhỏ của hệ thống phân cấp tổng thể, do đó làm cho nó không hữu ích hơn các nhà cung cấp bình thường, và 2.) Nó được tích hợp chặt chẽ với AD, mà tôi muốn tránh. Nếu có thể sử dụng AzMan mà không có tất cả tích hợp AD thì nó có thể đáng giá. Tại thời điểm này, tôi có các nhà cung cấp của riêng tôi hoạt động khá tốt cho nhu cầu của tôi. – Josh

0

Tôi nghĩ bạn có thể đang tìm kiếm bảo mật Tuyên bố. Bảo mật tuyên bố cho phép bạn tốt, 'Khai báo' ai có thể truy cập vào những gì dưới dạng thuộc tính trên mã ở đây là một trang về bảo mật Dựa trên vai trò cũng trên MSDN. Dưới đây là một ví dụ:

[PrincipalPermissionAttribute(SecurityAction.Demand, Role="admins")] 
public class foo 
{ 
    [PrincipalPermissionAttribute(SecurityAction.Demand, Role="Domain Admins")] 
    public void bar() 
    { 
     .... 
    } 
} 
+0

@Mgetz, tôi thực sự sử dụng thuộc tính này rất nhiều, nhưng cụ thể hơn những gì tôi đang tìm kiếm là khả năng soạn các hành động/hoạt động tốt vào vai trò. Tôi đặc biệt muốn tránh sử dụng vai trò nào cả trong mã của mình. Bằng cách đó, tôi có thể tạo các vai trò tùy ý bao gồm bất kỳ số lượng quyền nào và gán vai trò đó cho người dùng. Sau đó, người dùng sẽ có quyền truy cập vào tập hợp con quyền đó thông qua vai trò của họ. Về cơ bản tôi đã thực hiện phần này bằng cách sử dụng một RoleProvider tùy chỉnh, nhưng tôi ngạc nhiên rằng không ai đã làm điều này rồi. – Josh

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