技术开发 频道

精通 Grails: 身份验证和授权

  细粒度授权

  beforeInterceptor 提供的粗粒度授权仅仅是个开始,但是也可以向单独的闭包添加授权钩子。例如,任何已登录的 User(不仅仅是初始创建者)都可以编辑任何 Entry。可以关闭安全漏洞:将 4 行良好布置的代码添加到 EntryController.groovy 中的 edit 闭包中,如清单 8 所示:

  清单 8. 向 edit 闭包添加授权

def edit = {
    def entryInstance
= Entry.get( params.id )
    
    
//limit editing to the original author
    
if( !(session.user.login == entryInstance.author.login) ){
      flash.message
= "Sorry, you can only edit your own entries."
      redirect(action:list)
    }

    
if(!entryInstance) {
        flash.message
= "Entry not found with id ${params.id}"
        redirect(action:list)
    }
    
else {
        return [ entryInstance : entryInstance ]
    }
}

  您可以(也应该)使用相同的四行代码锁定 delete 和 update 闭包。如果来回复制和粘帖相似代码的工作非常繁琐(并且应当会如此),那么可以创建一个单一的私有方法并在所有三个闭包中调用它。如果发现在许多控制器内使用的是相同的 beforeInterceptor 和私有方法,那么可以将常见的行为解析为单个主控制器,并使用其他控制器扩展它,就像在任何 Java 类中所做的那样。

  可以向授权基础设施添加另外一项内容以使它变得更加健壮:角色

0
相关文章