mirror of
https://github.com/mastodon/mastodon-ios
synced 2025-04-11 22:58:02 +02:00
Correct handling of permissions bitmask
This commit is contained in:
parent
58425ecad5
commit
c9da109ea3
@ -64,7 +64,8 @@ class NotificationListViewController: UIHostingController<NotificationListView>
|
||||
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
|
||||
|
@ -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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user