Копируем права доступа в другой проект одной кнопкой
Одна из самых популярных конфигураций 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 |