@@ -63,26 +63,26 @@ public struct ChatConfig {
6363 public var retentionPolicy : ChatRetentionPolicy
6464 public var usersCollection : String
6565 public var userId : String ?
66+ public var userEmail : String ?
6667 public var acceptLargeImages : Bool
6768 public var primaryColor : String ?
68- public var hasAdminPrivileges : Bool
6969
7070 public init (
7171 ditto: Ditto ,
7272 retentionPolicy: ChatRetentionPolicy = . init( days: 30 ) ,
7373 usersCollection: String = " users " ,
7474 userId: String ? = nil ,
75+ userEmail: String ? = nil ,
7576 acceptLargeImages: Bool = true ,
76- primaryColor: String ? = nil ,
77- hasAdminPrivileges: Bool = false
77+ primaryColor: String ? = nil
7878 ) {
7979 self . ditto = ditto
8080 self . retentionPolicy = retentionPolicy
8181 self . usersCollection = usersCollection
8282 self . userId = userId
83+ self . userEmail = userEmail
8384 self . acceptLargeImages = acceptLargeImages
8485 self . primaryColor = primaryColor
85- self . hasAdminPrivileges = hasAdminPrivileges
8686 }
8787}
8888
@@ -101,7 +101,7 @@ public class DittoChat: DittoSwiftChat, ObservableObject {
101101 public var retentionPolicy : ChatRetentionPolicy = . init( days: 30 )
102102 public var acceptLargeImages : Bool
103103 public var primaryColor : String ?
104- public var hasAdminPrivileges : Bool
104+ public var hasAdminPrivileges : Bool = false
105105
106106 private var localStore : LocalDataInterface
107107 internal var p2pStore : DittoDataInterface
@@ -110,14 +110,24 @@ public class DittoChat: DittoSwiftChat, ObservableObject {
110110 let localStore : LocalService = LocalService ( )
111111 self . acceptLargeImages = config. acceptLargeImages
112112 self . primaryColor = config. primaryColor
113- self . hasAdminPrivileges = config. hasAdminPrivileges
114113 self . localStore = localStore
115114 self . p2pStore = DittoService ( privateStore: localStore, ditto: config. ditto, usersCollection: config. usersCollection, chatRetentionPolicy: config. retentionPolicy)
116115 self . publicRoomsPublisher = p2pStore. publicRoomsPublisher. eraseToAnyPublisher ( )
117116 self . retentionPolicy = config. retentionPolicy
118117 if let userId = config. userId {
119118 self . setCurrentUser ( withConfig: UserConfig ( id: userId) )
120119 }
120+ if let email = config. userEmail {
121+ Task {
122+ do {
123+ self . hasAdminPrivileges = try await getAdminAccess (
124+ email: email
125+ )
126+ } catch {
127+ // TODO: Handle errors
128+ }
129+ }
130+ }
121131 }
122132
123133 // MARK: Carry over from previous public things
@@ -134,6 +144,13 @@ public class DittoChat: DittoSwiftChat, ObservableObject {
134144 return room
135145 }
136146
147+ func getAdminAccess( email: String ) async throws -> Bool {
148+ return try await p2pStore. ditto. store. execute (
149+ query: " SELECT * FROM `roles` WHERE email = :email " ,
150+ arguments: [ " email " : email]
151+ ) . items. count > 0
152+ }
153+
137154 public func allUsersPublisher( ) -> AnyPublisher < [ ChatUser ] , Never > {
138155 p2pStore. allUsersPublisher ( )
139156 }
0 commit comments