【问题标题】:User access control in grailsgrails中的用户访问控制
【发布时间】:2012-11-24 11:40:48
【问题描述】:

我对 Grails 完全陌生,并且已经阅读了 Shiro 插件,但我不确定这是我所追求的,所以希望有人能指出我正确的方向。

对于我最后一年的计算机科学项目,我正在创建用 Grails 编写的在线团队协作工具。该应用程序的结构如下:

应用程序 - 有许多公司使用它 公司有很多项目 项目有很多用户等。

我确保当用户登录时,如果他们是管理员,他们只能看到他们公司和项目的内容,或者如果他们是普通用户,则只能看到他们的项目的最佳方式是什么。显然我不希望一家公司的用户能够访问其他公司的项目信息等。

非常感谢任何帮助。

【问题讨论】:

    标签: grails user-permissions


    【解决方案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
    猜你喜欢
    • 2011-04-18
    • 2018-10-08
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多