grails中的用户访问控制
Posted
技术标签:
【中文标题】grails中的用户访问控制【英文标题】:User access control in grails 【发布时间】:2012-11-24 11:40:48 【问题描述】:我对 Grails 完全陌生,并且已经阅读了 Shiro 插件,但我不确定这是我所追求的,所以希望有人能指出我正确的方向。
对于我最后一年的计算机科学项目,我正在创建用 Grails 编写的在线团队协作工具。该应用程序的结构如下:
应用程序 - 有许多公司使用它 公司有很多项目 项目有很多用户等。
我确保当用户登录时,如果他们是管理员,他们只能看到他们公司和项目的内容,或者如果他们是普通用户,则只能看到他们的项目的最佳方式是什么。显然我不希望一家公司的用户能够访问其他公司的项目信息等。
非常感谢任何帮助。
【问题讨论】:
【参考方案1】:一般来说,有很多方法可以确保您的期望行为。
我建议将 shiro 与标准 grails 过滤器结合使用:
class SecurityFilters
def filters =
all(uri: "/**")
before =
// Ignore direct views (e.g. the default main index page).
if (!controllerName) return true
accessControl
// add your logic here to determine if user has access or not
// return true if user has access, false otherwise
// get current user
def user = yourService.getCurrentUser()
// get projects the user is allowed to access
def projects = yourService.getProjectsOfUser(user)
// get the project the user tries to access
def currentProject = Project.get(params.projectId)
// is current project in list of permitted projects?
return project.contains(currentProject)
您也可以实现自己的Permission
并使用SecurityUtils.subject.isPermitted()
。
最佳实现取决于您应用的架构。如果您需要更多帮助,您必须提供有关您的应用的更多详细信息。
希望对您有所帮助!
【讨论】:
感谢您的帮助,请问 yourService 的示例是什么?会是 SpringSecurityService.getCurrentUser() 之类的吗? 永远不要使用自己的安全性 - 出错的风险太大。 Spring Security 和 Shiro 非常易于设置和使用。accessControl
闭包不是Shiro提供的一种保护方式吗?
我尝试了您的示例,但它删除了对每个控制器和操作强制执行的默认权限。我使用默认 Shiro 访问控制的问题是,据我所知,对于有权访问 company 1
的用户,权限将设置为 company:*:1
,但如果我有第二个用户 user 2
company 2
的一部分,我以 user 1
登录我希望权限阻止我访问 URL user\view\2
对此还有什么帮助吗?我仍然不确定如何实现将公司内容彼此分开的权限,同时希望保留默认的accessControl
以上是关于grails中的用户访问控制的主要内容,如果未能解决你的问题,请参考以下文章
Grails with SpringSecurity,检查当前用户是不是可以访问控制器/动作