Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

ColdFusion:Tùy chọn ứng dụng dựa trên vai trò?

Bạn nói đúng, bảo mật một trang và bảo mật các phần tử là khác nhau.

Theo quan điểm của tôi và trên thực tế, tôi nghĩ rằng việc gắn bất kỳ mã nào vào một vai trò hoặc người dùng thực sự là một cách tiếp cận sai lầm. Thay vào đó, hãy gắn quyền với các phần tử và trang - sau đó gắn các vai trò với các quyền đó. Và tất nhiên, người dùng được chỉ định vai trò.

Điều quan trọng là phải có cả ba:

  1. Người dùng
  2. Vai trò
  3. Quyền <- đây là những gì bạn đang thiếu

Quyền là phần tử và trang bảo mật, không phải vai trò hoặc người dùng Mã của bạn không được có đầu mối (vì nó không cần) người dùng hoặc vai trò nào ở đó - chỉ là tên của các quyền.

Khi người dùng đăng nhập, tôi nắm lấy (các) vai trò của họ. Sau đó, tôi lấy tất cả các quyền được gán cho các vai trò đó (chỉ đơn giản là danh sách các giá trị chuỗi).

Ví dụ:trên một trang tôi có thể có:

  • Thêm mục
  • Xem mục
  • Xóa mục

Khi tôi viết mã trang đó, tôi thực sự bảo mật từng phần tử đó bằng các chuỗi quyền có tên tương tự (addItem, viewItem, deleteItem).

<cfif listContainsNoCase( session.permissions, 'addItem' )>
    <!--- code to add item --->
</cfif>

(Lưu ý:Tôi khuyên bạn nên sử dụng thẻ hoặc chức năng tùy chỉnh cho việc này, nhưng đối với mục đích của một ví dụ, những điều trên hoạt động tốt).

Nếu bạn làm theo cách này, nó mang lại sự linh hoạt và trừu tượng tối đa. Nếu bạn bảo mật các yếu tố dựa trên vai trò, bạn sẽ tự giới hạn mình:

  • Việc thêm các vai trò mới sẽ yêu cầu thay đổi nhiều mã!
  • Việc thay đổi quyền giữa các vai trò đòi hỏi phải thay đổi nhiều mã!

Nếu bạn làm điều đó như đã đề cập ở trên, bạn sẽ không bao giờ cần thay đổi mã bảo mật của mình trong cơ sở mã, bởi vì quyền "addItem" phải luôn nằm trên logic "thêm mục", phải không? :)

Bây giờ nếu bạn tình cờ cần tạo một vai trò loại "người quản lý", có tất cả các vai trò người dùng và một vài quyền quản trị được chọn, bạn chỉ cần tạo vai trò đó và gán cho nó các quyền chính xác (có thể addItem và editItem, nhưng không deleteItem) . Bam! Bây giờ tôi có vai trò người quản lý để chỉ định cho những người dùng không thay đổi mã !

Nếu tôi đã rắc mã của mình với loại nội dung "người dùng có phải vai trò này không" - tôi sẽ phải đi chỉnh sửa mã của mình ở khắp mọi nơi để cho phép vai trò mới "người quản lý" của tôi - thật tuyệt!

Có ý nghĩa?

=)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách tách văn bản được phân tách bằng dấu phẩy trong thủ tục được lưu trữ trong MySQL

  2. Một chuỗi thủ tục MySQL có an toàn không?

  3. Chèn hình ảnh vào cơ sở dữ liệu

  4. Nhóm MySQL theo giờ

  5. Tính toán kích thước vùng đệm InnoDB cho Máy chủ MySQL của bạn