隐藏Aem中非管理员用户的个性化选项卡

时间:2019-02-18 11:55:06

标签: aem

正在尝试隐藏“ AEM页面属性”对话框中的某些选项卡。

但是,我可以使用rep:policy隐藏我的自定义标签。 但, 如何在AEM中为非管理员用户的页面的页面属性中隐藏OOTB个性化选项卡?

2 个答案:

答案 0 :(得分:1)

这是Granite Render Conditions的绝佳用例。我在blog中解释了它们的工作方式,并提供了示例和一些资源。

  

在这里无法使用ACL策略,因为即使您覆盖了标签,吊索资源合并仍会在/ libs下找到该标签。

这是您需要执行的步骤:

  1. 覆盖个性化页面属性标签
  2. 关注博客,创建一个新的渲染条件,然后在逻辑中检查当前用户是否在“管理员”组中。

我认为这应该很简单。但是如果您想要一个有效的示例,我可以在今天/明天提供一个示例。

答案 1 :(得分:0)

如果您不希望进行叠加操作(这总是开销),则可以执行以下操作:

  1. 写一个服务器以检查用户是否为管理员

    builtins.__dict__
  2. 在/ apps / your-project /下创建一个clientlib,并将分类添加为“ cq.personalization.wizard”

  3. 添加以下代码

    @Component(name = "com.aem.showcase.core.impl.AdminUserCheck", 
    service = Servlet.class, property = {
    "service.description=Admin user check", 
    "sling.servlet.methods=GET",
    "sling.servlet.paths=/bin/isadminuser" })
    
    public class AdminUserCheck extends SlingSafeMethodsServlet{
    protected void doGet(SlingHttpServletRequest request, 
    SlingHttpServletResponse resp)
        throws ServletException, IOException {
    resp.setContentType("application/json");
    resp.setCharacterEncoding("utf-8");
    
    Session session = request.getResourceResolver().adaptTo(Session.class);
    boolean isAdmin = Boolean.FALSE;
    
    UserManager um;
    try {
        um = AccessControlUtil.getUserManager(session);
        User currentUser = (User) um.getAuthorizable(session.getUserID());
        isAdmin = currentUser.isAdmin();
    
        JSONWriter jsonWriter = new JSONWriter(resp.getWriter());
        jsonWriter.object();
        jsonWriter.key("isadmin").value(isAdmin);
    
    
        jsonWriter.endObject();
    } catch (RepositoryException | JSONException e) {
        e.printStackTrace();
    }
    
     }
    }
    
  4. 最后将ExtraClintLibs属性添加到页面“ cq.personalization.wizard”。您需要在项目结构下添加它,我以我们零售为例:/ apps / weretail / components / structure / page / cq:dialog