ladon-《GO开发知识笔记》

admin 2025-11-04 01:29:36 编程 来源:ZONE.CI 全球网 0 阅读模式

    Ladon 是一个用Go编写的用于访问控制策略的库,类似于基于角色的访问控制 或访问控制列表。与ACL和RBAC相比, 您可以获得细粒度的访问控制,能够回答复杂环境中的问题,例如多租户或分布式应用程序和大型组织。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() {}
    以太坊cppgolang区别 编程

    以太坊cppgolang区别

    以太坊是一种去中心化的开源平台,它采用智能合约技术,旨在构建和运行不受干扰的分布式应用程序。作为目前最受欢迎的区块链平台之一,以太坊提供了多种编程语言的支持,其
    progolang 编程

    progolang

    Go语言(Golang)是由Google开发的一门静态类型编程语言。作为一名专业的Golang开发者,我深知这门语言的优势和特点。在本文中,我将介绍Golang
    golangn个发送者 编程

    golangn个发送者

    Golang是一种开源的编程语言,由Google团队开发,旨在提高程序的并发性和简化软件开发过程。在Go语言中,有时需要向多个接收者发送信息。本文将介绍如何在G
    golang技能图谱 编程

    golang技能图谱

    从互联网行业的快速发展到人工智能技术的日益成熟,各种编程语言也应运而生。而在这众多的编程语言中,Golang(即Go)作为一门强大且高效的开发语言备受关注。Go
    评论:0   参与:  5