【问题标题】:Validity in Spring Security SecUser SecRoleSpring Security SecUser SecRole 中的有效性
【发布时间】:2018-08-23 14:39:11
【问题描述】:

我需要在订阅的基础上向用户提供角色。所以我创建了一个如下所示的域:

class UserRoleValidity {

    SecUser user
    SecRole role
    Date validFrom
    Date validTo

    static constraints = {
        validFrom nullable: true, blank: false
        validTo nullable: true, blank: false, validator: dateValidator
    }

    static def dateValidator = { val, obj ->
        if(!val || (val && !obj.validFrom)) {
            return true
        }
        val.equals(obj.validFrom) || val.after(obj.validFrom)
    }
}

仅当当前日期在validFrom 和validTo 范围内时,该角色才对用户有效。有没有更好的方法来处理这个问题?

【问题讨论】:

    标签: grails spring-security


    【解决方案1】:

    如果您已经配置了 Spring Security,那么您不需要创建单独的类来检查用户角色和验证之间的时间只需为您的控制器操作使用“@Secured”注释 如下。 例如

    // provide the roles which you want to validate
    @Secured(['ROLE_ADMIN', 'ROLE_COORDINATOR'])
    def validateTimeToPerformAction(){
    
       /*
        If the current time is between given range return true
        Else return false
       */
    }
    

    【讨论】:

    • 但是我仍然需要保存 validFrom 和 validTo 日期并将它们映射到正确的用户和角色。你建议我把这些保存在哪里?此外,我在多个控制器中有一百多个动作。如何处理检查每个动作的时间?
    • 好的,然后继续你正在尝试的,但是,考虑优化。您的日期范围是否已为每个允许的角色预定义/修复?如果是这种情况,那么更好的方法是设计一个静态地图或将地图作为 JSON 字符串转储到用户表中,针对每个用户提供日期范围和其他必要时的约束。
    猜你喜欢
    • 2012-02-19
    • 2014-03-25
    • 2015-10-14
    • 2018-10-25
    • 2020-10-30
    • 1970-01-01
    • 2018-04-25
    • 2020-08-04
    • 2017-09-26
    相关资源
    最近更新 更多