2012-05-08 37 views
6

Tôi đang thực hiện kiểm soát truy cập của trang web mạng nội bộ. Điều này sẽ dễ dàng, nếu công ty không có hơn 200 nhân viên và quyền tùy chỉnh cho hầu hết mọi người. Đó là điên rồ, tôi biết, nhưng tôi không thể thay đổi nó.Có thực thi chung đơn giản về kiểm soát truy cập dựa trên quy tắc không?

Vì vậy, tôi đã cố gắng để tìm một triển khai chung sẽ đáp ứng nhu cầu của tôi, nhưng không thể tìm thấy nó, vì vậy tôi đã đi để làm điều đó bản thân mình. Cuối cùng, tôi nghĩ ra một giải pháp khá chung chung khiến tôi suy nghĩ: ai đó phải làm điều đó trước đây!

Tôi gọi nó là STOP (Chủ đề đối tượng nhiệm vụ quyền) Kiểm soát truy cập. Tôi có mối quan hệ sau:

.-------.  .-----------.  .-------. 
| users |1---*| STOPRules |*---1| tasks | 
`-------'  '-----------'  '-------' 

Một Rule DỪNG có các thuộc tính sau

STOPRule { 
    Subject; 
    Task; 
    ObjectType; 
    Permission; 
    Relation; 
} 

Quan hệ đối tượng có thể là: chủ sở hữu, người sáng tạo, Revisor vv lĩnh vực này là không cần thiết, để hỗ trợ nhiệm vụ chung. Khi nó ở đó, mối quan hệ giữa người dùng hiện tại và cá thể đối tượng được tính toán bởi một đại biểu. Quan hệ hiện tại sau đó được so sánh với quan hệ yêu cầu trên quy tắc để cho phép hoặc từ chối truy cập.

Hãy cho tôi biết nếu tôi không đủ rõ ràng.

Hai câu hỏi nảy sinh:

  1. Có một thực hiện mã nguồn mở như thế này?

  2. Bạn có thấy bất kỳ vấn đề nào tôi gặp phải sau đường dẫn này không?

EDIT: Tôi đã tiếp tục và bắt đầu triển khai mô hình này. Vấn đề đầu tiên là tôi cần mối quan hệ giữa chủ thể và đối tượng để hỗ trợ bất kỳ trường hợp sử dụng nào. Bây giờ, tôi có thể lưu trữ các nguyên tắc sau:

John (tùy) thể (phép) chỉnh sửa (nhiệm vụ) ra lệnh (object) NẾU ông là tạo (liên quan) của gọi món.

Xin vui lòng, các bạn có thể cung cấp một trường hợp sử dụng thực tế không thể diễn tả bằng mô hình này không?

+2

+1 cho không gian loại "không gian văn phòng" - có thể bạn cũng đã điền tất cả các báo cáo tps. – JonH

+0

Là một phần dành cho thiết kế mô hình của bạn, [Kiểm soát truy cập dựa trên vai trò] (http://en.wikipedia.org/wiki/Role-based_access_control) có giống như nó phù hợp với mô hình hóa đơn không? Tiêu đề của bạn rất gần với điều này, tôi tự hỏi nếu đó là những gì bạn có nghĩa là ban đầu. –

+0

@Ninfingers no, thật không may là không. AC dựa trên rOle và AC dựa trên rUle có cùng từ viết tắt nhưng khác nhau và tôi có nghĩa là từ thứ hai. Trên ac dựa trên quy tắc, các quy tắc truy cập được xác định trong đối tượng (hoặc tài nguyên) được bảo mật (nói từ một khung nhìn hệ điều hành) thích ứng với Web, gần nhất tôi thấy là Zend_Acl thực hiện ACL trên Zend khuôn khổ, nhưng nó hy vọng tôi để tải tất cả các điều khoản, vì nó là rOle và không rUle dựa, nó giả định rằng nó sẽ được rất nhiều quy tắc cho phép. – svallory

Trả lời

1

Điều gì thực sự có một bảng với quyền được nhóm theo một số vai trò nhất định và sử dụng một bảng khác cho các quyền mở rộng sẽ ghi đè quyền chung. Nếu đó là trường hợp chỉ để John truy cập một cái gì đó, tại sao cũng đề cập đến việc mỗi người khác không thể? Giống như ví dụ cuối cùng bạn đã cung cấp trong phần bình luận ở trên: có một bảng có quyền. Bản ghi có dạng: 1645 edit_some_field. Sau đó, group_permissions trông giống như: 1645 everyone false và bảng ngoại lệ cuối cùng sẽ là 1645 (Jane Doe's ID) true.

Nếu, giả sử có 50 người có quyền chỉnh sửa trường này, thì bạn chỉ cần thêm một nhóm khác trong bảng nhóm như: 89 editors_of_field_X, đặt ID của mọi người vào bảng group_members như 89 (John Smith's ID) true. Và sau đó vào bước cuối cùng, bạn có thể ghi đè những người có quyền của người đó như tôi đã đề cập ở trên. Vì vậy, trong kết luận bạn sẽ có chương trình 3 lớp. Mọi người-nhóm-người.Và bạn càng đi sâu thì tầm quan trọng càng cao. Ví dụ: nếu mọi người không được phép, nhưng nhóm bạn đang ở được phép, sau đó bạn có thể chỉnh sửa nội dung nào đó.

Hơn nữa, nếu bạn không được phép truy cập ở cấp độ người thứ ba, thì bạn lại trở thành ngoại lệ trong nhóm. Bằng cách này, bạn sẽ có thể sử dụng lại các nhóm cho sau này, chỉ thêm các thay đổi nhỏ.

+0

Điều gì sẽ xảy ra nếu một người là thành viên của hai nhóm và một người được phép chỉnh sửa và người kia thì không? – wchargin

+0

Điểm tốt. Nhưng nó là trái cho quyết định của tác giả của câu hỏi: hoặc là không được phép, hoặc cho phép hoặc kiểm tra mới nhất. –

+0

Hey, @ AndriusNaruševičius, cảm ơn vì đã dành thời gian để trả lời với rất nhiều chi tiết. Khi dự án có thời hạn (Đã qua 20 ngày kể từ khi tôi hỏi), vì vậy tôi đã tiếp tục và triển khai mô hình mà tôi mô tả. Vâng, kinda. Tôi đã thực hiện một số cải tiến. Ví dụ. không có ý nghĩa để xác định người dùng khi bạn xác định mối quan hệ với đối tượng. Tôi sẽ viết một cái gì đó về những gì tôi đã đưa ra và đăng ở đây sau. Đối với câu trả lời của bạn, tôi sẽ bình luận về điều đó sau, nhưng về cơ bản bạn đã mô tả cách thức hoạt động của điều khiển truy cập dựa trên rOle. – svallory

1

John đã tạo đơn hàng và muốn cho phép Bob xem nó.

+0

Bạn lưu một nơi nào đó mà Bob được mời xem thứ tự đó (vì vậy hệ thống có thể đánh giá mối quan hệ "được mời" trong thời gian chạy, vì nó có liên quan) và thêm STOPRules (người dùng, tác vụ, object_type, quyền, quan hệ) các giá trị (null, "view", "order", "allow", "invited"). Tôi đi đến kết luận rằng việc đặt người dùng chỉ hữu ích cho các ngoại lệ. Ví dụ tốt, mặc dù! – svallory

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