AuthScope

GitHub release Tests Codacy Badge codecov Docs

轻松处理身份验证范围。

安装

Swift Package Manager

将以下软件包依赖项添加到您的 Package.swift

.package(url: "https://github.com/sersoft-gmbh/auth-scope", from: "4.0.0"),

用法

您要使用的主要对象是 Scope<AccessRange>。它是通用的,并封装了围绕给定 AccessRange 类型的所有逻辑。由于 Scope 无法知道您有哪些访问范围,因此您需要自行提供它们。通常,这是通过使用 enum 并使其符合 AccessRangeProtocol 来完成的

enum MyAccessRange: String, AccessRangeProtocol, CaseIterable {
    case readPosts = "posts:read"
    case writePosts = "posts:write"

    case readUsers = "users:read"
    case writeUsers = "users:write"
}

然后,您可以将您的 enumScope 一起使用

let postsScope = Scope<MyAccessRange>(accessRanges: .readPosts, .writePosts)

postsScope.contains(.writePosts) // -> true
postsScope.contains(.readUsers) // -> false

Scope 符合 SetAlgebra,以简化访问范围的检查

let completeScope = Scope<MyAccessRange>.all // `.all` is available when `AccessRange` conforms to `CaseIterable`
completeScope.isSuperset(of: postsScope) // -> true

Scope 也能够生成“scope string”(范围字符串),因为这通常是它们提供给 API 的方式。“scope string”包含所有访问范围(确切地说是它们的 rawValue),并以空格分隔。重要的是要注意,Scope 不会按给定顺序保留访问范围。这意味着,不能保证两次调用 scopeString 会包含相同顺序的访问范围。但是,可以保证结果范围包含所有访问范围。Scope 当然也可以从范围字符串创建。如果任何包含的访问范围无效,此初始化器将抛出错误。

let usersScope: Scope<MyAccessRange> = [.readUsers, .writeUsers]
let string = usersScope.scopeString // -> "users:read users:write" OR "users:write users:read"
let recreatedScope = try Scope<MyAccessRange>(scopeString: string)
usersScope == recreatedScope // true

Scope 也是 Codable,并将自身编码/解码为其范围字符串。

最后但并非最不重要的一点是,Scope 还提供了一些有用的正则表达式模式,可用于在字符串基础上执行匹配。如果您的范围以 Swift 类型提供,则不建议这样做,但如果您必须在数据库等中匹配范围,则可能很有用。目前提供了三种正则表达式模式

对于所有这些模式,Regex 也可用。

文档

API 使用 header doc 进行文档化。如果您希望以网页形式查看文档,则有在线版本供您使用。

贡献

如果您发现错误/希望在 AuthScope 中看到新功能,有几种方法可以提供帮助

许可证

请参阅 LICENSE 文件。