2011-10-26 22 views
7

Vì vậy, Apex có "không gian làm việc", cho phép bạn tạo người dùng ba loại - tất cả đều là nội bộ cho tổ chức trong tự nhiên. Ngoài ra, có vẻ như không có cách nào để một nhà phát triển của một trang web riêng lẻ trên Apex có "người dùng" chỉ cho trang web của mình.Ủy quyền và vai trò người dùng trong Oracle Apex?

Tôi có thiếu gì đó không?

Tôi cần có thể có người dùng bên ngoài để có thể truy cập vào một số tính năng của trang web, ví dụ: kế toán chỉ có thể xem các trang A và B trong khi các nhà quản trị có thể thấy A, B và C.

Tôi cần có khả năng có một số nhóm người có mức độ truy cập khác nhau.

Chỉ có thể thực hiện việc này bằng cách tạo không gian làm việc/nhóm? Hoặc có thể được thực hiện nội bộ trên trang web của tôi chỉ?

Trả lời

7

Mặc dù APEX có khái niệm quản lý người dùng tích hợp được gọi là "Nhóm" Tôi phải thú nhận rằng tôi chưa bao giờ sử dụng khái niệm này và sự xem xét nhanh chóng của tài liệu không rõ ràng về cách bạn sử dụng chúng để kiểm soát quyền truy cập (nhưng hãy xem Tom's answer ở đây để biết điều đó).

Có thể bạn sẽ cần tạo bảng người dùng/vai trò trong cơ sở dữ liệu của mình và sử dụng các bảng này cùng với Lược đồ ủy quyền APEX để kiểm soát quyền truy cập vào các trang. Một Authorization Đề án duy nhất của loại "Chức năng PL/SQL trở Boolean" có thể được tạo ra với các cơ quan chức năng:

return my_auth_pkg.is_authorized (p_user => :app_user, 
            p_app_id => :app_id 
            p_page_id => :app_page_id); 

Sau đó, bạn sẽ thực hiện các gói để tìm kiếm đặc quyền của người sử dụng và quyết định có nên trả về TRUE hoặc FALSE cho ứng dụng và id trang. enter image description here

Hoặc bạn chỉ có thể thực hiện các lệnh SQL để kiểm tra quyền truy cập trực tiếp vào Đề án Authorization: enter image description here

(NB "user_roles" và "role_pages" là tên tôi tạo ra, để đại diện cho bảng của bạn)

+0

Mã chính xác được liệt kê ở đâu? – antonpug

+0

Bạn sẽ nhập nó vào thuộc tính "Cơ thể Hàm" của Đề án Cấp phép APEX khi bạn tạo nó. –

+0

Ah alright. Vì vậy, đó cũng là nơi tôi sẽ tạo ra các kiểm tra để xem liệu bảng db của tôi có chứa thông tin thích hợp hay không? – antonpug

6

Tôi chỉ muốn mở rộng trên Tony's answer, mà chính nó là chính xác. Tôi chỉ muốn cho bạn thấy một cách khác, mà tôi nghĩ rằng sẽ dễ dàng hơn trên một người mới bắt đầu và bỏ qua việc tạo ra các bảng.

Nếu ứng dụng của bạn sử dụng Apex làm lược đồ xác thực thì người dùng của bạn được quản lý thông qua chính quyền của vùng làm việc. Bạn có thể tạo, chỉnh sửa và xóa người dùng, nhưng bạn cũng có thể xác định nhóm và liên kết người dùng với nhóm. Bạn có thể tạo một số người dùng "người dùng cuối" và xác định một vài nhóm, như "Nhân viên điều hành".

Apex users and groups Creation of a group Khi bạn đã tạo nhóm của bạn, hãy để người dùng mà bạn muốn gán nhóm này, và thêm nhóm vào các nhóm người sử dụng

Adding a group to a user

rằng khi bạn đã có thiết lập, bạn vẫn cần các lược đồ ủy quyền. Thực tế bạn vẫn cần một số kiến ​​thức pl/sql ở đây, nhưng có thể giữ mã hóa ở mức tối thiểu, nhờ vào một số công cụ api tiện dụng. Defining an authorization based on apex groups Các current_user_in_group làm những gì nó nói: nó kiểm tra cho người dùng hiện tại nếu ông đã nói nhóm được giao. Với một số mở rộng sử dụng một số cấu trúc IF đơn giản, bạn có thể tăng tốc nó lên một chút!Không phải là tôi hoàn toàn đề nghị phương pháp này, tôi tìm thấy nó một chút tẻ nhạt bản thân mình, và bạn cần một ai đó để đi vào APEX để thực sự duy trì người dùng và nhóm của họ, nhưng nó cũng có thể được rằng điều này là chấp nhận được trong môi trường của bạn . Bạn có thể sử dụng nó để bắt đầu với tuy nhiên. Bạn có thể dễ dàng chuyển đổi các lược đồ xác thực, và với việc thay đổi lược đồ ủy quyền của bạn để chúng tuân thủ lược đồ auth mới, bạn có thể dễ dàng và nhanh chóng điều chỉnh điều này sau đó. Nó phụ thuộc vào các ưu tiên và mục tiêu của bạn tất nhiên.

+1

+1 Tuyệt vời, bây giờ tôi biết cách sử dụng các nhóm tích hợp! Tôi đã xem tài liệu apex_util trước khi trả lời, nhưng không thấy chức năng đó. Chỉ cần quan sát: mã của bạn trong biểu thức 1 có thể được giảm xuống một cách đơn giản; 'return apex_util.current_user_in_group (p_group_name => 'Executives');' –

+0

Tôi đã thực hiện câu trả lời của bạn ở đây Tom, và nó chắc chắn có hiệu quả trong việc hạn chế truy cập. Trong thực tế, tôi không thể truy cập trang đăng nhập được nữa. XD Làm thế nào tôi có thể sửa chữa điều đó? Tôi nên lưu ý rằng tôi đã áp dụng lược đồ ủy quyền ở cấp ứng dụng, không áp dụng cấp trang. Tôi có phải tắt ủy quyền ở cấp ứng dụng và thực sự trải qua và giới hạn quyền truy cập vào từng trang riêng lẻ không? – TraxusIV

+1

@TraxusIV Rất tiếc, xin lỗi vì đã trả lời muộn! Tôi nghĩ rằng điều này có thể được gắn liền với phiên bản đỉnh của bạn, và các phiên bản sau này của apex không nên làm điều này nữa (tôi tin). Có thể từ 4,2 trở lên. Ngoài ra, có, bạn sẽ cần phải chỉ định trực tiếp. Đừng băn khoăn, bạn có thể làm điều này tương đối dễ dàng bằng cách vào Tiện ích> chọn Tiện ích chéo trên thanh bên phải> chỉnh sửa lưới của tất cả các trang. Bạn có thể thay đổi lược đồ ủy quyền ở đó, dễ dàng, cho tất cả các trang của bạn. Đừng quên cứu! :) – Tom

0

Uỷ quyền là một quá trình xác định xem một người được xác thực/xác định có được phép truy cập vào tài nguyên hay thực hiện một thao tác hay không. Nó dựa trên bộ đặc quyền hoặc vai trò được gán cho người dùng. Ví dụ, Trong cơ sở dữ liệu Oracle, Quản trị viên có đặc quyền để lên lịch công việc, trong khi người dùng không thể. Ủy quyền khác với Xác thực như thế nào? Thường xuyên xác thực và ủy quyền hoạt động cùng nhau. Nói cách khác, Ủy quyền tuân theo Xác thực. Xác thực xác định bạn là ai? Ủy quyền xác định những gì bạn được phép làm?