Здравствуйте, написал такой скрипт:
Цель его: проверить состоит ли пользователь в заданных группах
Код:
import java.util.List;
import javax.security.auth.Subject;
import java.security.AccessController;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
// получает текущего пользователя, вошедшего в ЛК
public static User getCurrentUser() {
Subject subject = Subject.getSubject(AccessController.getContext());
if (subject != null) {
for (UserPrincipal userPrincipal : subject
.getPrincipals(UserPrincipal.class)) {
return userPrincipal.getUser();
}
}
return null;
}
// проверяет состоит ли пользователь во всех группах
// @param groupsNames - названия групп
public static String consistAtGroups(String... groupsNames) {
User user = getCurrentUser();
if (user!=null){
getContext().log.info("user.name = ");
List<Integer> groups = user.getUserGroups();
Integer id;
for (String name:groupsNames){
id = getGroupIDByName(name);
if (id!=-1)
if(!groups.contains(id))
return "false";
else
return "false";
}
return "true";
}
getContext().log.info("user = null");
return "false";
}
// выдает id группы по ее имени
// @param name - название группы
public static int getGroupIDByName(String name) {
int id = -1;
String query = "SELECT id FROM bgs_group WHERE title=?";
ResultSet rs = null;
try{
PreparedStatement st = getContext().con.prepareStatement(query);
st.setString(1,name);
rs = st.executeQuery();
if (rs.next())
id = rs.getInt(1);
}
catch(SQLException ex){
getContext().log.error(ex.getMessage());
}
finally{
if (rs!=null)
try {
rs.close();
} catch (SQLException e) {}
}
return id;
}
Добавил его в свою библиотеку скриптов myscriptlib.
Теперь в зависимоти от этого нужно выводить в Web-интерфейсе ЛК пункт меню. Добавил в layout.xsl следующее:
ну это как в инструкции:
Код:
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:xalan="http://xml.apache.org/xalan"
xmlns:setup="bitel.billing.server.util.exslt.ConfigReader">
<xalan:component prefix="setup" functions="getValue">
<xalan:script lang="javaclass" src="xalan://bitel.billing.server.util.exslt.ConfigReader"/>
</xalan:component>
даллее добавил в шаблон меню:
Код:
<xsl:choose>
<xsl:variable name = "consistAtGroups"><xsl:value-of select="script:invoke('myscriptlib','consistAtGroups','admins','guests')" /></xsl:variable>
<xsl:when test="'true'=$consistAtGroups">
<tr>
<th><img src="img/strelki.gif"/></th>
<td><a href="?action=MyAction&mid=contract">Мое действие</a></td>
</tr>
</xsl:when>
</xsl:choose>
Но ничего, не проиходит, в логи ничего не попадает. Так же пробовал задавать шаблое так:
Код:
<xsl:choose>
<xsl:variable name = "consistAtGroups" select ="script:invoke('myscriptlib','consistAtGroups','admins','guests')"></xsl:variable>
<xsl:when test="'true'=$consistAtGroups">
<tr>
<th><img src="img/strelki.gif"/></th>
<td><a href="?action=MyAction&mid=contract">Мое действие</a></td>
</tr>
</xsl:when>
</xsl:choose>
тоже ничего. Где ошибка?