Ladon 是一个用Go编写的用于访问控制策略的库,类似于基于角色的访问控制访问控制列表。与ACLRBAC相比, 您可以获得细粒度的访问控制,能够回答复杂环境中的问题,例如多租户或分布式应用程序和大型组织。Ladon 的灵感来自AWS IAM 策略
    Ladon 正式发布了一个示例性的内存存储实现。CockroachDB提供了社区支持的适配器。
    Ladon 现在被认为是稳定的。

    https://github.com/ory/ladon

    1. package main
    2. import "github.com/ory/ladon"
    3. // StringEqualCondition is an exemplary condition.
    4. type StringEqualCondition struct {
    5. Equals string `json:"equals"`
    6. }
    7. // Fulfills returns true if the given value is a string and is the
    8. // same as in StringEqualCondition.Equals
    9. func (c *StringEqualCondition) Fulfills(value interface{}, _ *ladon.Request) bool {
    10. s, ok := value.(string)
    11. return ok && s == c.Equals
    12. }
    13. // GetName returns the condition's name.
    14. func (c *StringEqualCondition) GetName() string {
    15. return "StringEqualCondition"
    16. }
    17. var pol = &ladon.DefaultPolicy{
    18. // ...
    19. Conditions: ladon.Conditions{
    20. "some-arbitrary-key": &StringEqualCondition{
    21. Equals: "the-value-should-be-this",
    22. },
    23. },
    24. }
    25. func main() {
    26. }
    1. package main
    2. import "github.com/ory/ladon"
    3. var pol = &ladon.DefaultPolicy{
    4. // 唯一标识。主要用于数据库检索(必选)。
    5. ID: "68819e5a-738b-41ec-b03c-b58a1b19d043",
    6. // 策略描述(可选)。
    7. Description: "something humanly readable",
    8. // 主题可以是用户或服务,是“谁能够/不能够对哪些资源做哪些操作”的谁。
    9. // 可以在< >使用正则表达式。
    10. Subjects: []string{"max", "peter", "<zac|ken>"},
    11. // 策略所影响的资源,可以在< >使用正则表达式。
    12. Resources: []string{
    13. "myrn:some.domain.com:resource:123", "myrn:some.domain.com:resource:345",
    14. "myrn:something:foo:<.+>", "myrn:some.domain.com:resource:<(?!protected).*>",
    15. "myrn:some.domain.com:resource:<[[:digit:]]+>",
    16. },
    17. // 策略所影响的操作,可以在< >使用正则表达式。
    18. Actions: []string{"<create|delete>", "get"},
    19. // 策略产生的结果是“允许”还是“拒绝”,包括 allow(允许)和 deny(拒绝)。
    20. // 注意:如果多个策略匹配访问请求,则ladon.DenyAccess将始终覆盖ladon.AllowAccess,并因此拒绝访问。
    21. Effect: ladon.AllowAccess,
    22. // 描述策略生效的约束条件。
    23. Conditions: ladon.Conditions{
    24. // 在此示例中,仅当所请求的主题也是资源所有者时,该策略才是“活动的”。
    25. "resourceOwner": &ladon.EqualsSubjectCondition{},
    26. // 此外,仅当请求的远程IP地址匹配地址范围127.0.0.1/32时,该策略才会匹配。
    27. "remoteIPAddress": &ladon.CIDRCondition{
    28. CIDR: "127.0.0.1/32",
    29. },
    30. },
    31. }
    32. func main() {}