grails中的用户访问控制

时间:2012-11-24 11:40:49

标签: grails user-permissions

我是Grails的新手并且已经对Shiro插件进行了一些阅读,但是我不确定它是什么,我希望有人可以指出我正确的方向。

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

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

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

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:-2)

通常,有很多方法可以确保您的行为。

我建议将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()

最佳实施取决于您应用的架构。如果您需要更多帮助,则必须提供有关应用的更多详细信息。

希望有所帮助!