mirror of
https://github.com/mamoe/mirai.git
synced 2025-04-25 13:03:35 +08:00
Fix error message for '/perm cancel' (#1918)
* fix: cancel error info * fix: use UnsupportedOperationException * fix: test * fix: equals
This commit is contained in:
parent
285cf785d8
commit
a727704061
mirai-console/backend/mirai-console
src/internal/permission
test/permission
@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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) }
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user