All Downloads are FREE. Search and download functionalities are using the official Maven repository.

internal.permission.AbstractConcurrentPermissionService.kt Maven / Gradle / Ivy

There is a newer version: 2.16.0
Show newest version
/*
 * Copyright 2019-2020 Mamoe Technologies and contributors.
 *
 * 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证.
 * Use of this source code is governed by the GNU AFFERO GENERAL PUBLIC LICENSE version 3 license that can be found through the following link.
 *
 * https://github.com/mamoe/mirai/blob/master/LICENSE
 */

package net.mamoe.mirai.console.internal.permission

import net.mamoe.mirai.console.data.PluginDataExtensions
import net.mamoe.mirai.console.permission.*
import net.mamoe.mirai.console.permission.PermitteeId.Companion.hasChild

internal abstract class AbstractConcurrentPermissionService

: PermissionService

{ protected abstract val permissions: MutableMap protected abstract val grantedPermissionsMap: PluginDataExtensions.NotNullMutableMap> protected abstract fun createPermission( id: PermissionId, description: String, parent: Permission ): P override fun get(id: PermissionId): P? = permissions[id] override fun register(id: PermissionId, description: String, parent: Permission): P { val instance = createPermission(id, description, parent) val old = permissions.putIfAbsent(id, instance) if (old != null) throw PermissionRegistryConflictException(instance, old) return instance } override fun permit(permitteeId: PermitteeId, permission: P) { val id = permission.id grantedPermissionsMap[id].add(permitteeId) } override fun cancel(permitteeId: PermitteeId, permission: P, recursive: Boolean) { if (recursive) { grantedPermissionsMap[permission.id] } else grantedPermissionsMap[permission.id].remove(permitteeId) } override fun getRegisteredPermissions(): Sequence

= permissions.values.asSequence() override fun getPermittedPermissions(permitteeId: PermitteeId): Sequence

= sequence

{ for ((permissionIdentifier, permissibleIdentifiers) in grantedPermissionsMap) { val granted = if (permissibleIdentifiers.isEmpty()) false else permissibleIdentifiers.any { permitteeId.hasChild(it) } if (granted) get(permissionIdentifier)?.let { yield(it) } } } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy