Skip to content

Instantly share code, notes, and snippets.

@dilames
Last active January 9, 2020 02:04
Show Gist options
  • Save dilames/c872a14b5786136aa3d0bbbcc8d947f5 to your computer and use it in GitHub Desktop.
Save dilames/c872a14b5786136aa3d0bbbcc8d947f5 to your computer and use it in GitHub Desktop.
Oversimplified
import ServiceManagement
import SecurityFoundation
extension SFAuthorization {
enum Error: LocalizedError {
case allocationError
}
class func withAdminPrivileges(prompt: String? = nil) throws -> SFAuthorization {
guard let authorization = SFAuthorization.authorization() as? SFAuthorization else {
throw Error.allocationError
}
var environment = AuthorizationEnvironment()
if let prompt = prompt {
let itemNamePtr = (kAuthorizationEnvironmentPrompt as NSString).utf8String!
let promptPtr = (prompt as NSString).utf8String
var envItem = AuthorizationItem(name: itemNamePtr,
valueLength: prompt.lengthOfBytes(using: .utf8),
value: UnsafeMutablePointer(mutating: promptPtr),
flags: 0)
environment = AuthorizationEnvironment(count: 1, items: &envItem)
}
var right = AuthorizationItem(name: kAuthorizationRightExecute,
valueLength: 0,
value: nil,
flags: 0)
var rights = AuthorizationRights(count: 1, items: &right)
try authorization.obtain(withRights: &rights,
flags: [.extendRights, .interactionAllowed],
environment: &environment,
authorizedRights: nil)
return authorization
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment