File tree Expand file tree Collapse file tree 2 files changed +33
-0
lines changed
model-server/src/main/kotlin/org/modelix/model/server Expand file tree Collapse file tree 2 files changed +33
-0
lines changed Original file line number Diff line number Diff line change
1
+ package org.modelix.model.server
2
+
3
+ import kotlinx.serialization.encodeToString
4
+ import kotlinx.serialization.json.Json
5
+ import org.modelix.authorization.permissions.AccessControlData
6
+ import org.modelix.authorization.permissions.IAccessControlPersistence
7
+ import org.modelix.model.server.store.IGenericStoreClient
8
+ import org.modelix.model.server.store.RequiresTransaction
9
+
10
+ class DBAccessControlPersistence <E >(val store : IGenericStoreClient <E >, val key : E ) : IAccessControlPersistence {
11
+ private val json = Json { ignoreUnknownKeys }
12
+ override fun read (): AccessControlData {
13
+ @OptIn(RequiresTransaction ::class )
14
+ return store.runReadTransaction {
15
+ store.get(key)?.let { json.decodeFromString(it) } ? : AccessControlData ()
16
+ }
17
+ }
18
+
19
+ override fun update (updater : (AccessControlData ) -> AccessControlData ) {
20
+ @OptIn(RequiresTransaction ::class )
21
+ return store.runWriteTransaction {
22
+ val oldData = read()
23
+ val newData = updater(oldData)
24
+ if (oldData == newData) return @runWriteTransaction
25
+ store.put(key, json.encodeToString(newData))
26
+ }
27
+ }
28
+ }
Original file line number Diff line number Diff line change @@ -58,6 +58,7 @@ import org.modelix.model.server.handlers.ui.RepositoryOverview
58
58
import org.modelix.model.server.store.IgniteStoreClient
59
59
import org.modelix.model.server.store.InMemoryStoreClient
60
60
import org.modelix.model.server.store.IsolatingStore
61
+ import org.modelix.model.server.store.ObjectInRepository
61
62
import org.modelix.model.server.store.RequiresTransaction
62
63
import org.modelix.model.server.store.forGlobalRepository
63
64
import org.modelix.model.server.store.loadDump
@@ -181,6 +182,10 @@ object Main {
181
182
install(ModelixAuthorization ) {
182
183
permissionSchema = ModelServerPermissionSchema .SCHEMA
183
184
installStatusPages = false
185
+ accessControlPersistence = DBAccessControlPersistence (
186
+ storeClient,
187
+ ObjectInRepository .global(RepositoriesManager .KEY_PREFIX + " :access-control-data" ),
188
+ )
184
189
}
185
190
install(ForwardedHeaders )
186
191
install(CallLogging ) {
You can’t perform that action at this time.
0 commit comments