gRbac入门总结 | 青训营笔记

391 阅读2分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第3篇笔记

1 介绍

grbac是一种RBAC框架。它支持增强的通配符并使用Radix树匹配HTTP请求,适用目前所

有的数据库和数据结构。

grbac的作用是确保指定的资源只能由指定的角色访问。但是grbac不负责储存鉴权规则和分辨“发起请求的IP具有那些角色”,所以需要自己配置规则信息给每一个请求的发起者提供相关的角色

首先获取依赖:

go get -u github.com/storyicon/grbac
//常与gin框架连用
go get -u github.com/gin-gonic/gin

2 概念

2.1 Resource类

type Resource struct {
    // Host 定义资源的Host,允许使用增强的通配符。
    Host string `json:"host"`
    // Path 定义资源的Path,允许使用增强的通配符。
    Path string `json:"path"`
    // Method 定义资源的Method,允许使用增强的通配符。
    Method string `json:"method"`
}

2.2 Permission类

// Permission用于定义权限控制信息
type Permission struct {
    // AuthorizedRoles定义允许访问资源的角色
    // 支持的类型: 非空字符串,*
    //      *: 意味着任何角色,但访问者应该至少有一个角色,
    //      非空字符串:指定的角色
    AuthorizedRoles []string `json:"authorized_roles"`
    // ForbiddenRoles 定义不允许访问指定资源的角色
    // ForbiddenRoles 优先级高于AuthorizedRoles
    // 支持的类型:非空字符串,*
    //      *: 意味着任何角色,但访问者应该至少有一个角色,
    //      非空字符串:指定的角色
    //
    ForbiddenRoles []string `json:"forbidden_roles"`
    // AllowAnyone的优先级高于 ForbiddenRoles、AuthorizedRoles
    // 如果设置为true,任何人都可以通过验证。
    // 请注意,这将包括“没有角色的人”。
    AllowAnyone bool `json:"allow_anyone"`
}

2.3 Rule类

// Rule即规则,用于定义Resource和Permission之间的关系
type Rule struct {
    // ID决定了Rule的优先级。
    // ID值越大意味着Rule的优先级越高。
    // 当请求被多个规则同时匹配时,grbac将仅使用具有最高ID值的规则。
    // 如果有多个规则同时具有最大的ID,则将随机使用其中一个规则。(不建议)
    ID int `json:"id"`
    *Resource
    *Permission
}

2.3 Loader

Loader用于加载Rule,支持使用func()(grbac.Rules, error) 自定义加载器并通过grbac.WithLoader加载它。

methoddescription
WithJSON(path, interval)定期从json文件加载规则配置
WithYaml(path, interval)定期从yaml文件加载规则配置
WithRules(Rules)从grbac.Rules加载规则配置
WithAdvancedRules(loader.AdvancedRules)以一种更紧凑的方式定义Rule,并加载
WitheLoader(loader func()(Rules, error), interval)使用自定义函数加载定义的规则

其中的interval定义的是Rules的重载周期。若其小于0,则不加载;若其大于等于0且小于1时,interval默认设置为5秒。