diff options
author | Dico <dico.karssiens@gmail.com> | 2018-09-28 05:47:32 +0100 |
---|---|---|
committer | Dico <dico.karssiens@gmail.com> | 2018-09-28 05:47:32 +0100 |
commit | bb6ae7d37037180f4cb29a084b1e2ab1a86c747a (patch) | |
tree | acabff0f5710c60a54ece8a7d0a38f34ee074e6d /src/main/kotlin/io/dico/parcels2/Privilege.kt | |
parent | 09aaa9ff725787be4f56986d58e61ee41e3140cb (diff) |
Add /p global list, tweaks/fixes
Diffstat (limited to 'src/main/kotlin/io/dico/parcels2/Privilege.kt')
-rw-r--r-- | src/main/kotlin/io/dico/parcels2/Privilege.kt | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/src/main/kotlin/io/dico/parcels2/Privilege.kt b/src/main/kotlin/io/dico/parcels2/Privilege.kt index 7949dbc..135d7c1 100644 --- a/src/main/kotlin/io/dico/parcels2/Privilege.kt +++ b/src/main/kotlin/io/dico/parcels2/Privilege.kt @@ -25,7 +25,7 @@ enum class Privilege( OWNER(-1, transient = true), ADMIN(-1, transient = true); - fun isDistanceGrEq(other: Privilege): Boolean = + fun implies(other: Privilege): Boolean = when { other > DEFAULT -> this >= other other == DEFAULT -> this == other @@ -61,6 +61,7 @@ interface RawPrivileges { fun getRawStoredPrivilege(key: PrivilegeKey): Privilege fun setRawStoredPrivilege(key: PrivilegeKey, privilege: Privilege): Boolean + fun hasAnyDeclaredPrivileges(): Boolean } open class PrivilegesHolder(override var privilegeMap: MutablePrivilegeMap = EmptyPrivilegeMap) : RawPrivileges { @@ -95,9 +96,30 @@ open class PrivilegesHolder(override var privilegeMap: MutablePrivilegeMap = Emp else privilegeMap.put(key, privilege) != privilege } + override fun hasAnyDeclaredPrivileges(): Boolean { + return privilegeMap.isNotEmpty() || privilegeOfStar != DEFAULT + } + fun copyPrivilegesFrom(other: PrivilegesHolder) { privilegeMap = other.privilegeMap privilegeOfStar = other.privilegeOfStar } + +} + +private fun <K, V> MutableMap<K, V>.put(key: K, value: V, override: Boolean) { + if (override) this[key] = value + else putIfAbsent(key, value) } +fun RawPrivileges.filterProfilesWithPrivilegeTo(map: MutableMap<PrivilegeKey, Privilege>, privilege: Privilege) { + if (privilegeOfStar.implies(privilege)) { + map.putIfAbsent(PlayerProfile.Star, privilegeOfStar) + } + + for ((profile, declaredPrivilege) in privilegeMap) { + if (declaredPrivilege.implies(privilege)) { + map.putIfAbsent(profile, declaredPrivilege) + } + } +} |