/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package framework.beans.security;
import framework.generic.ESecurity;
import framework.security.UserRight;
import framework.security.UserRightsSetAbstract;
import java.io.Serializable;
/**
* Права на выполнения комманд бина. Объект этого класса возвращается методами
* SecuredBean.SetSession и FacadeBean.initById
* @author antony
*/
public class BeanRights implements Serializable {
// список прав, по причине наличия которых доступны комманды бина
// i - я комманда доступна, если cmdAccess[i] > 0, и недоступна, если cmdAccess[i] < 0.
// Модуль cmdAccess[i] - право, по причине наличия / отсутсвтия которого данная команда доступна / недоступна.
private int [] cmdAccess;
public BeanRights(int [] aCmdAccess) {
cmdAccess = aCmdAccess;
}
@Override
public String toString() {
String msg = "BeanRights {\n";
if(cmdAccess != null) {
for (int i = 0; i < cmdAccess.length; i++) {
int j = cmdAccess[i];
if(j > 0) {
msg += "ON: ";
} else {
msg += "OFF: ";
j = -j;
}
UserRight right = UserRightsSetAbstract.getRightFromID(j);
if(right != null) {
msg += right.toString() + "\n";
} else {
msg += "right not found:" + j + "\n";
}
}
}
msg += "}";
return msg;
}
public boolean isCommandAccessible(int aCommandId) {
return getCommandAccessReason(aCommandId) > 0 || ! UserRightsSetAbstract.SecurityOn;
}
/**
* Возвращает право - причину доступности / недоступности комманды.
* Модуль результата - право. Знак "-" - команда недоступна, знак "+" - доступна.
* Число 0 - комманда вообще не имеет смысла, ну и не доступна конечно.
* Этот пункт возник в случае "редактирование"
*/
public int getCommandAccessReason(int aCommandId) {
if (cmdAccess == null || aCommandId >= cmdAccess.length) {
throw new RuntimeException("Внутренняя ошибка: не заполнены права бина или проверяется доступ к несуществующей команде");
}
int res = cmdAccess[aCommandId];
return res;
}
/** Метод изменяет причины доступности или недоступрости комманды
*
* @param aCommandId
* @param aRightOrReasonId - либо ид права, со знаком "+" или "-", либо ид. причины недоступности
*/
public void setCommandAccessReason(int aCommandId, int aRightOrReasonId) throws ESecurity {
if (cmdAccess == null || aCommandId >= cmdAccess.length) {
throw new ESecurity("Внутренняя ошибка: не заполнены права бина или определяется доступ к несуществующей команде");
}
cmdAccess[aCommandId] = aRightOrReasonId;
}
}