2013-06-15 28 views
7

Nếu tôi có ứng dụng giao diện người dùng JavaScript, thực tiễn tốt nhất/phổ biến để xử lý quyền/ACL là gì. Ví dụ, tôi muốn hiển thị/ẩn một số yếu tố vv Tất nhiên, nó không an toàn, nhưng vẫn còn trên lớp xem, làm thế nào tôi có thể kiểm soát này.Quyền/ACL trong Ứng dụng khách JavaScript của ứng dụng

Tôi đang sử dụng BackboneJS (với rối) như một khung phía khách hàng, vì vậy sử dụng jQuery, dấu gạch dưới, vv

Tôi đang nghĩ về mức độ cao, tôi có thể cố gắng bằng cách nào đó vô hiệu hóa một số tuyến đường. Cần một số nghiên cứu nhưng tôi có thể làm Router.on("route", checkPermissions).

Sau đó trên lớp chế độ xem, để ẩn/hiển thị các thành phần, ... vẫn không chắc cách tốt nhất để xử lý việc này. Tôi cần phải vượt qua trong một số điều khoản đối tượng vào mô hình ...

Trả lời

1

Tôi muốn tạo các lớp tùy chỉnh BaseModel/BaseCollection với logic phân tích cú pháp đã sửa đổi để loại bỏ các thuộc tính không thể truy cập khỏi lớp dữ liệu. Sau đó, bạn sẽ có thể chuyển dữ liệu che giấu dữ liệu này sang máy chủ một cách minh bạch và nhận được bảo mật có giá trị sản xuất.

Đối với dữ liệu quyền, _security thuộc tính trên Lớp mô hình/Bộ sưu tập sẽ là một nơi tốt để khai báo.

Trong chế độ xem, sử dụng logic có điều kiện như akoskm đề xuất

+1

Phân tích cú pháp các thuộc tính dữ liệu nhạy cảm ở phía máy khách là một ý tưởng tồi. Dữ liệu nhạy cảm sẽ không bao giờ rời khỏi máy chủ nếu người dùng không có quyền xem nó. –

6

Để làm cho các yếu tố ẩn/hiện trên màn hình tôi làm kiểm tra nội tuyến trong mẫu của tôi, một cái gì đó như:

<% if (user.isInRole('ADMIN', 'MNGR')) { %> 
    <li <% page == "store" ? print('class="active"') :'' %>> 
    </li> 
<% } %> 

và bổ sung như sau chức năng helper bên trong mô hình của tôi sử dụng để kiểm tra các điều khoản:

isInRole: function (rr) { 
    var self = this; 
    $.each(rr, function(i) { 
     if (rr[i] === self.currentRole) { 
      alert('pass'); 
     } 
    }); 
} 

tôi giả định này là an toàn-đủ, kể từ khi kiểm tra thực tế cho phép cần thiết xảy ra một lần nữa về phía máy chủ. Bằng cách ẩn một số điều khiển, tôi chỉ hướng dẫn người dùng thông qua ứng dụng và không cho phép anh ta nhầm lẫn với hành động của anh ta/cô ấy không có các đặc quyền cần thiết.

Với cách tiếp cận như vậy, tôi không bao giờ ẩn dữ liệu tự động đi qua các dịch vụ REST, chỉ yếu tố tĩnh của trang.

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