2012-11-13 14 views
0

在CRUD jsf應用程序中,所有者擁有對象,如記錄。如果對象屬於用戶,用戶只能調用方法

我希望所有者只能查看/編輯/刪除自己創建的對象。一種方法來實現這一點,在每個方法來檢查是否已記錄的用戶創建對象。

可以有很多類似的方法和對象,所以我想用的,而不是在每一個方法使用

if (selectedObject.owner == loggedUser) 

短語另一個優雅/自動方式。

是否有可能,如果可能的話怎麼樣?

+0

這看起來像是一個優雅的解決方案。你可以添加的唯一東西是一個抽象,但我現在不打算去解決這個問題。 – nyxz

回答

2

您可以使用aspect oriented programming進行訪問保護。

我會寫一個方面來攔截訪問受限方法的所有方法調用,在建議之前在中應用該檢查,並在失敗時拋出異常。根據程序的結構,通過尋找明確的註釋或使用相當通用的切入點。

這將移動您if (obj.owner.equals(loggedUser))到一箇中央位置,當然你仍舊需要照顧不包括在列表等

‘通過’Java方面實現AspectJ其他用戶的項目。它也被Spring框架使用和支持,您可能已經在使用它:http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/aop.html

0

如果我是你,我會顯示只有當用戶被授權使用

rendered={user.isOwner} 

組件,您將以此作爲在組件的屬性。

+0

由於安全問題,我不想使用呈現的屬性。因爲每個人都可以篡改發佈的數據,請重新更改並重新發布。這是一個安全缺陷。它劑量防止該方法被調用。 – nsumer

相關問題