/* ==================================================================
* Created [2009-4-27 下午11:32:55] by Jon.King
* ==================================================================
* TSS
* ==================================================================
* mailTo:jinpujun@hotmail.com
* Copyright (c) Jon.King, 2009-2012
* ==================================================================
*/
package com.jinhe.tss.um.service;
import java.util.List;
import java.util.Map;
import com.jinhe.tss.component.log.Logable;
import com.jinhe.tss.um.entity.Group;
import com.jinhe.tss.um.entity.User;
public interface IGroupService {
/** 根据ID查询用户组 */
Group getGroupById(Long id);
/**
* <p>
* 根据用户组的id获取所在用户组的用户
* </p>
* @param groupId
* @return
*/
List<User> findUsersByGroupId(Long groupId);
/**
* <p>
* 根据用户组的id获取此用户组拥有的角色
* </p>
* @param groupId
* @return List
*/
List<?> findRolesByGroupId(Long groupId);
/**
* <p>
* 查询操作用户拥有编辑权限所有角色
* </p>
* @return List
*/
List<?> findEditableRolesByOperatorId();
/**
* 获取有操作权限的主用户组(多用于移动时取目标用户组)
* @param operationId
* @return
*/
Object[] getMainGroupsByOperationId(String operationId);
/**
* 获取有操作权限的辅助用户组
* @param operationId
* @return
*/
Object[] getAssistGroupsByOperationId(String operationId);
/**
* 取制定有操作权限的其他用户组(以及其他用户组根节点、其他应用列表)
* @param operationId
* @return
*/
Object[] getOtherGroupsByOperationId(String operationId);
/**
* 取制定其他应用下的有操作权限的其他用户组(以及其他用户组根节点、其他应用)
* @param operationId
* @param applicationId
* @return
*/
Object[] getGroupsUnderAppByOperationId(String operationId, String applicationId);
/**
* <p>
* 编辑一个Group对象的明细信息、用户组对用户信息、用户组对角色的信息.
* </p>
* @param group
* @param userIdsStr
* @param roleIdsStr
*/
@Logable(operateTable="用户组织", operateType="修改",
operateInfo="编辑 ${args[0]} 用户组的明细信息(用户组对用户信息: ${args[1]} 、用户组对角色的信息: ${args[2]})"
)
void editExistGroup(Group group, String userIdsStr, String roleIdsStr);
/**
* <p>
* 新建一个Group对象的明细信息、用户组对用户信息、用户组对角色的信息
* </p>
* @param group
* @param userIdsStr
* @param roleIdsStr
*/
@Logable(operateTable="用户组织", operateType="新建",
operateInfo="新建 ${args[0]} 用户组 (用户组对用户信息: ${args[1]} 、用户组对角色的信息: ${args[2]})"
)
void createNewGroup(Group group, String userIdsStr, String roleIdsStr);
/**
* <p>
* 启用或者停用用户组
* </p>
* @param groupId
* @param disabled
* @param groupType
*/
@Logable(operateTable="用户组织", operateType="启用/停用",
operateInfo="启用/停用用户组 (ID: ${args[1]})"
)
void startOrStopGroup(String applicationId, Long groupId, Integer disabled, Integer groupType);
/**
* <p>
* 用户组的移动。
* 要判断移动到的组的状态,toGroupId如果是停用,移动过来的全部停用,并且还要判断权限。
* </p>
* @param groupId
* @param toGroupId
*/
@Logable(operateTable="用户组织", operateType="移动",
operateInfo="移动(ID: ${args[0]}) 用户组至 (ID: ${args[1]}) 用户组"
)
void moveGroup(Long groupId, Long toGroupId);
/**
* <p>
* 用户组的排序
* </p>
* @param groupId
* @param toGroupId
* @param direction
* +1/向下
* -1/向上
*/
@Logable(operateTable="用户组织", operateType="排序",
operateInfo="排序(ID: ${args[0]}) 用户组至 (ID: ${args[1]}) 用户组"
)
void sortGroup(Long groupId, Long toGroupId, int direction);
/**
* <p>
* 获取应用系统和用户组
* </p>
* @param userId
* @return
*/
Object[] findGroups();
/**
* <p>
* 删除用户组
* </p>
* @param applicationId
* @param groupId
* @param groupType 用户组类型
*/
@Logable(operateTable="用户组织", operateType="删除",
operateInfo="删除 (ID: ${args[1]}) 用户组" )
void deleteGroup(String applicationId, Long groupId, Integer groupType);
/**
* <p>
* 拷贝用户组
* 拷贝前先判断是否有权限
* 1.应该先判断是不是对要拷贝的组下的所有子节点都有拷贝权限
* 2.如果要及联拷贝用户则还要判断是否对所有用户有拷贝权限
* </p>
* @param groupId
* @param toGroupId
* 拷贝到的用户组(约束:只能从其他用户组拷贝到主用户组), 如果是复制,则为父节点ID
* @param isCascadeUser
* 只有复制到的时候才用及联复制用户
* @return
*/
@Logable(operateTable="用户组织", operateType="复制",
operateInfo="复制(ID: ${args[0]}) 用户组至 (ID: ${args[1]}) 用户组"
)
List<Group> copyGroup( Long groupId, Long toGroupId, boolean isCascadeUser);
/**
* <p>
* 拷贝用户组到其他应用系统
* </p>
* @param userId
* @param groupId
* @param applicationId
* @return
*/
@Logable(operateTable="用户组织", operateType="复制",
operateInfo="复制(ID: ${args[0]}) 用户组至 (ID: ${args[1]}) 应用系统"
)
List<?> copyGroup2OtherApp(Long groupId, Long appId);
/**
* <p>
* 设置用户组的密码策略
* </p>
* @param groupId
* @param ruleId
*/
@Logable(operateTable="用户组织", operateType="设置密码策略",
operateInfo="设置(ID: ${args[0]}) 用户组的为 ID = ${args[1]} 的密码策略"
)
void setPasswordRule(Long groupId, Long ruleId);
/**
* 将用户组从其它用户组下导入到主用户组下 的 操作前需要用到的数据
* @param groupId
* @param toGroupId
* @return
*/
Map<String, Object> getImportGroupData(Long groupId, Long toGroupId);
}