2015-10-14 83 views
0

在一個Web項目中,我們有一個簡單的文件瀏覽器。爲了安全起見,我們需要某種映射哪些用戶角色可以在哪些目錄(包括其子目錄)中讀取(R)或讀取+寫入(RW)。簡單的文件瀏覽器權限

例子:

用戶A與roleA可以folderA中folderA查看文件/

  • roleA, 「folderA /」,R

用戶B與roleB查看和編輯的文件/和還查看文件夾B/

  • roleB,「folderA /」,RW
  • roleB, 「FolderB中/」,R

一些在項目中使用的技術迄今:

  • 掛毯
  • 休眠
  • 春季安全(僅用於用戶和角色)

我一直在進一步進入Spring Security,但我不確定我是否可以爲我的用例使用GrantedAuthority實現(權限)。

所以我的問題是,如果任何人有與Spring安全的經驗,並可以指出我的方式正確。如果Spring Security不可能的話,其他庫的建議也是值得讚賞的,但是我當然更喜歡使用已經被使用的庫。

回答

2

Spring Security可以使用一些自定義代碼。註釋你的服務層是這樣的:

@PostAuthorize("hasPermission(returnObject, 'READ')") 
public FileObject readFileObject(String path) { 
    // return the file object from DAO 
} 

@PreAuthorize("hasPermission(#fileObj, 'WRITE')") 
public void writeFileObject(FileObject fileObj) { 
    // write the file object, security check made at this point 
} 

落實PermissionEvaluator接口,使它一個Spring bean。然後使之與安全配置:

@Autowired 
private PermissionEvaluator permissionEvaluator; 

@Bean 
public DefaultMethodSecurityExpressionHandler expressionHandler() { 
    DefaultMethodSecurityExpressionHandler handler = new DefaultMethodSecurityExpressionHandler(); 
    handler.setPermissionEvaluator(permissionEvaluator); 
    return handler; 
} 

和:

<global-method-security pre-post-annotations="enabled"> 
    <expression-handler ref="expressionHandler" /> 
</global-method-security> 
+0

哎,是的,這似乎是要走的路。還不確定如何配置一切,因爲我使用的是Spring-Security的Tapestry實現,但這肯定會讓我走。 –