我正在我的应用程序上实现安全系统,但在检查用户x
是否具有权限y
时遇到了一些问题。
好吧,让我们将其上下文化: 例如:我的应用具有以下权限:
cmd.a
cmd.b
api.a
api.b
管理员具有以下可用权限:*.a
(*
代表所有内容,因此分别为cmd.a
和api.a
),普通用户拥有*.b
( cmd.b
和api.b
)。
因此,我必须比较用户是否有cmd.a
。
那么,如何比较*.a
和cmd.a
?
然后将*.a
与cmd.*
(cmd.a
,cmd.b
)进行比较(必须为假,因为*.a
仅包含cmd.a
和{{1 }})?
老实说,我不知道从哪里开始,因为我不知道运行时的现有权限(api.a
,cmd.a
,cmd.b
,api.a
),我只需拥有用户所拥有的权限(例如api.b
和一个比较权限(*.a
就会出现)(例如*
或cmd.*
等)。
我真的不知道我是否正确解释了我想要的东西。如何比较这些正则表达式?
答案 0 :(得分:0)
这些不是正则表达式。像cmd\\..*
这样的东西将是一个正则表达式(将匹配cmd.a而不匹配api.a)。
首先编写此方法:
public static boolean matches(String permission, String config) {
// you write it!
}
其作用如下:
public static void test() {
assertTrue(matches("cmd.a", "cmd.*"));
assertFalse(matches("cmd.a", "api.*"));
assertTrue(matches("cmd.b", "*.b"));
assertFalse(matches("cmd.b", "*.a"));
}
一旦有了,其余的应该很简单。我认为您不应该使用正则表达式来实现匹配,但是如果您确实想要的话,则可以。不过,请确保使用Pattern.quote功能!