我想在cuba基础上做一套更易用的权限管理
现在遇到的问题是,当我勾选查询复选框时,希望可以拥有当前页面的访问权限,这些页面的screenId是运行时从数据库查询来的,我想尝试用这种方式将获取到的screenIds丢进screenPermissions.explicitPermission中,但是结果screen权限并没有生效,请问该如何让其生效呢?
官方配置页面权限的文档如下:
但是我的screenIds是运行时获取的,不是写死的,请问该怎么办呢?
关于这一块的描述能再详细一点吗?
type=“SCREEN”,target=“sales_Customer.browser” ,这样写表示啥意思,表示screenId=sales_Customer.browser的页面怎么了?
有知道的人可以帮助一下吗??
- 菜单的加载是通过 MenuConfig Bean 从 xml 中加载。如果菜单要存储在数据库,可以扩展此类,实现从数据库读取的逻辑。
protected void init() {
rootItems.clear();
String configName = AppContext.getProperty(MENU_CONFIG_XML_PROP);
StringTokenizer tokenizer = new StringTokenizer(configName);
for (String location : tokenizer.getTokenArray()) {
Resource resource = resources.getResource(location);
if (resource.exists()) {
try (InputStream stream = resource.getInputStream()) {
Element rootElement = Dom4j.readDocument(stream).getRootElement();
loadMenuItems(rootElement, null);
} catch (IOException e) {
throw new RuntimeException("Unable to read menu config", e);
}
} else {
log.warn("Resource {} not found, ignore it", location);
}
}
}
- 用户菜单的构建是在 MenuBuilder Bean 中处理的,见其中的
build(AppMenu appMenu, List<MenuItem> rootItems)
方法。这里面主要通过menuItem.isPermitted(session)
来判断当前用户是否有拥有指定菜单的权限,权限信息是在登录时存储在 UserSession 中的。用户权限的初始化是在UserSessionManager
bean 中处理的,见其中的compilePermissions(UserSession session, List<Role> roles)
方法,可以覆盖此方法,来实现自定义的权限加载逻辑。