此软件包是 Authorization Services 框架中未弃用部分的完整 Swift 实现,主要包括:
如果您希望使用 SMJobBless
,请查看 Blessed。 您可能只需使用 Blessed 而不是此软件包,或者直接同时使用两者以获得更高级的用例。
macOS 的授权系统围绕权限的概念构建。 策略数据库包含系统中所有权限的定义,您的应用程序可以添加自己的权限。
如果应用程序定义了自己的权限,则可以使用这些权限来自我限制功能。 有关为什么您可能想要这样做,请考虑阅读 Apple 的 Technical Note TN2095: Authorization for Everyone,但请记住,如果您使用的是此 Swift 实现,则显示的示例代码不适用。
要定义自定义权限
let myCustomRight = AuthorizationRight(name: "com.example.MyApp.special-action")
let description = "MyApp would like to perform a special action."
let rules: Set<AuthorizationRightRule> = [CannedAuthorizationRightRules.authenticateAsAdmin]
try myCustomRight.createOrUpdateDefinition(rules: rules, descriptionKey: description)
上面的示例创建了一个名为“com.example.MyApp.special-action”的权限,该权限要求用户以管理员身份进行身份验证。 用户具体如何操作取决于 macOS; 您的应用程序不关心这一点。(在编写本文档时,这意味着用户需要输入密码,但在未来,Apple 可以例如更新其 authenticateAsAdmin
规则的实现以使用 Touch ID。)当要求用户进行身份验证时,他们将看到消息“MyApp would like to perform a special action.”
此示例中未使用几个可选参数,有关详细信息,请参阅文档。
如果您需要创建的规则并非完全由现有规则组成,则必须创建授权插件,此框架未涵盖该插件。 有关更多信息,请参阅 Using Authorization Plug-ins。
在某些更高级的情况下,您可能希望通过 Authorization
类直接与 macOS 的安全服务器进行交互。
如果您只需要检查用户是否可以执行操作,请使用 Authorization.checkRights(_:environment:options:)
,它不涉及创建 Authorization
实例。
否则,您通常需要通过 Authorization.init()
初始化一个实例,然后使用 Authorization.requestRights(_:environment:options:)
随后请求权限。
Authorization
符合 Codable
协议,因此可以序列化和反序列化,以便在进程之间方便地传输。
最终,Authorization
是 AuthorizationRef
的包装器,因此如果需要,可以通过 Authorization.authorizationRef
访问此底层引用。 但是,请注意此引用的生命周期与其包含的 Authorization
实例绑定。
由于权限提升,此框架的大部分不适用于沙盒进程。 此规则的例外是在策略数据库中读取或存在性检查权限定义。