diff --git a/Mastodon/In Progress New Layout and Datamodel/NotificationListViewController.swift b/Mastodon/In Progress New Layout and Datamodel/NotificationListViewController.swift index 68184fee5..d7890f8d2 100644 --- a/Mastodon/In Progress New Layout and Datamodel/NotificationListViewController.swift +++ b/Mastodon/In Progress New Layout and Datamodel/NotificationListViewController.swift @@ -64,7 +64,8 @@ class NotificationListViewController: UIHostingController Task { let adminSettings: AdminNotificationFilterSettings? = await { guard let user = AuthenticationServiceProvider.shared.currentActiveUser.value, let role = user.cachedAccount?.role else { print("no role"); return nil } - let hasAdminPermissions = role.hasPermissions(.administrator) || role.hasPermissions(.manageReports) || role.hasPermissions(.manageUsers) + let permissions = role.rolePermissions() + let hasAdminPermissions = permissions.contains(.administrator) || permissions.contains(.manageReports) || permissions.contains(.manageUsers) guard hasAdminPermissions else { print("no permissions"); return nil } if let existingPreferences = await BodegaPersistence.Notifications.currentPreferences(for: user.authentication) { return existingPreferences diff --git a/MastodonSDK/Sources/MastodonSDK/Entity/Mastodon+Entity+Account.swift b/MastodonSDK/Sources/MastodonSDK/Entity/Mastodon+Entity+Account.swift index 9e31ff5ba..d9958b5d7 100644 --- a/MastodonSDK/Sources/MastodonSDK/Entity/Mastodon+Entity+Account.swift +++ b/MastodonSDK/Sources/MastodonSDK/Entity/Mastodon+Entity+Account.swift @@ -178,12 +178,9 @@ extension Mastodon.Entity.Account { public let permissions: String // To determine the permissions available to a certain role, convert the permissions attribute to binary and compare from the least significant bit upwards. public let highlighted: Bool - public func hasPermissions(_ desiredPermissions: Permissions) -> Bool { - let binaryData = Data(permissions.utf8) - let rawPermissions = binaryData.withUnsafeBytes { rawBuffer in - rawBuffer.load(as: UInt32.self) - } - return Permissions(rawValue: rawPermissions).contains(desiredPermissions) + public func rolePermissions() -> Permissions { + guard let rawValue = UInt32(permissions) else { return [] } + return Permissions(rawValue: rawValue) } public struct Permissions: OptionSet { @@ -197,18 +194,22 @@ extension Mastodon.Entity.Account { public static let devops = Permissions(rawValue: 1 << 1) public static let viewAuditLog = Permissions(rawValue: 1 << 2) public static let viewDashboard = Permissions(rawValue: 1 << 3) + public static let manageReports = Permissions(rawValue: 1 << 4) public static let manageFederation = Permissions(rawValue: 1 << 5) public static let manageSettings = Permissions(rawValue: 1 << 6) public static let manageBlocks = Permissions(rawValue: 1 << 7) + public static let manageTaxonomies = Permissions(rawValue: 1 << 8) public static let manageAppeals = Permissions(rawValue: 1 << 9) public static let manageUsers = Permissions(rawValue: 1 << 10) public static let manageInvites = Permissions(rawValue: 1 << 11) + public static let manageRules = Permissions(rawValue: 1 << 12) public static let manageAnnouncements = Permissions(rawValue: 1 << 13) public static let manageCustomEmojis = Permissions(rawValue: 1 << 14) public static let manageWebhooks = Permissions(rawValue: 1 << 15) + public static let inviteUsers = Permissions(rawValue: 1 << 16) public static let manageRoles = Permissions(rawValue: 1 << 17) public static let manageUserAccess = Permissions(rawValue: 1 << 18)