Копируем права доступа в другой проект одной кнопкой
Одна из самых популярных конфигураций TrackStudio: много однотипных проектов, права на которые задаются для разных команд по-разному. Эта конфигурация встречается и в HelpDesk, и в заказной разработке. При создании нового проекта приходится каждый раз настраивать права доступа. А что, если попробовать скопировать эти настройки из другого проекта, которым занимается та же команда разработчиков?
Это можно сделать одной кнопкой, по которой будет запускаться Add Message/Instead Of Trigger. Само сообщение при этом создаваться не будет. В теле сообщения указывается номер проекта, из которого нужно взять настройки.
package scripts.instead_of_add_message;
import com.trackstudio.app.adapter.AdapterManager;
import com.trackstudio.app.session.SessionContext;
import com.trackstudio.exception.GranException;
import com.trackstudio.external.OperationTrigger;
import com.trackstudio.secured.*;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import java.util.List;
/**
* Копирует ACL из задачи, указанной в описании сообщения, в текущую.
*/
public class CopyAccessRules implements OperationTrigger {
public static Log log = LogFactory.getLog(CopyAccessRules.class);
public SecuredMessageTriggerBean execute(SecuredMessageTriggerBean message) throws GranException
{
String taskNum = message.getDescription();
SessionContext sc = message.getSecure();
SecuredTaskBean task = AdapterManager.getInstance().getSecuredTaskAdapterManager().findTaskByNumber(sc, taskNum);
if (task!=null){
List<SecuredTaskAclBean> targetAcl = AdapterManager.getInstance().getSecuredAclAdapterManager().getTaskAclList(sc,
message.getTaskId());
List<SecuredTaskAclBean> sourceAcl = AdapterManager.getInstance().getSecuredAclAdapterManager().getTaskAclList(sc,
task.getId());
for (SecuredTaskAclBean tb: sourceAcl){
if (tb.canManage() && tb.getTaskId().equals(task.getId())){
SecuredPrstatusBean group = tb.getGroup();
SecuredUserBean user = tb.getUser();
SecuredPrstatusBean prstatus = tb.getPrstatus();
boolean isOverride = tb.isOverride();
boolean exists = false;
if (!sc.getUser().equals(user)){
for (SecuredTaskAclBean ta: targetAcl){
SecuredPrstatusBean groupA = ta.getGroup();
SecuredUserBean userA = ta.getUser();
SecuredPrstatusBean prstatusA = ta.getPrstatus();
boolean isOverrideA = ta.isOverride();
if ((group!=null && groupA!=null && group.equals(groupA))
|| (group==null && groupA == null))
if ((user!=null && userA!=null && user.equals(userA))
|| (user==null && userA == null))
if ((prstatus!=null && prstatusA!=null && prstatus.equals(prstatusA)) ||
(prstatus==null && prstatusA == null))
if (isOverride==isOverrideA){
exists = true;
break;
}
}
if (!exists){
// create
String aclid =
AdapterManager.getInstance().getSecuredAclAdapterManager().createAcl(sc, message.getTaskId(), null,
user!=null ? user.getId() : null, group!=null ? group.getId() : null);
AdapterManager.getInstance().getSecuredAclAdapterManager().updateTaskAcl(sc, aclid, prstatus.getId(), isOverride);
}
}
}
}
}
return message;
}
}
| Attachment | Size |
|---|---|
| CopyAccessRules.class | 4.49 KB |
| CopyAccessRules.java | 2.99 KB |