2008-10-28 30 views
7

Tôi đang tranh luận cách tốt nhất để truyền bá quyền khá phức tạp từ máy chủ đến ứng dụng AJAX và tôi không chắc chắn cách tiếp cận tốt nhất để thực hiện.Tuyên truyền quyền cho Javascript

Về cơ bản, tôi muốn xác định quyền để tôi có thể yêu cầu toàn bộ quyền trong một lần chụp và điều chỉnh giao diện người dùng phù hợp (thay đổi giao diện người dùng có thể ở mức thấp như vô hiệu hóa một số mục menu ngữ cảnh nhất định). Tất nhiên, tôi vẫn cần phải thực thi phía máy chủ quyền.

Vì vậy, tôi đã tự hỏi nếu có ai có bất cứ đề nghị về cách thức tốt nhất để

  1. duy trì các điều khoản và sử dụng chúng trong mã máy chủ
  2. có thể dễ dàng tiếp cận với các điều khoản trong javascript
  3. không có để thực hiện yêu cầu khứ hồi cho máy chủ cho từng quyền riêng lẻ

Suy nghĩ?

Trả lời

2

Nếu bạn có một bộ rõ ràng về quyền hạn, giống như một "mức người dùng "hoặc" loại người dùng ", bạn chỉ có thể chuyển giá trị xuống trong trường bị ẩn và truy cập giá trị thông qua DOM. Bạn vẫn có thể làm điều này nếu các điều khoản của bạn là chi tiết hơn, nhưng bạn sẽ có nhiều lĩnh vực ẩn hoặc bạn sẽ phải mã hóa thông tin thành XML hoặc JSON hoặc một số định dạng khác.

Bạn có thể đặt chúng làm cờ bit để bạn có thể HOẶC một giá trị số duy nhất có mặt nạ để xem người dùng có được phép đối với một hoạt động cụ thể hay không. Điều đó sẽ rất linh hoạt và miễn là bạn không có nhiều hơn 32 "quyền" cụ thể, điều đó sẽ cho phép bất kỳ hoán vị nào của các quyền đó trong một gói rất nhỏ (về cơ bản là một int không dấu).

Ví dụ:

0x00000001 //edit permission 
0x00000002 //create new thing permission 
0x00000004 //delete things permission 
0x00000008 //view hidden things permission 
    . 
    . 
    . 
0x80000000 //total control of the server and everyone logged in 

Sau đó, một người dùng với một sự cho phép của 0x000007 có thể chỉnh sửa, tạo và xóa, nhưng không có gì khác.

Trong cả hai trường hợp, tôi nghĩ bạn đang đi đúng hướng - thực hiện yêu cầu một lần cho mỗi lần gọi trang, lưu trữ quyền trong cấu trúc dữ liệu JavaScript toàn cầu và đi từ đó. AJAX là tốt đẹp, nhưng bạn không muốn truy vấn máy chủ cho mọi quyền cụ thể trên tất cả các trang của bạn. Bạn sẽ làm điều đó một lần khi tải trang, thiết lập bản trình bày trang của bạn và lưu giá trị trong biến toàn cục, sau đó tham chiếu (các) quyền cục bộ cho các hàm sự kiện.

+0

Nếu bạn lưu trữ thông tin quyền trong một đối tượng JS toàn cầu, người dùng có khả năng chỉnh sửa/thay đổi đối tượng JS từ máy khách không? –

+0

Các quyền được lưu trữ trong JS nghiêm ngặt cho thao tác UI, không cho truy cập dữ liệu thực - ví dụ, ẩn quyền truy cập vào tab X hoặc hiển thị cột Y, v.v. – jvenema

+0

Đối với những gì nó có giá trị, tôi đã kết thúc với một cái gì đó như thế này: var MyApp. canRead = function (entity, property) {... đọc JS Object literal được trả về từ máy chủ để xác định quyền truy cập đọc vào thực thể được chỉ định ...} ;. Các điều khoản được định nghĩa trong một bảng trên máy chủ và được kết xuất với máy khách để truy cập thông qua hàm canRead(). – jvenema

-1

Mã hóa chúng là JSON.

2

Nếu bạn truyền cấu trúc quyền cho máy khách dưới dạng đối tượng JSON (hoặc XML, nếu bạn thích), bạn có thể thao tác đối tượng đó bằng mã phía máy khách và gửi lại máy chủ, có thể làm bất cứ điều gì nó cần phải xác nhận dữ liệu và duy trì nó.

+0

Loại này bỏ lỡ điểm ... Tôi có thể gửi qua lại ở bất kỳ định dạng nào tôi muốn, tôi nhận ra điều đó.Những gì tôi yêu cầu là cách tốt nhất để liên quan đến quyền được xác định trên máy chủ cho các phần tử giao diện người dùng trên máy khách. – jvenema

1

Tôi không nhất thiết phải xem giải pháp "đúng" nhất, nhưng có thể giữ tất cả nội dung cho phép ở phía máy chủ và chỉ phục vụ giao diện người dùng được cập nhật thay vì một số loại hệ thống quyền JSON không?

Bạn sẽ phải đưa ra quyết định dựa trên cách bận rộn và chuyên sâu ứng dụng của bạn hy vọng sẽ được, nhưng chắc chắn một quyết định giá trị thực hiện một trong hai cách

+0

Đó sẽ là cách tiếp cận ưa thích của ASP.Net, nhưng ở mức độ chi tiết nhất định trên bất kỳ hệ thống kiểu nào, cũng có những lợi thế để kiểm soát phía máy khách. – CMPalmer

+0

Nó phức tạp hơn thế; Tôi thực sự đang sử dụng ExtJS, vì vậy mọi thứ được xác định trước trong JS. Ví dụ, ứng dụng có 5 "khu vực", nhưng chỉ một số người dùng có quyền truy cập vào các khu vực đó, nhưng tôi không thực sự muốn hiển thị JS khác nhau mỗi lần (và có thể có vấn đề vì phần tử X bị thiếu, v.v ...). Thay vào đó, tôi nghĩ giao diện người dùng nên được định nghĩa giống nhau cho tất cả mọi người, nhưng ẩn/hiển thị theo perms. – jvenema

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