Ladon 是一个用Go编写的用于访问控制策略的库,类似于基于角色的访问控制 或访问控制列表。与ACL和RBAC相比, 您可以获得细粒度的访问控制,能够回答复杂环境中的问题,例如多租户或分布式应用程序和大型组织。Ladon 的灵感来自AWS IAM 策略。
Ladon 正式发布了一个示例性的内存存储实现。CockroachDB提供了社区支持的适配器。
Ladon 现在被认为是稳定的。
package mainimport "github.com/ory/ladon"// StringEqualCondition is an exemplary condition.type StringEqualCondition struct {Equals string `json:"equals"`}// Fulfills returns true if the given value is a string and is the// same as in StringEqualCondition.Equalsfunc (c *StringEqualCondition) Fulfills(value interface{}, _ *ladon.Request) bool {s, ok := value.(string)return ok && s == c.Equals}// GetName returns the condition's name.func (c *StringEqualCondition) GetName() string {return "StringEqualCondition"}var pol = &ladon.DefaultPolicy{// ...Conditions: ladon.Conditions{"some-arbitrary-key": &StringEqualCondition{Equals: "the-value-should-be-this",},},}func main() {}
package mainimport "github.com/ory/ladon"var pol = &ladon.DefaultPolicy{// 唯一标识。主要用于数据库检索(必选)。ID: "68819e5a-738b-41ec-b03c-b58a1b19d043",// 策略描述(可选)。Description: "something humanly readable",// 主题可以是用户或服务,是“谁能够/不能够对哪些资源做哪些操作”的谁。// 可以在< >使用正则表达式。Subjects: []string{"max", "peter", "<zac|ken>"},// 策略所影响的资源,可以在< >使用正则表达式。Resources: []string{"myrn:some.domain.com:resource:123", "myrn:some.domain.com:resource:345","myrn:something:foo:<.+>", "myrn:some.domain.com:resource:<(?!protected).*>","myrn:some.domain.com:resource:<[[:digit:]]+>",},// 策略所影响的操作,可以在< >使用正则表达式。Actions: []string{"<create|delete>", "get"},// 策略产生的结果是“允许”还是“拒绝”,包括 allow(允许)和 deny(拒绝)。// 注意:如果多个策略匹配访问请求,则ladon.DenyAccess将始终覆盖ladon.AllowAccess,并因此拒绝访问。Effect: ladon.AllowAccess,// 描述策略生效的约束条件。Conditions: ladon.Conditions{// 在此示例中,仅当所请求的主题也是资源所有者时,该策略才是“活动的”。"resourceOwner": &ladon.EqualsSubjectCondition{},// 此外,仅当请求的远程IP地址匹配地址范围127.0.0.1/32时,该策略才会匹配。"remoteIPAddress": &ladon.CIDRCondition{CIDR: "127.0.0.1/32",},},}func main() {}
