2009-02-13 31 views
6

Tôi đã suy nghĩ về ứng dụng web Tôi sắp bắt đầu phát triển và tự hỏi liệu cách tiếp cận thông thường của tôi có thể được cải thiện hay không. Trong một vài ứng dụng gần đây của tôi, tôi đã tạo một bảng (xem bên dưới) các vai trò (chẳng hạn như CREATE POST, EDIT POST, v.v.) mỗi ứng dụng có một bitfield được áp dụng cho họ để tôi có thể chỉ định cho người dùng một số quyền nhất định trong đăng ký và kiểm tra chúng sau này (ví dụ: $user->hasRight(CREATE_POST)).Tôi nên triển khai ACL của mình như thế nào trong một ứng dụng web?

Tôi tự hỏi liệu có cách tiếp cận tốt hơn cho điều này không. Nó chắc chắn khó hiểu khi các quyền không liên quan cụ thể đến người dùng (tôi có thể có một bảng mà mỗi bên phải là một cột boolean nhưng chỉ có vẻ như một cải tiến nhỏ) - và điều gì sẽ xảy ra nếu tôi thay đổi một số?

Tôi không muốn sử dụng thư viện chuẩn (bản thân ứng dụng là trải nghiệm học tập cho tôi: sử dụng postgresql, git, v.v.) mặc dù tôi rất vui khi lấy cảm hứng từ họ để xây dựng cho riêng mình - vì vậy nếu có một điều gì đó đặc biệt bạn nghĩ tôi nên xem xét xin vui lòng nói như vậy :)

+0

Ngoài ra: nó sẽ dành cho một ứng dụng PHP nhưng nếu có một thực hành tuyệt vời được thực hiện trong nói, Ruby on Rails, tôi chắc chắn tôi có thể tìm ra :) – Ross

Trả lời

4

Đó là cách tiếp cận tương tự tôi thực hiện trong các ứng dụng web của riêng mình (và một chút thử và lỗi đã đi vào đó cho tôi). Sự khác biệt duy nhất là, tôi có thể sử dụng một bảng có các quyền khác nhau như các cột, để nếu bạn muốn thêm nhiều quyền hơn sau này, bạn có thể. Sử dụng các bit trong một số nguyên giới hạn cho bạn một số lượng quyền cố định, cụ thể là nhiều bit như có trong số nguyên. Thông thường đó sẽ là 32 mà tôi cho là có lẽ đủ, nhưng tôi không muốn giới hạn bản thân mình theo cách đó.

Đối với những gì nó có giá trị, đó cũng là mô hình mà sử dụng hệ thống phpBB (quyền như cột bảng), và nếu nó đủ tốt cho cho là ứng dụng PHP web phổ biến nhất, nó có thể là đủ tốt cho bạn ;-)

+1

Tôi thích ý tưởng sử dụng bảng cho ACL. U nghĩ rằng bạn có thể tư vấn cho tôi về cách thiết kế một cách chính xác để đạt được ACL. Vì vậy, tôi có bảng 'Project' có mối quan hệ một-nhiều với' Drawing', và một bảng USER. Giả sử chúng ta có các dự án 'A' và' B', có nhiều bản vẽ trong đó.Làm thế nào tôi có thể thiết kế để, tôi có thể cho phép 1 người dùng chỉ xem A, một người dùng chỉ xem B và 1 người dùng có thể xem cả hai. –

1

Tôi chắc rằng bạn đã tìm thấy phpgacl rồi, nhưng đây là một liên kết trong trường hợp bạn chưa có. Nó có thể là một chút thô để quấn đầu của bạn xung quanh lúc đầu tiên, và chắc chắn thư viện là khó khăn (tốn thời gian) để thực hiện vào một dự án, nhưng tài liệu và demo là điểm tham chiếu EXCELLENT.

PHP Generic Access Control Lists

+0

Tôi đã không nhưng nó chắc chắn trông thú vị. – Ross

4

Bạn có thể có một cái nhìn tại các tài liệu hướng dẫn của Xuân An (trước đây là Acegi), mà là một khuôn khổ Java ACL sử dụng rộng rãi.

Tài liệu là đầy đủ và cũng mô tả các cân nhắc khác nhau được thực hiện trong thiết kế xác thực và ủy quyền bot. Ngay cả khi không sử dụng Java, nó cũng đáng đọc.

Bạn có thể xem index page để có cái nhìn tổng quan và ấn tượng về những gì Acegi thực hiện (và không). Bạn cũng có thể bỏ qua ngay đến số authorization concepts hoặc thậm chí đến số database schema.

+0

Bố cục trang web cho Spring Security đã thay đổi, vì vậy đây là danh sách các liên kết được cập nhật: [index page] (http://static.springsource.org/spring-security/site/docs/3.1.x/reference/springsecurity.html) , [Khái niệm ACL] (http://static.springsource.org/spring-security/site/docs/3.1.x/reference/domain-acls.html) và [schema] (http://static.springsource.org /spring-security/site/docs/3.1.x/reference/appendix-schema.html) –

1

Cách tiếp cận ACL trong các ứng dụng web, nói chung, đã được thảo luận, ví dụ: here.

+0

Vui lòng tránh chỉ liên kết câu trả lời. Nếu ngắt liên kết thì câu trả lời sẽ trở thành không sử dụng được. –

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