class AuthPermissionsTag extends Directive {
    @Override
    public String getName() {
        return AuthConstants.TAG_authPermissions;
    }

    @Override
    public int getType() {
        return BLOCK;
    }

    @Override
    public boolean render(InternalContextAdapter context, Writer writer, Node node) throws IOException, ResourceNotFoundException, ParseErrorException, MethodInvocationException {<FILL_FUNCTION_BODY>}
}

        int attrNum = node.jjtGetNumChildren();

        if (attrNum == 0) {
            return true;
        }

        ASTBlock innerBlock = null;
        List<String> attrList = new ArrayList<>();
        for (int i = 0; i < attrNum; i++) {
            Node n1 = node.jjtGetChild(i);
            if (n1 instanceof ASTStringLiteral) {
                attrList.add((String) n1.value(context));
                continue;
            }

            if (n1 instanceof ASTBlock) {
                innerBlock = (ASTBlock) n1;
            }
        }

        if (innerBlock == null || attrList.size() == 0) {
            return true;
        }


        String nameStr = attrList.get(0);
        String logicalStr = null;
        if (attrList.size() > 1) {
            logicalStr = attrList.get(1);
        }

        if (Utils.isNotEmpty(nameStr)) {

            String[] names = nameStr.split(",");
            if (names.length > 0) {
                if (AuthUtil.verifyPermissions(names, Logical.of(logicalStr))) {
                    StringWriter content = new StringWriter();
                    innerBlock.render(context, content);
                    writer.write(content.toString());
                }
            }
        }

        return true;
    
<methods>public void <init>() ,public void checkArgs(ArrayList<java.lang.Integer>, org.apache.velocity.runtime.parser.Token, java.lang.String) throws org.apache.velocity.runtime.parser.ParseException,public int getColumn() ,public int getLine() ,public abstract java.lang.String getName() ,public java.lang.String getScopeName() ,public org.apache.velocity.Template getTemplate() ,public java.lang.String getTemplateName() ,public abstract int getType() ,public void init(org.apache.velocity.runtime.RuntimeServices, org.apache.velocity.context.InternalContextAdapter, org.apache.velocity.runtime.parser.node.Node) throws org.apache.velocity.exception.TemplateInitException,public boolean isScopeProvided() ,public abstract boolean render(org.apache.velocity.context.InternalContextAdapter, java.io.Writer, org.apache.velocity.runtime.parser.node.Node) throws java.io.IOException, org.apache.velocity.exception.ResourceNotFoundException, org.apache.velocity.exception.ParseErrorException, org.apache.velocity.exception.MethodInvocationException,public void setLocation(int, int) ,public void setLocation(int, int, org.apache.velocity.Template) <variables>private int column,private int line,protected org.slf4j.Logger log,private boolean provideScope,protected org.apache.velocity.runtime.RuntimeServices rsvc,private org.apache.velocity.Template template