grails中的用户访问控制
我对Grails完全陌生,也读过一些关于Shiro插件的书,但我不确定这是我想要的,所以希望有人能给我指出正确的方向 在我计算机科学的最后一年项目中,我正在创建用Grails编写的在线团队协作工具。应用程序的结构如下所示: 应用程序-有许多公司在使用它 公司有很多项目 项目有很多用户等 我确保当用户登录时,如果他们是管理员,他们只能看到公司和项目的内容,或者如果他们是普通用户,他们只能看到项目的内容,最好的方法是什么。显然,我不希望一家公司的用户能够访问其他公司的项目信息等grails中的用户访问控制,grails,user-permissions,Grails,User Permissions,我对Grails完全陌生,也读过一些关于Shiro插件的书,但我不确定这是我想要的,所以希望有人能给我指出正确的方向 在我计算机科学的最后一年项目中,我正在创建用Grails编写的在线团队协作工具。应用程序的结构如下所示: 应用程序-有许多公司在使用它 公司有很多项目 项目有很多用户等 我确保当用户登录时,如果他们是管理员,他们只能看到公司和项目的内容,或者如果他们是普通用户,他们只能看到项目的内容,最好的方法是什么。显然,我不希望一家公司的用户能够访问其他公司的项目信息等 非常感谢您的帮助。一
非常感谢您的帮助。一般来说,有很多方法可以确保您所期望的行为 我建议将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)
}
}
}
}
}
或者,您可以实现自己的权限
,并使用SecurityUtils.subject.ispermited()
最佳实施取决于应用程序的体系结构。如果你需要更多帮助,你必须提供你的应用程序的更多细节
希望有帮助 一般来说,有很多方法可以确保你想要的行为 我建议将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)
}
}
}
}
}
或者,您可以实现自己的权限
,并使用SecurityUtils.subject.ispermited()
最佳实施取决于应用程序的体系结构。如果你需要更多帮助,你必须提供你的应用程序的更多细节
希望有帮助 谢谢你的帮助,请问你的服务是什么样的?它会像SpringSecurityService.getCurrentUser()一样吗?永远不要使用您自己的安全性—错误的风险太大。Spring Security和Shiro非常易于设置和使用。
accessControl
闭包不是Shiro提供的一种保护方式吗?我试过你的例子,但它删除了在每个控制器和操作上强制执行的默认权限。我使用默认Shiro访问控制的问题是,根据我收集的信息,如果用户有权访问公司1
,权限将设置为公司:::1
,但如果我有第二个用户,用户2
,他是公司2
的一部分,我以user 1
的身份登录,我希望有权限阻止我访问URLuser\view\2
有关此的更多帮助吗?我仍然不知道如何在保持公司内容彼此独立的同时实现权限,同时希望保留默认的accessControl
谢谢您的帮助,请问您的服务会是什么样的?它会像SpringSecurityService.getCurrentUser()一样吗?永远不要使用您自己的安全性—错误的风险太大。Spring Security和Shiro非常易于设置和使用。accessControl
闭包不是Shiro提供的一种保护方式吗?我试过你的例子,但它删除了在每个控制器和操作上强制执行的默认权限。我使用默认Shiro访问控制的问题是,根据我收集的信息,如果用户有权访问公司1
,权限将设置为公司:::1
,但如果我有第二个用户,用户2
,他是公司2
的一部分,我以user 1
的身份登录,我希望有权限阻止我访问URLuser\view\2
有关此的更多帮助吗?我仍然不确定如何在保持公司内容彼此独立的同时实现权限,同时希望保留默认的accessControl