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
5858import org.modelix.model.server.store.IgniteStoreClient
5959import org.modelix.model.server.store.InMemoryStoreClient
6060import org.modelix.model.server.store.IsolatingStore
61+ import org.modelix.model.server.store.ObjectInRepository
6162import org.modelix.model.server.store.RequiresTransaction
6263import org.modelix.model.server.store.forGlobalRepository
6364import org.modelix.model.server.store.loadDump
@@ -181,6 +182,10 @@ object Main {
181182 install(ModelixAuthorization ) {
182183 permissionSchema = ModelServerPermissionSchema .SCHEMA
183184 installStatusPages = false
185+ accessControlPersistence = DBAccessControlPersistence (
186+ storeClient,
187+ ObjectInRepository .global(RepositoriesManager .KEY_PREFIX + " :access-control-data" ),
188+ )
184189 }
185190 install(ForwardedHeaders )
186191 install(CallLogging ) {
You can’t perform that action at this time.
0 commit comments