2012-02-24 9 views
5

Tôi đang tìm thông tin về cách triển khai các trang bảo mật bằng ExtJS 4. Theo các trang bảo mật, tôi có nghĩa là người dùng sẽ đăng nhập vào trang web của chúng tôi bằng Siteminder (SSO) và chúng tôi sẽ có danh tính của người dùng. Sau đó, chúng tôi sẽ xác định vai trò người dùng sẽ có bằng cách thực hiện cuộc gọi cơ sở dữ liệu/LDAP và chỉ hiển thị các chế độ xem/thành phần đó mà người dùng có quyền truy cập.ExtJS và ủy quyền trang (phía máy chủ)

Một số câu hỏi tôi suy nghĩ:

1.) Tất nhiên tôi mong chờ chúng tôi sẽ làm việc kiểm tra sự cho phép trước để hiển thị các trang trên server-side, vì vậy làm thế nào để bạn làm điều này trước khi bắn Ext. đã sẵn sàng()? Tôi cần phải có ExtJS chờ đợi phản ứng từ máy chủ?

2.) Cách tốt nhất để tổ chức các thành phần của trang nơi trường hợp có thể là ai đó có thể thấy một thành phần cụ thể và người khác không thể?

3.) Làm cách nào để phân phối trang kết quả (tức là các phần mà người dùng có quyền truy cập) cho khách hàng?

TIA!

Trả lời

2
  1. Sử dụng công nghệ phía máy chủ để xử lý ủy quyền trước bằng cách đặt tập lệnh khởi chạy ứng dụng JS vào JSP/GSP. Điều này làm cho các thành phần phía máy chủ khởi động trước và sau đó kết xuất HTML/JS/CSS cho máy khách. Để sử dụng đầy đủ ứng dụng RIA index.gsp (hoặc jsp) và URL của bạn vẫn là "tên miền/ngữ cảnh".

  2. Bạn có thể thẩm vấn quyền truy cập vào nội dung thông qua yêu cầu ajax đến máy chủ hoặc bạn có thể đặt biến JS qua công nghệ JSP lần nữa được xử lý trước khi phần còn lại của phản hồi ứng dụng được trả về.

< g: javascript>

//global env var definition 
    var env = "${System.getProperty(Environment.KEY)}"; 

< /g:javascript> 

Cả hai đều không phải là 100% an toàn như mã phía khách hàng có thể được thay đổi. Việc thực thi bảo mật thực sự phải được xử lý ở phía máy chủ khi dữ liệu được gửi để xử lý.

'3. Cách dễ dàng là ẩn/hiện chế độ xem vv dựa trên 2. ở trên. Ngoài ra còn có một số thử nghiệm ra khỏi đó với mô-đun hóa ứng dụng MVC phía máy khách bằng bộ điều khiển khởi tạo lười biếng (thủ công) có thể hoặc không cần thiết.

Hy vọng điều này sẽ hữu ích.

DB :)

1
  1. séc ra Role-based access control. Tôi sử dụng RBAC dựa trên cơ sở dữ liệu của Yii và có một tập lệnh php trả về các quy tắc rbac theo định dạng json khi ext khởi động

  2. trên máy khách, đơn giản nhất là ẩn hoặc tắt chức năng không được phép.

  3. trên máy chủ, bạn nên ném 403 http error nếu người dùng không được phép thực hiện chức năng. xử lý các ngoại lệ ajax trong ext và kiểm tra 403s.

2

Tôi hiện đang thử nghiệm với giải pháp sau. Mặc dù nó sẽ chỉ hoạt động cho các ứng dụng có một nhóm người dùng khá đơn giản, nhưng nó có thể giúp ích cho bạn.

Để bắt đầu, xác thực người dùng được thực hiện mà không có extjs, bằng cách sử dụng trang HTML/CSS đơn giản. Khi người dùng đăng nhập, chi tiết của nó (id người dùng, vai trò) được lưu vào phiên PHP. Và sau đó trang chuyển hướng đến một trong hai ứng dụng extjs.

Một ứng dụng cho người dùng bình thường (tôi sẽ gọi cho họ là khách hàng), đây là những người mà JS phía khách hàng không bao gồm bất kỳ chức năng quản trị viên nào. Ứng dụng khác dành cho quản trị viên.

Cả hai ứng dụng đều có lớp học của chúng được kế thừa từ các lớp cơ sở. Vì vậy, chúng tôi có, ví dụ, base.mainMenu từ đó cả admin.mainMenu và clients.mainMenu kế thừa. Sự khác biệt duy nhất trong kịch bản app.js là các bộ điều khiển được tải, và mỗi mô-đun tải động extJS 4, chỉ các khung nhìn liên quan mới được tải (tức là, nhìn thấy phía máy khách). Trong trường hợp của tôi, tất cả các trang đều tải động, vì vậy người dùng của tôi chỉ có thể tải trang động trong menu chính của họ.

Ứng dụng quản trị chặn các tính năng nhất định bằng cách sử dụng biến toàn cục JS bao gồm vai trò của người dùng. Vì vậy, ví dụ, việc ẩn nút 'chỉnh sửa' từ người kiểm duyệt (nhóm quản trị có ít quyền hơn) được thực hiện khi chế độ xem được tải (thực tế điều này thực sự được thực hiện bằng cách không tải plugin cho phép chỉnh sửa trên chế độ xem).

Để kết thúc tất cả, mọi cuộc gọi đến máy chủ sẽ kiểm tra xem người dùng phiên có quyền đối với thao tác được yêu cầu hay không, vì vậy bất kể tập lệnh phía máy khách, chỉ người thực hiện quyền thích hợp mới có thể thực hiện thao tác máy chủ.

Để tóm tắt, bạn có 3 chiến lược khác nhau mà bạn có thể kết hợp và trận đấu:

  • Tải ứng dụng khác nhau cho người dùng khác nhau. Nếu các lớp của bạn tất cả vốn có từ các lớp cơ sở, điều này dễ dàng hơn việc duy trì 2 hoặc nhiều ứng dụng hoàn toàn khác nhau.
  • Sử dụng biến toàn cầu JS để tắt/bật một số tính năng nhất định cho một số người dùng nhất định. Điều này chỉ tốt nếu bạn không gặp vấn đề gì với các tính năng tải phía máy khách mà sau đó bị vô hiệu hóa (nhưng vẫn thấy bởi các trình gỡ lỗi).
  • Bất kể điều gì, tất cả cuộc gọi phía máy chủ đều được kiểm tra với biến phiên.
5

Nếu bạn đang làm việc từ nền Java và thoải mái khi sử dụng Spring, tôi đã viết một phương pháp sử dụng Spring Security here. Điều này sẽ cho phép bạn cắm bất kỳ cơ chế xác thực nào bạn muốn. Sự khác biệt chính là thay vì sử dụng index.html để khởi động ứng dụng, tôi có một JSP để Bộ lọc Spring Servlet sẽ kích hoạt để xác thực. Ứng dụng Ext JS chặn cho đến khi người dùng được xác thực và vai trò/quyền của người dùng được cung cấp.

+0

Đây thực sự là ví dụ tốt nhất để làm điều này, ngay cả khi nó là trung tâm Java. Cảm ơn bạn đã cung cấp liên kết này !! –

+0

Làm việc tốt trong blog của bạn .. –