在CRUD jsf應用程序中,所有者擁有對象,如記錄。如果對象屬於用戶,用戶只能調用方法
我希望所有者只能查看/編輯/刪除自己創建的對象。一種方法來實現這一點,在每個方法來檢查是否已記錄的用戶創建對象。
可以有很多類似的方法和對象,所以我想用的,而不是在每一個方法使用
if (selectedObject.owner == loggedUser)
短語另一個優雅/自動方式。
是否有可能,如果可能的話怎麼樣?
在CRUD jsf應用程序中,所有者擁有對象,如記錄。如果對象屬於用戶,用戶只能調用方法
我希望所有者只能查看/編輯/刪除自己創建的對象。一種方法來實現這一點,在每個方法來檢查是否已記錄的用戶創建對象。
可以有很多類似的方法和對象,所以我想用的,而不是在每一個方法使用
if (selectedObject.owner == loggedUser)
短語另一個優雅/自動方式。
是否有可能,如果可能的話怎麼樣?
您可以使用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
如果我是你,我會顯示只有當用戶被授權使用
rendered={user.isOwner}
組件,您將以此作爲在組件的屬性。
由於安全問題,我不想使用呈現的屬性。因爲每個人都可以篡改發佈的數據,請重新更改並重新發布。這是一個安全缺陷。它劑量防止該方法被調用。 – nsumer
這看起來像是一個優雅的解決方案。你可以添加的唯一東西是一個抽象,但我現在不打算去解決這個問題。 – nyxz