1
0
mirror of https://github.com/mamoe/mirai.git synced 2025-04-25 13:03:35 +08:00

Fix error message for '/perm cancel' ()

* fix: cancel error info

* fix: use UnsupportedOperationException

* fix: test

* fix: equals
This commit is contained in:
cssxsh 2022-04-19 07:06:38 +08:00 committed by GitHub
parent 285cf785d8
commit a727704061
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 28 additions and 12 deletions
mirai-console/backend/mirai-console

View File

@ -12,6 +12,7 @@ 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.Permission.Companion.parentsWithSelf
import net.mamoe.mirai.console.permission.PermitteeId.Companion.allParentsWithSelf
import net.mamoe.mirai.console.permission.PermitteeId.Companion.hasChild
internal abstract class AbstractConcurrentPermissionService<P : Permission> : PermissionService<P> {
@ -41,27 +42,31 @@ internal abstract class AbstractConcurrentPermissionService<P : Permission> : Pe
} else {
grantedPermissionsMap[permission.id].remove(permitteeId)
}
check(success) {
if (!success) {
val about = buildList {
for ((permissionIdentifier, permissibleIdentifiers) in grantedPermissionsMap) {
val parent = get(permissionIdentifier) ?: continue
if (parent !in permission.parentsWithSelf) continue
for (permissibleId in permissibleIdentifiers) {
if (permitteeId.hasChild(permitteeId)) {
if (permissibleId in permitteeId.allParentsWithSelf) {
add(parent to permissibleId)
}
}
}
}
if (about.isEmpty()) {
"${permitteeId.asString()} 不拥有权限 ${permission.id} "
val message = if (about.isEmpty()) {
"${permitteeId.asString()} 不拥有权限 ${permission.id}"
} else {
"""
${permitteeId.asString()} ${permission.id} 权限来自
${about.joinToString("\n") { (parent, permitted) -> "${permitted.asString()} ${parent.id}" }}
Mirai Console 内置权限系统目前不支持单独禁用继承得到的权限. 可取消继承来源再为其分别分配.
""".trimIndent()
buildString {
appendLine("${permitteeId.asString()}${permission.id} 权限来自")
about.forEach { (parent, permitted) ->
appendLine("${permitted.asString()} ${parent.id}")
}
appendLine("Mirai Console 内置权限系统目前不支持单独禁用继承得到的权限. 可取消继承来源再为其分别分配.")
}
}
throw UnsupportedOperationException(message)
}
}

View File

@ -39,7 +39,15 @@ internal class PermissionServiceTest {
assertTrue { builtIn.testPermission(any, command) }
assertTrue { builtIn.testPermission(member, command) }
assertFails { builtIn.cancel(member, command, false) }
// test cancel fail (by parent)
val cause1 = assertFails { builtIn.cancel(member, command, false) }
assertTrue { cause1 is UnsupportedOperationException }
assertEquals("""
m12345.6789 plugin:command 权限来自
m12345.* plugin:*
Mirai Console 内置权限系统目前不支持单独禁用继承得到的权限. 可取消继承来源再为其分别分配.
""".trimIndent(), cause1.message)
// test recursive cancel
builtIn.cancel(any, builtIn.rootPermission, true)
@ -48,6 +56,11 @@ internal class PermissionServiceTest {
assertFalse { builtIn.testPermission(any, command) }
assertFalse { builtIn.testPermission(member, command) }
// test cancel (no permit)
val cause2 = assertFails { builtIn.cancel(member, command, false) }
assertTrue { cause2 is UnsupportedOperationException }
assertEquals("${member.asString()} 不拥有权限 ${command.id}", cause2.message)
// test not recursive cancel
builtIn.permit(any, plugin)
builtIn.permit(any, command)
@ -56,7 +69,5 @@ internal class PermissionServiceTest {
assertFalse { builtIn.testPermission(member, plugin) }
assertTrue { builtIn.testPermission(any, command) }
assertTrue { builtIn.testPermission(member, command) }
assertFails { builtIn.cancel(member, command, false) }
}
}