2013-05-24 45 views
5

Tôi đang áp dụng bảo mật mùa xuân trên trang jsp của mình, tôi cần hiển thị các phần khác nhau của trang cho người dùng có vai trò khác nhau, tất cả các vai trò như sau.Cách tiếp cận của tôi là cung cấp quyền truy cập cho người dùng chính xác?

người dùng Tất cả chứng thực >> Chỉnh sửa và Add New

Quản trị> Xóa và Chỉnh sửa và Add New

Anonymous> Add New

<sec:authorize 
     access="isAuthenticated()"> 
      Code of add new and edit buttons 
</sec:authorize> 

<sec:authorize 
     access="hasAnyRole('ADMIN')"> 
    Code to add new, edit and delete buttons 
</sec:authorize> 

    <sec:authorize 
     access="isAnonymous()"> 
    Code to add new 
    </sec:authorize> 

tôi tự hỏi nếu có bất kỳ phương pháp dễ dàng hơn, trong trường hợp này, nếu tôi muốn sửa đổi quyền truy cập của một vai trò cụ thể, tôi phải thay đổi các quy tắc truy cập của nó trong tệp security.xml và mọi trang mà tôi đã đặt quyền truy cập vai trò. Ví dụ, cho phép nói rằng tôi muốn không thể quản trị vai trò để truy cập nút xóa sau đó tôi phải thay đổi mã security.xml và tất cả các trang JSP mà vai trò quản trị đã được xác thực để xem nút xóa.

Có phương pháp nào dễ dàng hơn để làm điều đó không !?

+1

trong khung thành phần, bạn có thể chia trang thành nhiều thành phần và xác định quyền truy cập cho từng thành phần trong phần mã java, ví dụ: JSF, tapestry –

Trả lời

1

Tôi giả sử rằng bạn có quyền tương tự cho nút Edit ở khắp mọi nơi trong ứng dụng của bạn. Trong trường hợp này, bạn có thể trích xuất mã autorization vào một số thẻ tùy chỉnh (tôi khuyên bạn nên JSP tag files). Đối với mỗi nút chỉnh sửa, bạn sẽ sử dụng thẻ tùy chỉnh của bạn:

<customtags:hasEditPermission> 
    Edit button code goes here 
<customtags:hasEditPermission> 

Tất cả các quyền sẽ được công bố lần trong hasEditPermission.tag của bạn:

Vì vậy, trong một trường hợp vai trò POWER_USER mới, bạn cần phải sửa đổi chỉ là một tập tin :

<%@tag description="Edit permission tag" pageEncoding="UTF-8"%> 
<sec:authorize access="hasAnyRole('ADMIN', 'POWER_USER')"> 
    <jsp:doBody/> 
</sec:authorize> 

Bạn cũng có thể chuẩn bị và sử dụng thẻ cho nút "Thêm mới" và "Xóa". Hi vọng điêu nay co ich.

2

Tôi không nghĩ rằng có một giải pháp tích hợp cho việc này. Bạn có thể thiết lập một hệ thống vai trò hạt mịn đảm bảo như vai trò chỉnh sửa, vai trò xóa và v.v. Sau đó, bạn có thể gán các vai trò này một cách tự do hơn. Nếu bạn muốn giữ cho người dùng dễ dàng (như vẫn chỉ hiển thị vai trò quản trị và người dùng), bạn có thể phải che giấu các vai trò thực sự đằng sau ánh xạ giữa vai trò và tiêu đề được hiển thị cho người dùng.

Một cách tiếp cận khác là thiết lập các thông số chung cho mỗi hành động (chỉnh sửa, xóa, v.v.) trong đó bạn chỉ định vai trò sẽ được phép cho hành động. Bằng cách này, bạn sẽ không mã hóa các vai trò vào ứng dụng của bạn nhưng ánh xạ chúng thông qua các tham số chung.

Mong muốn xem liệu có ai đó có ý tưởng hay hơn không.

Chỉnh sửa để xác định phương pháp lập bản đồ bằng các thông số toàn cầu(tinh chế các bản đồ sẽ được lưu trữ trong một db nhưng đó là nhận được từ một giải pháp đặc biệt để thực hiện một ACL):

Với các thông số toàn cầu Tôi chỉ có nghĩa là một cái gì đó giống như một rightsMapping.properties. Trong tập này, bạn sẽ lập bản đồ một cái gì đó như thế:

right.edit=ROLE_USER, ROLE_ADMIN 
right.edit=ROLE_ADMIN 
etc... 

Sau đó bạn chỉ có thể chèn các quyền vào các trang JSF sử dụng một cái gì đó như thế này:

<f:loadBundle basename="rightsMapping" var="rights"/> 
.... 
<f:CommandButton name="edit" .... rendered="hasRole(rights.edit)"/> 

Đây là một tay khá dễ dàng trên giải pháp mà có thể được tinh chỉnh bằng cách sử dụng ví dụ một bảng ánh xạ trong DB, một Bean đánh giá quyền truy cập, v.v. Nhưng ý tưởng cơ bản về ánh xạ các quyền hạn cho các vai trò vẫn giữ nguyên.

+0

ý của bạn là gì? – J888

+0

cập nhật câu trả lời của tôi – Carsten

2

Có thể có giải pháp bằng cách sử dụng bộ quyền có thể được chứa trong đối tượng vai trò làm bộ sưu tập. Sau khi triển khai, bạn có thể kiểm tra quyền hiển thị các nút và nếu bạn muốn thay đổi bất kỳ thứ gì trong kiến ​​trúc bảo mật, bạn có thể dễ dàng quản lý bằng cách cấp hoặc thu hồi quyền từ vai trò liên quan.

Ví dụ về điều này có thể được thấy trong liên kết bên dưới.

http://en.tekstenuitleg.net/blog/spring-security-with-roles-and-rights

+0

Có vẻ như tôi nên có các tệp jsp khác nhau cho mỗi vai trò, sau đó tìm hiểu vai trò của họ trong phần cuối và hiển thị trang jsp được liên kết với vai trò đó tôi có đúng không? – J888

+0

Không giống như vậy. Bạn nên xác định vai trò của bạn là quyền và lớp miền người dùng của bạn nên chứa một bộ sưu tập quyền. Nếu bạn chỉ định định nghĩa vai trò của mình làm quyền, bạn có thể chỉ cần kiểm tra các tùy chọn liên quan của jsp với talipkorkmaz

+0

đây là phương thức bảo mật, nhưng tôi cần biết cách không hiển thị một nút trên trang jsp nếu người dùng không được ủy quyền. – J888

0

Đây có lẽ là những gì bạn đang looking for, with sample code

Trong trường hợp của bạn, bạn sẽ phải BF_ADD_XXX, BF_EDIT_XXX và BF_DELETE_XXX, vv

này cho phép bạn cấp/hủy bỏ điều khoản cụ thể (hoặc BFS hoặc chức năng kinh doanh hoặc bất cứ điều gì bạn muốn gọi cho họ) đến/từ các vai trò cụ thể.

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