Adobe CQ5-根据用户组在组件对话框中隐藏选项卡?
你知道如何根据用户所属的用户组隐藏或显示对话框选项卡面板吗 我试图通过CRX内容探索者(ACL)实现这一点。但我的运气不太好Adobe CQ5-根据用户组在组件对话框中隐藏选项卡?,adobe,crx,aem,Adobe,Crx,Aem,你知道如何根据用户所属的用户组隐藏或显示对话框选项卡面板吗 我试图通过CRX内容探索者(ACL)实现这一点。但我的运气不太好 Cheers这可以通过自定义servlet和对话事件侦听器来实现 侦听器函数向servlet发出请求,传递当前用户ID和所需的组。然后可以根据servlet响应隐藏对话框选项卡 以下是CQ5组件的dialog.xml示例: ... ... 下面是相应的servlet: import java.io.IOException; 导入org.apache.felix.scr
Cheers这可以通过自定义servlet和对话事件侦听器来实现 侦听器函数向servlet发出请求,传递当前用户ID和所需的组。然后可以根据servlet响应隐藏对话框选项卡 以下是CQ5组件的dialog.xml示例:
...
...
下面是相应的servlet:
import java.io.IOException;
导入org.apache.felix.scr.annotations.Component;
导入org.apache.felix.scr.annotations.Properties;
导入org.apache.felix.scr.annotations.Property;
导入org.apache.felix.scr.annotations.Service;
导入org.apache.sling.api.SlingHttpServletRequest;
导入org.apache.sling.api.SlingHttpServletResponse;
导入org.apache.sling.api.servlets.SlingAllMethodsServlet;
导入org.codehaus.jackson.json工厂;
导入org.codehaus.jackson.jsongGenerationException;
导入org.codehaus.jackson.jsonggenerator;
导入org.codehaus.jackson.JsonGenerator.Feature;
导入org.codehaus.jackson.map.JsonMappingException;
导入org.codehaus.jackson.map.ObjectMapper;
导入org.slf4j.Logger;
导入org.slf4j.LoggerFactory;
导入com.day.cq.security.Group;
导入com.day.cq.security.User;
导入com.day.cq.security.UserManager;
导入com.google.common.collect.ImmutableMap;
@组件(立即=真)
@服务
@性质({
@属性(name=“service.description”,value=“组成员servlet检查用户是否为组成员。”),
@属性(name=“sling.servlet.path”,value=“/bin/member”)
})
公共类GroupMemberServlet扩展SlingAllMethodsServlet{
/**必需的*/
私有静态最终长serialVersionUID=1L;
/**记录器*/
私有静态最终记录器LOG=LoggerFactory.getLogger(GroupMemberServlet.class);
私有静态最终JsonFactory=新JsonFactory().disable(Feature.AUTO\u CLOSE\u目标);
私有静态最终ObjectMapper MAPPER=新ObjectMapper();
@凌驾
受保护的无效数据集(最终SlingHttpServletRequest请求,最终SlingHttpServletResponse响应){
final UserManager UserManager=request.getResourceResolver().adapto(UserManager.class);
最终字符串userId=request.getRequestParameter(“userId”).getString();
最终字符串groupId=request.getRequestParameter(“groupId”).getString();
最终的组=(组)userManager.get(groupId);
最终用户=(用户)userManager.get(用户ID);
writeJsonResponse(response,ImmutableMap.of(“isMember”,group.isMember(user));
}
私有void writeJsonResponse(最终SlingHttpServletResponse响应,最终对象){
setContentType(“应用程序/json”);
响应。setCharacterEncoding(“utf-8”);
试一试{
final JsonGenerator generator=FACTORY.createJsonGenerator(response.getWriter());
MAPPER.writeValue(生成器、对象);
}捕获(最终JsonGenerationException jge){
LOG.error(“生成JSON响应的错误”,jge);
}捕获(最终JsonMappingException jme){
error(“错误映射JSON响应”,jme);
}捕获(最终ioe异常ioe){
error(“写入JSON响应时出错”,ioe);
}
}
}
我突然想到一个问题……为什么要限制对创作对话框的控制并删除选项卡
ACL没有理由不适用于此。您是否将它们设置为对选项卡有足够的限制?您是否正在使用非管理员用户进行测试?我会谨慎地使用代码如此繁重的东西来解决访问问题
就我个人而言,如果ACL不能像预期的那样工作,我会探索基于tabpanel xtype创建一个新的小部件,而不是一个代码解决方案,它可能最终特定于一个CQ5版本
我的答案是:使用ACL
请看一看这些模糊相关的官方文件——相同的原则,但不同的目标:
及
正如anthonyh所指出的,ACL方法是一条可行之路(如果确实需要这样的行为)
例如,要隐藏基本页组件的“图像”选项卡,请执行以下操作:
- 编辑
/libs/foundation/components/page/dialog/items/tabs/items/image的ACL
- 添加
fordeny jcr:read
author
- 以作者身份登录
- 转到并打开页面属性
- “图像”选项卡应该消失
xtype=cqinclude
中,则必须在包含本身而不是包含的定义上进行设置。因为在运行时,它会抱怨include缺少目标,而根本不会呈现对话框