2015-10-14 71 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实现,但这肯定会让我走。 –