LiteCommands
LiteCommands copied to clipboard
Support "OR" behavior for permissions.
I expect that one instruction supports multiple different permissions, and the user only needs to have one set of permissions to execute the corresponding instruction.
It seems like
return p.hasPermission("xxx.admin") || p.hasPermission("xxx.command.reload");
And I saw the @Permission is "Repeatable" annotation, but I just tested with 2 seperated @Permission for different permissions, also need to have all of them. It's that a mistake?
You must need all required permissions.
Is there any way to achieve this requirement?
No, but you can implement validator on your own.
I think this feature is quite common, and since this annotation is "Repeatable", it should support "or" judgment.
Otherwise, just write all permissions in a single annotation and it's over.
I think this feature is quite common, and since this annotation is "Repeatable", it should support "or" judgment.
Otherwise, just write all permissions in a single annotation and it's over.
This change in the behavior of the @Permission annotation may affect the security of other projects.
I think it would be to just let the user implement a OrPermission annotation if they require this functionality.
I think it would be to just let the user implement a OrPermission annotation if they require this functionality.
This is what I am thinking about, too. But since @Permission has been marked as "Repeatable", why not directly mark different permission sets with different @Permission to determine whether the user meets one of them.
I fount that it is impossible to support this function if not change the original codes.
So may you make it
- a "selectable" settings like
builder.permissionPredicate(MODE), with "Strict"(Need all claimed permissions) and "Parallel"(Need one of the@Permission("")group claimed) ?
Or
- a functional interface like
builder.hanlePermisisons(((MultiList<String>)perms)-> /**do something **/ ). With implementedSTRICTandPARALLELhandlers to choose/recode.
Whatever the solution you choose, all means you may need to move "@Permission" meta from a single List to a MultiList<String> or List<List<String>>, to make this function possiable.
Anyway, many thanks for you hard-working!
Notice:
Whatevet the mode is, if a player want to execute one subcommand, he should have the command's parents' permissions, e.g.
@Permission("server.admin")
@Permission("cmd.super","cmd.execute")
class SuperCommand{
@Permission("server.admin")
@Permission("cmd.super.sub")
void subCommand(){
}
}
which means if i want to execute /super sub, i need to have "server.admin" or "cmd.super"+"cmd.execute", then i also need to have "cmd.super.sub" or "server.admin".
@huanmeng-qwq and I have finished this feature, but there're some problems need for discuss, please see the pull request.