xiongzhu 7 lat temu
rodzic
commit
c14c98779a
31 zmienionych plików z 939 dodań i 737 usunięć
  1. 5 0
      log.txt
  2. 8 13
      src/main/java/com/izouma/awesomeadmin/activiti/CustomGroupEntityManager.java
  3. 9 12
      src/main/java/com/izouma/awesomeadmin/activiti/CustomUserEntityManager.java
  4. 21 12
      src/main/java/com/izouma/awesomeadmin/dao/DepartInfoMapper.java
  5. 32 11
      src/main/java/com/izouma/awesomeadmin/dao/DepartInfoMapper.xml
  6. 22 10
      src/main/java/com/izouma/awesomeadmin/dao/SysRoleMapper.java
  7. 26 0
      src/main/java/com/izouma/awesomeadmin/dao/SysRoleMapper.xml
  8. 19 42
      src/main/java/com/izouma/awesomeadmin/dao/UserInfoMapper.xml
  9. 166 139
      src/main/java/com/izouma/awesomeadmin/model/SysMenu.java
  10. 0 10
      src/main/java/com/izouma/awesomeadmin/model/UserInfo.java
  11. 10 10
      src/main/java/com/izouma/awesomeadmin/service/DepartInfoService.java
  12. 4 0
      src/main/java/com/izouma/awesomeadmin/service/SysMenuService.java
  13. 16 10
      src/main/java/com/izouma/awesomeadmin/service/SysRoleService.java
  14. 90 7
      src/main/java/com/izouma/awesomeadmin/service/impl/SysMenuServiceImpl.java
  15. 50 3
      src/main/java/com/izouma/awesomeadmin/service/impl/SysRoleServiceImpl.java
  16. 25 8
      src/main/java/com/izouma/awesomeadmin/service/impl/UserInfoServiceImpl.java
  17. 1 1
      src/main/java/com/izouma/awesomeadmin/shiro/BaseRealm.java
  18. 2 2
      src/main/java/com/izouma/awesomeadmin/web/SysMenuController.java
  19. 10 0
      src/main/java/com/izouma/awesomeadmin/web/activiti/ProcessController.java
  20. 2 2
      src/main/resources/spring/appDataSource.xml
  21. 2 105
      src/main/resources/spring/applicationContext.xml
  22. 76 0
      src/main/resources/spring/beans-activiti.xml
  23. 51 0
      src/main/resources/spring/beans-shiro.xml
  24. 0 0
      src/main/resources/spring/spring-mvc.xml
  25. 250 250
      src/main/vue/package-lock.json
  26. 5 5
      src/main/vue/src/components/SysMenu.vue
  27. 3 20
      src/main/vue/src/pages/App.vue
  28. 23 40
      src/main/vue/src/pages/Menus.vue
  29. 8 22
      src/main/vue/src/pages/Role.vue
  30. 1 1
      src/main/webapp/WEB-INF/web.xml
  31. 2 2
      src/test/java/UserServiceTest.java

+ 5 - 0
log.txt

@@ -0,0 +1,5 @@
+[2018-07-31 16:15:40] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
+[2018-07-31 16:17:19] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
+[2018-07-31 16:17:38] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
+[2018-07-31 16:18:06] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
+[2018-07-31 16:18:27] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.

+ 8 - 13
src/main/java/com/izouma/awesomeadmin/activiti/CustomGroupEntityManager.java

@@ -2,6 +2,7 @@ package com.izouma.awesomeadmin.activiti;
 
 import com.izouma.awesomeadmin.model.SysRole;
 import com.izouma.awesomeadmin.model.UserInfo;
+import com.izouma.awesomeadmin.service.SysRoleService;
 import com.izouma.awesomeadmin.service.UserInfoService;
 import org.activiti.engine.identity.Group;
 import org.activiti.engine.impl.persistence.entity.GroupEntity;
@@ -13,23 +14,17 @@ import java.util.List;
 
 public class CustomGroupEntityManager extends GroupEntityManager {
     @Autowired
-    private UserInfoService userInfoService;
+    private SysRoleService  sysRoleService;
 
     @Override
     public List<Group> findGroupsByUser(String userId) {
         List<Group> groupList = new ArrayList<>();
-        UserInfo userInfo = userInfoService.getUserInfoById(userId);
-        if (userInfo == null) {
-            return null;
-        }
-        if (userInfo.getRoleInfoList() != null) {
-            for (SysRole sysRole : userInfo.getRoleInfoList()) {
-                Group group = new GroupEntity();
-                group.setId(sysRole.getId().toString());
-                group.setName(sysRole.getName());
-                group.setType("assignment");
-                groupList.add(group);
-            }
+        for (SysRole sysRole : sysRoleService.getUserRoles(Integer.valueOf(userId))) {
+            Group group = new GroupEntity();
+            group.setId(sysRole.getId().toString());
+            group.setName(sysRole.getName());
+            group.setType("assignment");
+            groupList.add(group);
         }
         return groupList;
     }

+ 9 - 12
src/main/java/com/izouma/awesomeadmin/activiti/CustomUserEntityManager.java

@@ -2,6 +2,7 @@ package com.izouma.awesomeadmin.activiti;
 
 import com.izouma.awesomeadmin.model.SysRole;
 import com.izouma.awesomeadmin.model.UserInfo;
+import com.izouma.awesomeadmin.service.SysRoleService;
 import com.izouma.awesomeadmin.service.UserInfoService;
 import org.activiti.engine.identity.Group;
 import org.activiti.engine.identity.User;
@@ -17,6 +18,8 @@ public class CustomUserEntityManager extends UserEntityManager {
 
     @Autowired
     private UserInfoService userInfoService;
+    @Autowired
+    private SysRoleService sysRoleService;
 
     @Override
     public User findUserById(String userId) {
@@ -33,18 +36,12 @@ public class CustomUserEntityManager extends UserEntityManager {
     @Override
     public List<Group> findGroupsByUser(String userId) {
         List<Group> groupList = new ArrayList<>();
-        UserInfo userInfo = userInfoService.getUserInfoById(userId);
-        if (userInfo == null) {
-            return null;
-        }
-        if (userInfo.getRoleInfoList() != null) {
-            for (SysRole sysRole : userInfo.getRoleInfoList()) {
-                Group group = new GroupEntity();
-                group.setId(sysRole.getId().toString());
-                group.setName(sysRole.getName());
-                group.setType("assignment");
-                groupList.add(group);
-            }
+        for (SysRole sysRole : sysRoleService.getUserRoles(Integer.valueOf(userId))) {
+            Group group = new GroupEntity();
+            group.setId(sysRole.getId().toString());
+            group.setName(sysRole.getName());
+            group.setType("assignment");
+            groupList.add(group);
         }
         return groupList;
     }

+ 21 - 12
src/main/java/com/izouma/awesomeadmin/dao/DepartInfoMapper.java

@@ -3,6 +3,7 @@ package com.izouma.awesomeadmin.dao;
 import java.util.List;
 import java.util.Map;
 
+import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
 
 import com.izouma.awesomeadmin.model.DepartInfo;
@@ -10,30 +11,38 @@ import com.izouma.awesomeadmin.model.DepartInfo;
 /**
  * depart_info Dao接口
  * Thu Apr 26 10:56:37 CST 2018  Suo Chen Cheng
- */ 
+ */
 @Repository("com.izouma.awesomeadmin.dao.DepartInfoMapper")
 public interface DepartInfoMapper {
 
-	int deleteByPrimaryKey(Integer id);
+    int deleteByPrimaryKey(Integer id);
 
-	int insertSelective(DepartInfo record);
+    int insertSelective(DepartInfo record);
 
-	DepartInfo selectByPrimaryKey(Integer id);
+    DepartInfo selectByPrimaryKey(Integer id);
 
-	int updateByPrimaryKeySelective(DepartInfo record);
+    int updateByPrimaryKeySelective(DepartInfo record);
 
-	List <DepartInfo> queryAllDepartInfo(DepartInfo record);
+    List<DepartInfo> queryAllDepartInfo(DepartInfo record);
 
-	List <DepartInfo> queryDepartInfosByPage(Map <String, Object> parameter);
+    List<DepartInfo> queryDepartInfosByPage(Map<String, Object> parameter);
 
-	int delete(String id);
+    int delete(String id);
 
-	DepartInfo queryDepartInfo(DepartInfo record);
+    DepartInfo queryDepartInfo(DepartInfo record);
 
-	List <DepartInfo> findPower(DepartInfo record);
+    List<DepartInfo> findPower(DepartInfo record);
 
-	List <DepartInfo> getParentList(Integer id);
+    List<DepartInfo> getParentList(Integer id);
 
-	List<DepartInfo> selectByPrimaryKeys(String ids);
+    List<DepartInfo> selectByPrimaryKeys(String ids);
+
+    List<DepartInfo> getUserDeparts(@Param("userId") Integer userId);
+
+    int setUserDeparts(@Param("userId") Integer userId, @Param("departs") List<String> departs);
+
+    int clearUserDeparts(@Param("userId") Integer userId);
+
+    String getUserDepartId(Integer id);
 }
 

+ 32 - 11
src/main/java/com/izouma/awesomeadmin/dao/DepartInfoMapper.xml

@@ -22,21 +22,21 @@
 	<select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer" >
 		select
 		<include refid="Base_Column_List" />
-		from depart_info
+		from sys_depart
 		where id = #{id,jdbcType=INTEGER}
 	</select>
 	<select id="selectByPrimaryKeys" resultMap="BaseResultMap" parameterType="java.lang.String" >
 		select
 		<include refid="Base_Column_List" />
-		from depart_info
+		from sys_depart
 		where FIND_IN_SET(id, #{ids,jdbcType=INTEGER}) and del_flag = 'N'
 	</select>
 	<delete id="deleteByPrimaryKey" parameterType="java.lang.Integer" >
-		delete from depart_info
+		delete from sys_depart
 		where id = #{id,jdbcType=INTEGER}
 	</delete>
 	<insert id="insertSelective" parameterType="com.izouma.awesomeadmin.model.DepartInfo" useGeneratedKeys="true" keyProperty="id">
-		insert into depart_info
+		insert into sys_depart
 		<trim prefix="(" suffix=")" suffixOverrides="," >
 			<if test="id != null" >
 				id,	
@@ -121,7 +121,7 @@
 		</trim>
 	</insert>
 	<update id="updateByPrimaryKeySelective" parameterType="com.izouma.awesomeadmin.model.DepartInfo" >
-		update depart_info
+		UPDATE sys_depart
 		<set >
 			<if test="departName != null" >
 				depart_name = #{departName,jdbcType=VARCHAR},	
@@ -163,7 +163,7 @@
 		where id = #{id,jdbcType=INTEGER}
 	</update>
 	<select id="queryDepartInfosByPage" parameterType="java.util.Map" resultType="com.izouma.awesomeadmin.model.DepartInfo">
-		select <include refid="Base_Column_List"/> from depart_info
+		select <include refid="Base_Column_List"/> from sys_depart
 		<where>
 			and del_flag = 'N'
 			<if test="record.id != null and !&quot;&quot;.equals(record.id)">
@@ -209,7 +209,7 @@
 		order by id desc
 	</select>
 	<select id="queryAllDepartInfo" parameterType="java.util.Map" resultType="com.izouma.awesomeadmin.model.DepartInfo">
-		select <include refid="Base_Column_List"/> from depart_info
+		select <include refid="Base_Column_List"/> from sys_depart
 		<where>
 			and del_flag = 'N'
 			<if test="id != null and !&quot;&quot;.equals(id)">
@@ -255,7 +255,7 @@
 		order by id desc
 	</select>
 	<select id="queryDepartInfo" parameterType="java.util.Map" resultType="com.izouma.awesomeadmin.model.DepartInfo">
-		select <include refid="Base_Column_List"/> from depart_info
+		select <include refid="Base_Column_List"/> from sys_depart
 		<where>
 			and del_flag = 'N'
 			<if test="id != null and !&quot;&quot;.equals(id)">
@@ -301,17 +301,38 @@
 		LIMIT 1
 	</select>
     <select id="findPower" parameterType="java.util.Map" resultType="com.izouma.awesomeadmin.model.DepartInfo">
-		select * from depart_info where all_parent_id  LIKE '${allParentId}%'  and id=  #{parentId}
+		select * from sys_depart where all_parent_id  LIKE '${allParentId}%'  and id=  #{parentId}
 	</select>
     <update id="delete">
-		UPDATE depart_info SET del_flag = 'Y'
+		UPDATE sys_depart SET del_flag = 'Y'
 		<where>
 			AND id = #{id}
 		</where>
 	</update>
 
 	<select id="getParentList" resultType="departInfo" parameterType="integer">
-	    SELECT * FROM depart_info WHERE FIND_IN_SET(id,(SELECT all_parent_id FROM depart_info WHERE id  = #{id})) AND del_flag = 'N'
+	    SELECT * from sys_depart WHERE FIND_IN_SET(id,(SELECT all_parent_id from sys_depart WHERE id  = #{id})) AND del_flag = 'N'
+	</select>
+
+	<select id="getUserDeparts" resultType="com.izouma.awesomeadmin.model.DepartInfo">
+		select
+		<include refid="Base_Column_List" />
+		from sys_depart
+		where id in (select depart_id from sys_user_depart where user_id = #{userId})
+		and del_flag = 'N'
+	</select>
+    <insert id="setUserDeparts">
+		insert into sys_user_depart (user_id, depart_id)
+		values
+		<foreach collection="departs" item="departId" separator=",">
+			(#{userId}, #{departId})
+		</foreach>
+	</insert>
+	<delete id="clearUserDeparts">
+		delete from sys_user_depart where user_id = #{userId}
+	</delete>
+	<select id="getUserDepartId" resultType="java.lang.String">
+		SELECT group_concat(depart_id) FROM sys_user_depart WHERE user_id = #{id}
 	</select>
 </mapper>
 

+ 22 - 10
src/main/java/com/izouma/awesomeadmin/dao/SysRoleMapper.java

@@ -10,26 +10,38 @@ import java.util.Map;
 /**
  * sys_role Dao接口
  * Tue Apr 10 18:09:56 CST 2018  Suo Chen Cheng
- */ 
+ */
 @Repository("com.zoumaframe.dao.SysRoleMapper")
 public interface SysRoleMapper {
 
-	int deleteByPrimaryKey(Integer id);
+    int deleteByPrimaryKey(Integer id);
 
-	int insertSelective(SysRole record);
+    int insertSelective(SysRole record);
 
-	SysRole selectByPrimaryKey(Integer id);
+    SysRole selectByPrimaryKey(Integer id);
 
-	List<SysRole> selectByPrimaryKeys(@Param("ids") String ids);
+    List<SysRole> selectByPrimaryKeys(@Param("ids") String ids);
 
-	int updateByPrimaryKeySelective(SysRole record);
+    int updateByPrimaryKeySelective(SysRole record);
 
-	List<SysRole> queryAllSysRole(SysRole record);
+    List<SysRole> queryAllSysRole(SysRole record);
 
-	List<SysRole> querySysRolesByPage(Map<String, Object> parameter);
+    List<SysRole> querySysRolesByPage(Map<String, Object> parameter);
 
-	int delete(String id);
+    int delete(String id);
 
-	SysRole querySysRole(SysRole record);
+    SysRole querySysRole(SysRole record);
+
+    List<SysRole> getUserRoles(@Param("userId") Integer userId);
+
+    int setUserRoles(@Param("userId") Integer userId, @Param("roles") List<String> roles);
+
+    int clearUserRoles(@Param("userId") Integer userId);
+
+    int addUserRole(@Param("userId") Integer userId, @Param("roleId") Integer roleId);
+
+    int removeUserRole(@Param("userId") Integer userId, @Param("roleId") Integer roleId);
+
+    String getUserRoleId(Integer id);
 }
 

+ 26 - 0
src/main/java/com/izouma/awesomeadmin/dao/SysRoleMapper.xml

@@ -336,11 +336,37 @@
 		where id in (${ids})
 		and del_flag = 'N'
 	</select>
+    <select id="getUserRoles" resultType="com.izouma.awesomeadmin.model.SysRole">
+		select
+		<include refid="Base_Column_List" />
+		from sys_role
+		where id in (select role_id from sys_user_role where user_id = #{userId})
+		and del_flag = 'N'
+	</select>
     <update id="delete">
 		UPDATE sys_role SET del_flag = 'Y'
 		<where>
 			AND id = #{id}
 		</where>
 	</update>
+	<insert id="setUserRoles">
+		insert into sys_user_role (user_id, role_id)
+		values
+		<foreach collection="roles" item="roleId" separator=",">
+			(#{userId}, #{roleId})
+		</foreach>
+	</insert>
+    <delete id="clearUserRoles">
+		delete from sys_user_role where user_id = #{userId}
+	</delete>
+	<insert id="addUserRole">
+		insert into sys_user_role (user_id, role_id) values (#{userId}, #{roleId})
+	</insert>
+	<delete id="removeUserRole">
+		delete from sys_user_role when user_id = #{userId} and role_id = #{roleId}
+	</delete>
+	<select id="getUserRoleId" resultType="java.lang.String">
+		SELECT group_concat(role_id) FROM sys_user_role WHERE user_id = #{id}
+	</select>
 </mapper>
 

+ 19 - 42
src/main/java/com/izouma/awesomeadmin/dao/UserInfoMapper.xml

@@ -17,17 +17,15 @@
         <result column="province" property="province" jdbcType="VARCHAR"/>
         <result column="city" property="city" jdbcType="VARCHAR"/>
         <result column="district" property="district" jdbcType="VARCHAR"/>
-        <result column="role_id" property="roleId" jdbcType="VARCHAR"/>
         <result column="create_time" property="createTime" jdbcType="TIMESTAMP"/>
         <result column="del_flag" property="delFlag" jdbcType="CHAR"/>
-        <result column="depart_id" property="departId" jdbcType="VARCHAR"/>
-        <collection property="roleInfoList" column="role_id" ofType="com.izouma.awesomeadmin.model.SysRole" select="selectRoles"/>
+        <association property="departId" javaType="string" column="id"
+                     select="com.izouma.awesomeadmin.dao.DepartInfoMapper.getUserDepartId"/>
+        <association property="roleId" javaType="string" column="id"
+                     select="com.izouma.awesomeadmin.dao.SysRoleMapper.getUserRoleId"/>
     </resultMap>
-    <select id="selectRoles" parameterType="string" resultType="com.izouma.awesomeadmin.model.SysRole">
-        select * from sys_role where FIND_IN_SET(id, #{roleId})
-    </select>
     <sql id="Base_Column_List">
-        id, username, nickname, icon, birthday, sex, open_id, union_id, phone, mail, country, province, city, district, role_id, create_time, del_flag,depart_id
+        id, username, nickname, icon, birthday, sex, open_id, union_id, phone, mail, country, province, city, district, create_time, del_flag
     </sql>
     <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer">
         select
@@ -36,7 +34,8 @@
         where id = #{id,jdbcType=INTEGER}
     </select>
     <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
-        delete from user_info
+        delete
+        from user_info
         where id = #{id,jdbcType=INTEGER}
     </delete>
     <insert id="insertSelective" parameterType="com.izouma.awesomeadmin.model.UserInfo" useGeneratedKeys="true"
@@ -97,9 +96,6 @@
             <if test="delFlag != null">
                 del_flag,
             </if>
-            <if test="departId != null">
-                depart_id,
-            </if>
         </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="id != null">
@@ -156,9 +152,6 @@
             <if test="delFlag != null">
                 #{delFlag,jdbcType=CHAR},
             </if>
-            <if test="departId != null">
-                #{departId,jdbcType=VARCHAR},
-            </if>
         </trim>
     </insert>
     <update id="updateByPrimaryKeySelective" parameterType="com.izouma.awesomeadmin.model.UserInfo">
@@ -215,10 +208,6 @@
             <if test="delFlag != null">
                 del_flag = #{delFlag,jdbcType=CHAR},
             </if>
-            <if test="departId != null">
-                depart_id = #{departId,jdbcType=VARCHAR},
-            </if>
-
         </set>
         where id = #{id,jdbcType=INTEGER}
     </update>
@@ -283,9 +272,6 @@
             <if test="record.delFlag != null and !&quot;&quot;.equals(record.delFlag)">
                 and del_flag = #{record.delFlag}
             </if>
-            <if test="record.departId != null and !&quot;&quot;.equals(record.departId)">
-                and depart_id = #{record.departId}
-            </if>
         </where>
         order by id desc
     </select>
@@ -349,9 +335,6 @@
             <if test="delFlag != null and !&quot;&quot;.equals(delFlag)">
                 and del_flag = #{delFlag}
             </if>
-            <if test="departId != null and !&quot;&quot;.equals(departId)">
-                and depart_id = #{departId}
-            </if>
         </where>
         order by id desc
     </select>
@@ -415,9 +398,6 @@
             <if test="delFlag != null and !&quot;&quot;.equals(delFlag)">
                 and del_flag = #{delFlag}
             </if>
-            <if test="departId != null and !&quot;&quot;.equals(departId)">
-                and depart_id = #{departId}
-            </if>
         </where>
         LIMIT 1
     </select>
@@ -428,23 +408,20 @@
         WHERE username = #{username} AND password = #{password} AND del_flag = 'N'
     </select>
     <select id="findDepartLeader" resultType="java.lang.String">
-        SELECT
-            id
-        FROM
-            user_info
-        WHERE
-            depart_id = ( SELECT depart_id FROM user_info WHERE id = #{userId} )
-            AND FIND_IN_SET( 9, role_id )
-            AND del_flag = 'N'
+        SELECT *
+        FROM (SELECT user_id, GROUP_CONCAT(depart_id ORDER BY depart_id) AS depart_id
+              FROM sys_user_depart
+              GROUP BY user_id) AS tmp
+                 LEFT JOIN sys_user_role ON tmp.user_id = sys_user_role.user_id
+        WHERE tmp.depart_id =
+              (SELECT GROUP_CONCAT(depart_id ORDER BY depart_id) FROM sys_user_depart WHERE user_id = #{userId})
+          AND role_id = 9
     </select>
     <select id="findUserByRoleName" resultType="java.lang.String">
-        SELECT
-            id
-        FROM
-            user_info
-        WHERE
-            FIND_IN_SET( ( SELECT id FROM sys_role WHERE enname = #{roleName} AND sys_role.del_flag = 'N'), role_id )
-            AND del_flag = 'N'
+        SELECT user_id
+        FROM sys_user_role
+        WHERE FIND_IN_SET((SELECT id FROM sys_role WHERE enname = #{roleName}
+                                                     AND sys_role.del_flag = 'N'), role_id)
     </select>
     <update id="delete">
         UPDATE user_info SET del_flag = 'Y'

+ 166 - 139
src/main/java/com/izouma/awesomeadmin/model/SysMenu.java

@@ -6,192 +6,219 @@ import com.fasterxml.jackson.annotation.JsonInclude;
 
 import java.math.BigDecimal;
 import java.util.Date;
+import java.util.List;
 import java.util.Objects;
 
 /**
  * sys_menu 实体类
  * Tue Apr 10 18:09:44 CST 2018  Suo Chen Cheng
- */ 
+ */
 @JsonAutoDetect
 @JsonInclude(JsonInclude.Include.NON_NULL)
-public class SysMenu{
+public class SysMenu implements Cloneable {
 
-	private Integer id;
+    private Integer id;
 
-	private Integer parentId;
+    private Integer parentId;
 
-	private String parentIds;
+    private String parentIds;
 
-	private String name;
+    private String name;
 
-	private BigDecimal sort;
+    private BigDecimal sort;
 
-	private String href;
+    private String href;
 
-	private String target;
+    private String target;
 
-	private String icon;
+    private String icon;
 
-	private String isShow;
+    private String isShow;
 
-	private String permission;
+    private String permission;
 
-	private String createBy;
+    private String createBy;
 
-	private Date createDate;
+    private Date createDate;
 
-	private String updateBy;
+    private String updateBy;
 
-	private Date updateDate;
+    private Date updateDate;
 
-	private String remarks;
+    private String remarks;
 
-	private String delFlag;
+    private String delFlag;
 
-	private String menuType;
+    private String menuType;
 
-	public void setId(Integer id){
-		this.id=id;
-	}
+    private List<SysMenu> children;
 
-	public Integer getId(){
-		return id;
-	}
+    public void setId(Integer id) {
+        this.id = id;
+    }
 
-	public void setParentId(Integer parentId){
-		this.parentId=parentId;
-	}
+    public Integer getId() {
+        return id;
+    }
 
-	public Integer getParentId(){
-		return parentId;
-	}
+    public void setParentId(Integer parentId) {
+        this.parentId = parentId;
+    }
 
-	public void setParentIds(String parentIds){
-		this.parentIds=parentIds;
-	}
+    public Integer getParentId() {
+        return parentId;
+    }
 
-	public String getParentIds(){
-		return parentIds;
-	}
+    public void setParentIds(String parentIds) {
+        this.parentIds = parentIds;
+    }
 
-	public void setName(String name){
-		this.name=name;
-	}
+    public String getParentIds() {
+        return parentIds;
+    }
 
-	public String getName(){
-		return name;
-	}
+    public void setName(String name) {
+        this.name = name;
+    }
 
-	public void setSort(BigDecimal sort){
-		this.sort=sort;
-	}
+    public String getName() {
+        return name;
+    }
 
-	public BigDecimal getSort(){
-		return sort;
-	}
+    public void setSort(BigDecimal sort) {
+        this.sort = sort;
+    }
 
-	public void setHref(String href){
-		this.href=href;
-	}
+    public BigDecimal getSort() {
+        return sort;
+    }
 
-	public String getHref(){
-		return href;
-	}
+    public void setHref(String href) {
+        this.href = href;
+    }
 
-	public void setTarget(String target){
-		this.target=target;
-	}
+    public String getHref() {
+        return href;
+    }
 
-	public String getTarget(){
-		return target;
-	}
+    public void setTarget(String target) {
+        this.target = target;
+    }
 
-	public void setIcon(String icon){
-		this.icon=icon;
-	}
+    public String getTarget() {
+        return target;
+    }
 
-	public String getIcon(){
-		return icon;
-	}
+    public void setIcon(String icon) {
+        this.icon = icon;
+    }
 
-	public void setIsShow(String isShow){
-		this.isShow=isShow;
-	}
+    public String getIcon() {
+        return icon;
+    }
 
-	public String getIsShow(){
-		return isShow;
-	}
+    public void setIsShow(String isShow) {
+        this.isShow = isShow;
+    }
 
-	public void setPermission(String permission){
-		this.permission=permission;
-	}
+    public String getIsShow() {
+        return isShow;
+    }
 
-	public String getPermission(){
-		return permission;
-	}
+    public void setPermission(String permission) {
+        this.permission = permission;
+    }
 
-	public void setCreateBy(String createBy){
-		this.createBy=createBy;
-	}
+    public String getPermission() {
+        return permission;
+    }
 
-	public String getCreateBy(){
-		return createBy;
-	}
+    public void setCreateBy(String createBy) {
+        this.createBy = createBy;
+    }
 
-	public void setCreateDate(Date createDate){
-		this.createDate=createDate;
-	}
+    public String getCreateBy() {
+        return createBy;
+    }
 
-	public Date getCreateDate(){
-		return createDate;
-	}
-
-	public void setUpdateBy(String updateBy){
-		this.updateBy=updateBy;
-	}
-
-	public String getUpdateBy(){
-		return updateBy;
-	}
-
-	public void setUpdateDate(Date updateDate){
-		this.updateDate=updateDate;
-	}
-
-	public Date getUpdateDate(){
-		return updateDate;
-	}
-
-	public void setRemarks(String remarks){
-		this.remarks=remarks;
-	}
-
-	public String getRemarks(){
-		return remarks;
-	}
-
-	public void setDelFlag(String delFlag){
-		this.delFlag=delFlag;
-	}
-
-	public String getDelFlag(){
-		return delFlag;
-	}
-
-	public void setMenuType(String menuType){
-		this.menuType=menuType;
-	}
-
-	public String getMenuType(){
-		return menuType;
-	}
-
-	@Override
-	public boolean equals(Object obj) {
-		if(obj instanceof SysMenu){
-			return Objects.equals(this.id, ((SysMenu) obj).getId());
-		}
-		return super.equals(obj);
-	}
+    public void setCreateDate(Date createDate) {
+        this.createDate = createDate;
+    }
+
+    public Date getCreateDate() {
+        return createDate;
+    }
+
+    public void setUpdateBy(String updateBy) {
+        this.updateBy = updateBy;
+    }
+
+    public String getUpdateBy() {
+        return updateBy;
+    }
+
+    public void setUpdateDate(Date updateDate) {
+        this.updateDate = updateDate;
+    }
+
+    public Date getUpdateDate() {
+        return updateDate;
+    }
+
+    public void setRemarks(String remarks) {
+        this.remarks = remarks;
+    }
+
+    public String getRemarks() {
+        return remarks;
+    }
+
+    public void setDelFlag(String delFlag) {
+        this.delFlag = delFlag;
+    }
+
+    public String getDelFlag() {
+        return delFlag;
+    }
+
+    public void setMenuType(String menuType) {
+        this.menuType = menuType;
+    }
+
+    public String getMenuType() {
+        return menuType;
+    }
+
+    public List<SysMenu> getChildren() {
+        return children;
+    }
+
+    public void setChildren(List<SysMenu> children) {
+        this.children = children;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (obj instanceof SysMenu) {
+            return Objects.equals(this.id, ((SysMenu) obj).getId());
+        }
+        return super.equals(obj);
+    }
+
+    @Override
+    public int hashCode() {
+        return this.id.hashCode();
+    }
+
+    @Override
+    public SysMenu clone() {
+        SysMenu menu = null;
+        try {
+            menu = (SysMenu) super.clone();
+        } catch (CloneNotSupportedException e) {
+            e.printStackTrace();
+        }
+        return menu;
+    }
 }
 

+ 0 - 10
src/main/java/com/izouma/awesomeadmin/model/UserInfo.java

@@ -49,8 +49,6 @@ public class UserInfo{
 
 	private String delFlag;
 
-	private List<SysRole> roleInfoList;
-
 	private String departId;
 
 	public String getDepartId() {
@@ -61,14 +59,6 @@ public class UserInfo{
 		this.departId = departId;
 	}
 
-	public List<SysRole> getRoleInfoList() {
-		return roleInfoList;
-	}
-
-	public void setRoleInfoList(List<SysRole> roleInfoList) {
-		this.roleInfoList = roleInfoList;
-	}
-
 	public void setId(Integer id){
 		this.id=id;
 	}

+ 10 - 10
src/main/java/com/izouma/awesomeadmin/service/DepartInfoService.java

@@ -9,25 +9,25 @@ import com.izouma.awesomeadmin.model.DepartInfo;
 /**
  * depart_info service接口类
  * Thu Apr 26 10:56:37 CST 2018  Suo Chen Cheng
- */ 
+ */
 public interface DepartInfoService {
 
-	List <DepartInfo> getDepartInfoList(DepartInfo record);
+    List<DepartInfo> getDepartInfoList(DepartInfo record);
 
-	List <DepartInfo> getDepartInfoByPage(Page page, DepartInfo record);
+    List<DepartInfo> getDepartInfoByPage(Page page, DepartInfo record);
 
-	DepartInfo getDepartInfoById(String id);
+    DepartInfo getDepartInfoById(String id);
 
-	DepartInfo getDepartInfo(DepartInfo record);
+    DepartInfo getDepartInfo(DepartInfo record);
 
-	boolean createDepartInfo(DepartInfo record);
+    boolean createDepartInfo(DepartInfo record);
 
-	boolean deleteDepartInfo(String id);
+    boolean deleteDepartInfo(String id);
 
-	boolean updateDepartInfo(DepartInfo record);
+    boolean updateDepartInfo(DepartInfo record);
 
-	List <DepartInfo> getParentList(Integer id);
+    List<DepartInfo> getParentList(Integer id);
 
-	List<TreeNode> getDepartTree(boolean all, Integer userId);
+    List<TreeNode> getDepartTree(boolean all, Integer userId);
 }
 

+ 4 - 0
src/main/java/com/izouma/awesomeadmin/service/SysMenuService.java

@@ -27,6 +27,10 @@ public interface SysMenuService {
 
     boolean updateSysMenu(SysMenu record);
 
+    List<SysMenu> getMenuTree();
+
+    List<SysMenu> getMenuTree(Integer userId);
+
     List<TreeNode> getMenuTree(boolean all, Integer userId);
 
 }

+ 16 - 10
src/main/java/com/izouma/awesomeadmin/service/SysRoleService.java

@@ -1,7 +1,6 @@
 package com.izouma.awesomeadmin.service;
 
 
-
 import com.izouma.awesomeadmin.dto.Page;
 import com.izouma.awesomeadmin.model.SysRole;
 
@@ -10,24 +9,31 @@ import java.util.List;
 /**
  * sys_role service接口类
  * Tue Apr 10 18:09:56 CST 2018  Suo Chen Cheng
- */ 
+ */
 public interface SysRoleService {
 
-	List<SysRole> getSysRoleList(SysRole record);
+    List<SysRole> getSysRoleList(SysRole record);
+
+    List<SysRole> getSysRoleByPage(Page page, SysRole record);
+
+    SysRole getSysRoleById(String id);
+
+    List<SysRole> getSysRoleByIds(String ids);
 
-	List<SysRole> getSysRoleByPage(Page page, SysRole record);
+    SysRole getSysRole(SysRole record);
 
-	SysRole getSysRoleById(String id);
+    boolean createSysRole(SysRole record);
 
-	List<SysRole> getSysRoleByIds(String ids);
+    boolean deleteSysRole(String id);
 
-	SysRole getSysRole(SysRole record);
+    boolean updateSysRole(SysRole record);
 
-	boolean createSysRole(SysRole record);
+    List<SysRole> getUserRoles(Integer userId);
 
-	boolean deleteSysRole(String id);
+    boolean setUserRoles(Integer userId, String roles);
 
-	boolean updateSysRole(SysRole record);
+    boolean addUserRole(Integer userId, Integer roleId);
 
+    boolean removeUserRole(Integer userId, Integer roleId);
 }
 

+ 90 - 7
src/main/java/com/izouma/awesomeadmin/service/impl/SysMenuServiceImpl.java

@@ -9,14 +9,17 @@ import com.izouma.awesomeadmin.model.SysMenu;
 import com.izouma.awesomeadmin.model.SysRole;
 import com.izouma.awesomeadmin.model.UserInfo;
 import com.izouma.awesomeadmin.service.SysMenuService;
+import com.izouma.awesomeadmin.service.SysRoleService;
 import com.izouma.awesomeadmin.service.UserInfoService;
 import com.izouma.awesomeadmin.util.TreeUtils;
+import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang.StringUtils;
 import org.apache.log4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * sys_menu service接口实现类
@@ -31,6 +34,8 @@ public class SysMenuServiceImpl implements SysMenuService {
     private SysMenuMapper   sysMenuMapper;
     @Autowired
     private UserInfoService userInfoService;
+    @Autowired
+    private SysRoleService  sysRoleService;
 
     @Override
     public List<SysMenu> getSysMenuList(SysMenu record) {
@@ -146,6 +151,69 @@ public class SysMenuServiceImpl implements SysMenuService {
         return false;
     }
 
+    @Override
+    public List<SysMenu> getMenuTree() {
+        logger.info("getMenuTree");
+        try {
+            List<SysMenu> allMenus = getSysMenuList(new SysMenu());
+            List<SysMenu> tree = new ArrayList<>();
+            makeTree(allMenus, tree);
+            return tree;
+        } catch (Exception e) {
+            logger.error("getMenuTree", e);
+        }
+        return null;
+    }
+
+    @Override
+    public List<SysMenu> getMenuTree(Integer userId) {
+        logger.info("getMenuTree");
+        try {
+            List<SysMenu> nodes = new ArrayList<>();
+            List<SysMenu> entireTree = getMenuTree();
+            List<String> menuIds = new ArrayList<>();
+            for (SysRole role : sysRoleService.getUserRoles(userId)) {
+                if (StringUtils.isNotEmpty(role.getMenuIds())) {
+                    menuIds.addAll(Arrays.asList(role.getMenuIds().split(",")));
+                }
+            }
+            removeDuplicate(menuIds);
+            for (String id : menuIds) {
+                List<SysMenu> list;
+                list = getParents(new ArrayList<>(), entireTree, Integer.valueOf(id));
+                list = list == null ? new ArrayList<>() : list;
+                nodes.addAll(list);
+            }
+            nodes = nodes.stream().distinct().collect(Collectors.toList());
+            List<SysMenu> tree = new ArrayList<>();
+            makeTree(nodes, tree);
+            return tree;
+        } catch (Exception e) {
+            logger.error("getMenuTree", e);
+        }
+        return null;
+    }
+
+    private void makeTree(List<SysMenu> nodes, List<SysMenu> tree) {
+        for (SysMenu menu : nodes) {
+            if (menu.getParentId() == 0) {
+                tree.add(menu);
+            }
+            for (SysMenu node : nodes) {
+                if (node.getParentId().equals(menu.getId())) {
+                    if (menu.getChildren() == null) {
+                        menu.setChildren(new ArrayList<>());
+                    }
+                    menu.getChildren().add(node);
+                }
+            }
+            if (menu.getChildren() != null) {
+                menu.getChildren().sort(Comparator.comparingInt(o -> o.getSort().intValue()));
+            }
+        }
+        tree.sort(Comparator.comparingInt(o -> o.getSort().intValue()));
+    }
+
     @Override
     public List<TreeNode> getMenuTree(boolean all, Integer userId) {
 
@@ -156,18 +224,13 @@ public class SysMenuServiceImpl implements SysMenuService {
                 pp = getSysMenuList(new SysMenu());
             } else {
                 List<String> menuIds = new ArrayList<>();
-                UserInfo userInfo = userInfoService.getUserInfoById(String.valueOf(userId));
-                for (SysRole role : userInfo.getRoleInfoList()) {
+                for (SysRole role : sysRoleService.getUserRoles(userId)) {
                     if (StringUtils.isNotEmpty(role.getMenuIds())) {
                         menuIds.addAll(Arrays.asList(role.getMenuIds().split(",")));
                     }
                 }
                 removeDuplicate(menuIds);
-                StringBuilder sb = new StringBuilder();
-                for (String s : menuIds) {
-                    sb.append(s).append(",");
-                }
-                for (SysMenu menu : sysMenuMapper.selectByPrimaryKeys(sb.toString())) {
+                for (SysMenu menu : sysMenuMapper.selectByPrimaryKeys(StringUtils.join(menuIds, ","))) {
                     pp.addAll(getParents(menu));
                 }
                 List<SysMenu> list = new ArrayList<>();
@@ -214,5 +277,25 @@ public class SysMenuServiceImpl implements SysMenuService {
         return list;
     }
 
+    private List<SysMenu> getParents(List<SysMenu> parents, List<SysMenu> children, Integer id) {
+        for (SysMenu child : children) {
+            List<SysMenu> list = new ArrayList<>(parents);
+            if (child.getId().equals(id)) {
+                SysMenu copy = child.clone();
+                copy.setChildren(null);
+                list.add(copy);
+                return list;
+            } else if (child.getChildren() != null) {
+                SysMenu copy = child.clone();
+                copy.setChildren(null);
+                list.add(copy);
+                List<SysMenu> next = getParents(list, child.getChildren(), id);
+                if (next != null) {
+                    return next;
+                }
+            }
+        }
+        return null;
+    }
 }
 

+ 50 - 3
src/main/java/com/izouma/awesomeadmin/service/impl/SysRoleServiceImpl.java

@@ -10,9 +10,7 @@ import org.apache.log4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 /**
  * sys_role service接口实现类
@@ -153,5 +151,54 @@ public class SysRoleServiceImpl implements SysRoleService {
         return false;
     }
 
+    @Override
+    public List<SysRole> getUserRoles(Integer userId) {
+        logger.info("getUserRoles");
+        List<SysRole> roles = new ArrayList<>();
+        try {
+            roles = sysRoleMapper.getUserRoles(userId);
+            return roles;
+        } catch (Exception e) {
+            logger.error("getUserRoles", e);
+        }
+        return roles;
+    }
+
+    @Override
+    public boolean setUserRoles(Integer userId, String roles) {
+        logger.info("setUserRoles");
+        try {
+            sysRoleMapper.clearUserRoles(userId);
+            List<String> roleList = Arrays.asList(roles.split(","));
+            sysRoleMapper.setUserRoles(userId, roleList);
+            return true;
+        } catch (Exception e) {
+            logger.error("setUserRoles", e);
+        }
+        return false;
+    }
+
+    @Override
+    public boolean addUserRole(Integer userId, Integer roleId) {
+        logger.info("addUserRole");
+        try {
+            return sysRoleMapper.addUserRole(userId, roleId) > 0;
+        } catch (Exception e) {
+            logger.error("addUserRole", e);
+        }
+        return false;
+    }
+
+    @Override
+    public boolean removeUserRole(Integer userId, Integer roleId) {
+        logger.info("removeUserRole");
+        try {
+            return sysRoleMapper.removeUserRole(userId, roleId) > 0;
+        } catch (Exception e) {
+            logger.error("removeUserRole", e);
+        }
+        return false;
+    }
+
 }
 

+ 25 - 8
src/main/java/com/izouma/awesomeadmin/service/impl/UserInfoServiceImpl.java

@@ -1,10 +1,12 @@
 package com.izouma.awesomeadmin.service.impl;
 
+import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
 import com.izouma.awesomeadmin.constant.AppConstant;
+import com.izouma.awesomeadmin.dao.DepartInfoMapper;
 import com.izouma.awesomeadmin.dao.SysRoleMapper;
 import com.izouma.awesomeadmin.dto.Page;
 import com.izouma.awesomeadmin.model.SysRole;
@@ -33,9 +35,11 @@ public class UserInfoServiceImpl implements UserInfoService {
 
 
     @Autowired
-    private UserInfoMapper userInfoMapper;
+    private UserInfoMapper   userInfoMapper;
     @Autowired
-    private SysRoleMapper  sysRoleMapper;
+    private SysRoleMapper    sysRoleMapper;
+    @Autowired
+    private DepartInfoMapper departInfoMapper;
 
     @Override
     public List<UserInfo> getUserInfoList(UserInfo record) {
@@ -107,9 +111,7 @@ public class UserInfoServiceImpl implements UserInfoService {
             }
             int updates = userInfoMapper.insertSelective(record);
 
-            if (updates > 0) {
-                return true;
-            }
+            if (updateUserRolesAndDeparts(record, updates)) return true;
         } catch (Exception e) {
             logger.error("createUserInfo", e);
         }
@@ -117,6 +119,21 @@ public class UserInfoServiceImpl implements UserInfoService {
         return false;
     }
 
+    private boolean updateUserRolesAndDeparts(UserInfo record, int updates) {
+        if (updates > 0) {
+            if (record.getDepartId() != null) {
+                departInfoMapper.clearUserDeparts(record.getId());
+                departInfoMapper.setUserDeparts(record.getId(), Arrays.asList(record.getDepartId().split(",")));
+            }
+            if (record.getRoleId() != null) {
+                sysRoleMapper.clearUserRoles(record.getId());
+                sysRoleMapper.setUserRoles(record.getId(), Arrays.asList(record.getRoleId().split(",")));
+            }
+            return true;
+        }
+        return false;
+    }
+
     @Override
     public boolean deleteUserInfo(String id) {
 
@@ -124,6 +141,8 @@ public class UserInfoServiceImpl implements UserInfoService {
         try {
 
             int updates = userInfoMapper.delete(id);
+            departInfoMapper.clearUserDeparts(Integer.valueOf(id));
+            sysRoleMapper.clearUserRoles(Integer.valueOf(id));
 
             if (updates > 0) {
                 return true;
@@ -143,9 +162,7 @@ public class UserInfoServiceImpl implements UserInfoService {
 
             int updates = userInfoMapper.updateByPrimaryKeySelective(record);
 
-            if (updates > 0) {
-                return true;
-            }
+            if (updateUserRolesAndDeparts(record, updates)) return true;
         } catch (Exception e) {
             logger.error("updateUserInfo", e);
         }

+ 1 - 1
src/main/java/com/izouma/awesomeadmin/shiro/BaseRealm.java

@@ -31,7 +31,7 @@ public abstract class BaseRealm extends AuthorizingRealm {
         try {
             UserInfo userInfo = (UserInfo) principalCollection.getPrimaryPrincipal();
             //获取角色数据权限授权
-            List<SysRole> sysRoles = sysRoleService.getSysRoleByIds(userInfo.getRoleId());
+            List<SysRole> sysRoles = sysRoleService.getUserRoles(userInfo.getId());
             for (SysRole sysRole : sysRoles) {
                 info.addRole(sysRole.getEnname());
                 if (StringUtils.isNotEmpty(sysRole.getPermission())) {

+ 2 - 2
src/main/java/com/izouma/awesomeadmin/web/SysMenuController.java

@@ -124,7 +124,7 @@ public class SysMenuController extends BaseController {
     @RequestMapping(value = "/menuTree", method = RequestMethod.GET)
     @ResponseBody
     public Result menuTree() {
-        List<TreeNode> trees = sysMenuService.getMenuTree(true, null);
+        List<SysMenu> trees = sysMenuService.getMenuTree();
         if (trees != null) {
             return new Result(true, trees);
         }
@@ -134,7 +134,7 @@ public class SysMenuController extends BaseController {
     @RequestMapping(value = "/userMenuTree", method = RequestMethod.GET)
     @ResponseBody
     public Result userMenuTree(@RequestParam("userId") Integer userId) {
-        List<TreeNode> trees = sysMenuService.getMenuTree(false, userId);
+        List<SysMenu> trees = sysMenuService.getMenuTree(userId);
         if (trees != null) {
             return new Result(true, trees);
         }

+ 10 - 0
src/main/java/com/izouma/awesomeadmin/web/activiti/ProcessController.java

@@ -84,4 +84,14 @@ public class ProcessController extends BaseController {
         }
         return new Result(false, "删除失败");
     }
+
+    @RequestMapping(value = "/getStartForm")
+    @ResponseBody
+    public Result getStartForm(@RequestParam("processDefinitionId") String processDefinitionId) {
+
+        // 根据流程定义ID读取外置表单
+        Object startForm = formService.getRenderedStartForm(processDefinitionId);
+
+        return new Result(true, startForm);
+    }
 }

+ 2 - 2
src/main/resources/spring/appDataSource.xml

@@ -48,12 +48,12 @@
         <property name="targetDataSources">
             <map key-type="java.lang.String">
                 <!-- 指定lookupKey和与之对应的数据源 -->
-                <entry key="dataSource" value-ref="dataSource"></entry>
+                <entry key="dataSource" value-ref="dataSource"/>
             </map>
         </property>
         <!-- 这里可以指定默认的数据源 -->
         <property name="defaultTargetDataSource" ref="dataSource"/>
-        <property name="masterDataSource"  ref="dataSource"></property>
+        <property name="masterDataSource"  ref="dataSource"/>
     </bean>
 
 

+ 2 - 105
src/main/resources/spring/applicationContext.xml

@@ -22,110 +22,7 @@
 
     <import resource="classpath:spring/appDataSource.xml"/>
     <import resource="classpath:spring/appWebService.xml"/>
+    <import resource="classpath:spring/beans-shiro.xml"/>
+    <import resource="classpath:spring/beans-activiti.xml"/>
 
-    <!-- 配置一个shiro框架的过滤器工厂bean,用于创建shiro框架的过滤器 -->
-    <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
-        <property name="securityManager" ref="securityManager"/>
-        <property name="filters">
-            <util:map>
-                <entry key="shiroCrossFilter" value-ref="shiroCrossFilter"/>
-            </util:map>
-        </property>
-        <property name="loginUrl" value="/#/login"/>
-        <property name="unauthorizedUrl" value="/unauthorized.jsp"/>
-    </bean>
-
-    <bean id="shiroCrossFilter" class="com.izouma.awesomeadmin.shiro.ShiroCrossFilter"/>
-
-    <!-- 注册安全管理器 -->
-    <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
-        <!-- 注入realm到安全管理器进行密码匹配 -->
-        <property name="authenticator" ref="modularRealmAuthenticator"/>
-        <property name="realms">
-            <list>
-                <ref bean="phoneCodeRealm"/>
-                <ref bean="userPasswordRealm"/>
-            </list>
-        </property>
-    </bean>
-
-    <bean id="modularRealmAuthenticator" class="com.izouma.awesomeadmin.shiro.MyModularRealmAuthenticator">
-        <property name="authenticationStrategy">
-            <!-- 认证策略 -->
-            <bean class="org.apache.shiro.authc.pam.FirstSuccessfulStrategy"/>
-        </property>
-        <property name="realms">
-            <list>
-                <ref bean="phoneCodeRealm"/>
-                <ref bean="userPasswordRealm"/>
-            </list>
-        </property>
-    </bean>
-
-    <!-- 自定义的realm -->
-    <bean id="phoneCodeRealm" class="com.izouma.awesomeadmin.shiro.PhoneCodeRealm">
-        <property name="authenticationTokenClass" value="com.izouma.awesomeadmin.shiro.PhoneCodeToken"/>
-    </bean>
-    <bean id="userPasswordRealm" class="com.izouma.awesomeadmin.shiro.UserPasswordRealm">
-        <property name="authenticationTokenClass" value="org.apache.shiro.authc.UsernamePasswordToken"/>
-    </bean>
-
-    <!--ACTIVITI-->
-    <context:component-scan base-package="org.activiti.conf,org.activiti.rest.editor,org.activiti.rest.service">
-        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
-    </context:component-scan>
-
-    <!-- 单例json对象 -->
-    <bean id="objectMapper" class="com.fasterxml.jackson.databind.ObjectMapper"/>
-
-    <!-- 引擎内部提供的UUID生成器,依赖fastxml的java-uuid-generator模块 -->
-    <bean id="uuidGenerator" class="org.activiti.engine.impl.persistence.StrongUuidGenerator"/>
-
-    <!-- Activiti begin -->
-    <bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration">
-        <property name="dataSource" ref="dataSource"/>
-        <property name="transactionManager" ref="transactionManager"/>
-        <property name="databaseSchemaUpdate" value="true"/>
-        <property name="jobExecutorActivate" value="true"/>
-        <property name="customSessionFactories">
-            <list>
-                <bean class="com.izouma.awesomeadmin.activiti.CustomUserEntityManagerFactory">
-                    <property name="customUserEntityManager" ref="customUserEntityManager">
-                    </property>
-                </bean>
-                <bean class="com.izouma.awesomeadmin.activiti.CustomGroupEntityManagerFactory">
-                    <property name="customGroupEntityManager" ref="customGroupEntityManager">
-                    </property>
-                </bean>
-            </list>
-        </property>
-        <property name="beans">
-            <map>
-                <entry key="userService" value-ref="userInfoService"/>
-            </map>
-        </property>
-    </bean>
-
-    <bean id="customUserEntityManager" class="com.izouma.awesomeadmin.activiti.CustomUserEntityManager">
-    </bean>
-    <bean id="customGroupEntityManager" class="com.izouma.awesomeadmin.activiti.CustomGroupEntityManager">
-    </bean>
-    <bean id="userInfoService" class="com.izouma.awesomeadmin.service.impl.UserInfoServiceImpl">
-    </bean>
-
-    <bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean">
-        <property name="processEngineConfiguration" ref="processEngineConfiguration"/>
-    </bean>
-    <!-- 7大接口 -->
-    <bean id="repositoryService" factory-bean="processEngine" factory-method="getRepositoryService"/>
-    <bean id="runtimeService" factory-bean="processEngine" factory-method="getRuntimeService"/>
-    <bean id="formService" factory-bean="processEngine" factory-method="getFormService"/>
-    <bean id="identityService" factory-bean="processEngine" factory-method="getIdentityService"/>
-    <bean id="taskService" factory-bean="processEngine" factory-method="getTaskService"/>
-    <bean id="historyService" factory-bean="processEngine" factory-method="getHistoryService"/>
-    <bean id="managementService" factory-bean="processEngine" factory-method="getManagementService"/>
-
-    <!-- 集成REST服务需要的bean -->
-    <bean id="restResponseFactory" class="org.activiti.rest.service.api.RestResponseFactory"/>
-    <bean id="contentTypeResolver" class="org.activiti.rest.common.application.DefaultContentTypeResolver"/>
 </beans>

+ 76 - 0
src/main/resources/spring/beans-activiti.xml

@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xmlns:context="http://www.springframework.org/schema/context"
+       xsi:schemaLocation="http://www.springframework.org/schema/beans
+       http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
+       http://www.springframework.org/schema/tx
+       http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
+       http://www.springframework.org/schema/context
+       http://www.springframework.org/schema/context/spring-context-4.0.xsd
+       http://www.springframework.org/schema/aop
+       http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
+       http://www.springframework.org/schema/task
+       http://www.springframework.org/schema/task/spring-task-4.0.xsd
+       http://www.springframework.org/schema/util
+       http://www.springframework.org/schema/util/spring-util.xsd">
+
+    <!--ACTIVITI-->
+    <context:component-scan base-package="org.activiti.conf,org.activiti.rest.editor,org.activiti.rest.service">
+        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
+    </context:component-scan>
+
+    <!-- 单例json对象 -->
+    <bean id="objectMapper" class="com.fasterxml.jackson.databind.ObjectMapper"/>
+
+    <!-- 引擎内部提供的UUID生成器,依赖fastxml的java-uuid-generator模块 -->
+    <bean id="uuidGenerator" class="org.activiti.engine.impl.persistence.StrongUuidGenerator"/>
+
+    <!-- Activiti begin -->
+    <bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration">
+        <property name="dataSource" ref="dataSource"/>
+        <property name="transactionManager" ref="transactionManager"/>
+        <property name="databaseSchemaUpdate" value="true"/>
+        <property name="jobExecutorActivate" value="true"/>
+        <property name="customSessionFactories">
+            <list>
+                <bean class="com.izouma.awesomeadmin.activiti.CustomUserEntityManagerFactory">
+                    <property name="customUserEntityManager" ref="customUserEntityManager">
+                    </property>
+                </bean>
+                <bean class="com.izouma.awesomeadmin.activiti.CustomGroupEntityManagerFactory">
+                    <property name="customGroupEntityManager" ref="customGroupEntityManager">
+                    </property>
+                </bean>
+            </list>
+        </property>
+        <property name="beans">
+            <map>
+                <entry key="userService" value-ref="userInfoService"/>
+            </map>
+        </property>
+    </bean>
+
+    <bean id="customUserEntityManager" class="com.izouma.awesomeadmin.activiti.CustomUserEntityManager">
+    </bean>
+    <bean id="customGroupEntityManager" class="com.izouma.awesomeadmin.activiti.CustomGroupEntityManager">
+    </bean>
+    <bean id="userInfoService" class="com.izouma.awesomeadmin.service.impl.UserInfoServiceImpl">
+    </bean>
+
+    <bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean">
+        <property name="processEngineConfiguration" ref="processEngineConfiguration"/>
+    </bean>
+    <!-- 7大接口 -->
+    <bean id="repositoryService" factory-bean="processEngine" factory-method="getRepositoryService"/>
+    <bean id="runtimeService" factory-bean="processEngine" factory-method="getRuntimeService"/>
+    <bean id="formService" factory-bean="processEngine" factory-method="getFormService"/>
+    <bean id="identityService" factory-bean="processEngine" factory-method="getIdentityService"/>
+    <bean id="taskService" factory-bean="processEngine" factory-method="getTaskService"/>
+    <bean id="historyService" factory-bean="processEngine" factory-method="getHistoryService"/>
+    <bean id="managementService" factory-bean="processEngine" factory-method="getManagementService"/>
+
+    <!-- 集成REST服务需要的bean -->
+    <bean id="restResponseFactory" class="org.activiti.rest.service.api.RestResponseFactory"/>
+    <bean id="contentTypeResolver" class="org.activiti.rest.common.application.DefaultContentTypeResolver"/>
+</beans>

+ 51 - 0
src/main/resources/spring/beans-shiro.xml

@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util"
+       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">
+    <!-- 配置一个shiro框架的过滤器工厂bean,用于创建shiro框架的过滤器 -->
+    <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
+        <property name="securityManager" ref="securityManager"/>
+        <property name="filters">
+            <util:map>
+                <entry key="shiroCrossFilter" value-ref="shiroCrossFilter"/>
+            </util:map>
+        </property>
+        <property name="loginUrl" value="/#/login"/>
+        <property name="unauthorizedUrl" value="/unauthorized.jsp"/>
+    </bean>
+
+    <bean id="shiroCrossFilter" class="com.izouma.awesomeadmin.shiro.ShiroCrossFilter"/>
+
+    <!-- 注册安全管理器 -->
+    <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
+        <!-- 注入realm到安全管理器进行密码匹配 -->
+        <property name="authenticator" ref="modularRealmAuthenticator"/>
+        <property name="realms">
+            <list>
+                <ref bean="phoneCodeRealm"/>
+                <ref bean="userPasswordRealm"/>
+            </list>
+        </property>
+    </bean>
+
+    <bean id="modularRealmAuthenticator" class="com.izouma.awesomeadmin.shiro.MyModularRealmAuthenticator">
+        <property name="authenticationStrategy">
+            <!-- 认证策略 -->
+            <bean class="org.apache.shiro.authc.pam.FirstSuccessfulStrategy"/>
+        </property>
+        <property name="realms">
+            <list>
+                <ref bean="phoneCodeRealm"/>
+                <ref bean="userPasswordRealm"/>
+            </list>
+        </property>
+    </bean>
+
+    <!-- 自定义的realm -->
+    <bean id="phoneCodeRealm" class="com.izouma.awesomeadmin.shiro.PhoneCodeRealm">
+        <property name="authenticationTokenClass" value="com.izouma.awesomeadmin.shiro.PhoneCodeToken"/>
+    </bean>
+    <bean id="userPasswordRealm" class="com.izouma.awesomeadmin.shiro.UserPasswordRealm">
+        <property name="authenticationTokenClass" value="org.apache.shiro.authc.UsernamePasswordToken"/>
+    </bean>
+</beans>

+ 0 - 0
src/main/resources/spring/appWebServlet.xml → src/main/resources/spring/spring-mvc.xml


Plik diff jest za duży
+ 250 - 250
src/main/vue/package-lock.json


+ 5 - 5
src/main/vue/src/components/SysMenu.vue

@@ -1,11 +1,11 @@
 <template>
-    <el-menu-item v-if="isLeaf" :index="menu.id" :route="{path:menu.extra.href}">
-        <i class="fa-fw" :class="menu.extra.icon" v-if="menu.extra.icon"></i><span slot="title">{{menu.label}}</span>
+    <el-menu-item v-if="isLeaf" :index="''+menu.id" :route="{path:menu.href}">
+        <i class="fa-fw" :class="menu.icon" v-if="menu.icon"></i><span slot="title">{{menu.name}}</span>
     </el-menu-item>
-    <el-submenu v-else :index="menu.id">
+    <el-submenu v-else :index="''+menu.id">
         <template slot="title">
-            <i class="fa-fw" :class="menu.extra.icon" v-if="menu.extra.icon"></i>
-            <span slot="title">{{menu.label}}</span>
+            <i class="fa-fw" :class="menu.icon" v-if="menu.icon"></i>
+            <span slot="title">{{menu.name}}</span>
         </template>
         <sys-menu v-for="item in menu.children" :menu="item" :key="item.id"></sys-menu>
     </el-submenu>

+ 3 - 20
src/main/vue/src/pages/App.vue

@@ -85,10 +85,10 @@
                 const findActiveMenu = (parents, childMenus) => {
                     childMenus.forEach(i => {
                         let parents_copy = [...parents];
-                        if (i.extra.href === path) {
+                        if (i.href === path) {
                             parents_copy.push(i);
                             this.menuPath = parents_copy.map(i => i.name);
-                            this.activeMenu = i.id;
+                            this.activeMenu = '' + i.id;
                         } else {
                             if (i.children) {
                                 parents_copy.push(i);
@@ -107,25 +107,8 @@
                     }
                 }).then(res => {
                     if (res.success) {
-                        const parse = trees => {
-                            trees.sort((a, b) => {
-                                return a.extra.sort - b.extra.sort;
-                            });
-                            return trees.map(i => {
-                                let t = {
-                                    id: i.id,
-                                    label: i.name,
-                                    parentId: i.parentId,
-                                    extra: i.extra
-                                };
-                                if (i.children instanceof Array) {
-                                    t.children = parse(i.children);
-                                }
-                                return t;
-                            });
-                        };
                         this.rawMenus = res.data;
-                        this.menus = parse(res.data);
+                        this.menus = res.data;
                         this.findActiveMenu();
                     }
                 })

+ 23 - 40
src/main/vue/src/pages/Menus.vue

@@ -5,7 +5,7 @@
             :data="menus"
             :render-content="renderContent"
             :highlight-current="true"
-            :expand-on-click-node="false"
+            :expand-on-click-node="true"
             node-key="id"
             default-expand-all>
         </el-tree>
@@ -64,7 +64,7 @@
                 };
                 this.icon = 'bars';
                 if (this.menus && this.menus.length > 0) {
-                    this.menu.sort = this.menus[this.menus.length - 1].extra.sort + 1;
+                    this.menu.sort = this.menus[this.menus.length - 1].sort + 1;
                 } else {
                     this.menu.sort = 1;
                 }
@@ -75,19 +75,19 @@
             },
             showAddDialog(node, data) {
                 this.menu = {
-                    parentId: node.data.extra.id,
+                    parentId: node.data.id,
                     name: '',
                     href: '',
                     icon: null
                 };
                 this.icon = '';
                 if (node.childNodes && node.childNodes.length > 0) {
-                    this.menu.sort = node.childNodes[node.childNodes.length - 1].data.extra.sort + 1;
+                    this.menu.sort = node.childNodes[node.childNodes.length - 1].data.sort + 1;
                 } else {
                     this.menu.sort = 1;
                 }
                 this.dialogVisible = true;
-                setTimeout(()=>{
+                setTimeout(() => {
                     this.showIcon('');
                 }, 100)
             },
@@ -99,16 +99,16 @@
                     }
                     return iconName || null;
                 }
-                let iconName = getIconName(data.extra.icon);
+                let iconName = getIconName(data.icon);
                 this.menu = {
-                    id: data.extra.id,
-                    name: data.extra.name,
-                    href: data.extra.href,
+                    id: data.id,
+                    name: data.name,
+                    href: data.href,
                     icon: iconName
                 };
                 this.icon = iconName;
                 this.dialogVisible = true;
-                setTimeout(()=>{
+                setTimeout(() => {
                     this.showIcon(iconName);
                 }, 100)
             },
@@ -167,10 +167,10 @@
                 if (node.previousSibling) {
                     axios.all([axios.post(this.$baseUrl + '/sysMenu/update', formData({
                         id: node.data.id,
-                        sort: node.previousSibling.data.extra.sort
+                        sort: node.previousSibling.data.sort
                     })), axios.post(this.$baseUrl + '/sysMenu/update', formData({
                         id: node.previousSibling.data.id,
-                        sort: node.data.extra.sort
+                        sort: node.data.sort
                     }))]).then(axios.spread((acct, perms) => {
                         this.getData();
                     }));
@@ -189,10 +189,10 @@
                 if (node.nextSibling) {
                     axios.all([axios.post(this.$baseUrl + '/sysMenu/update', formData({
                         id: node.data.id,
-                        sort: node.nextSibling.data.extra.sort
+                        sort: node.nextSibling.data.sort
                     })), axios.post(this.$baseUrl + '/sysMenu/update', formData({
                         id: node.nextSibling.data.id,
-                        sort: node.data.extra.sort
+                        sort: node.data.sort
                     }))]).then(axios.spread((acct, perms) => {
                         this.getData();
                     }));
@@ -203,38 +203,21 @@
                     url: '/sysMenu/menuTree'
                 }).then(res => {
                     if (res.success) {
-                        const parse = (trees) => {
-                            trees.sort((a, b) => {
-                                return a.extra.sort - b.extra.sort;
-                            });
-                            return trees.map(i => {
-                                let t = {
-                                    id: i.id,
-                                    label: i.name,
-                                    parentId: i.parentId,
-                                    extra: i.extra
-                                };
-                                if (i.children instanceof Array) {
-                                    t.children = parse(i.children);
-                                }
-                                return t;
-                            });
-                        };
-                        this.menus = parse(res.data);
+                        this.menus = res.data
                     }
                 })
             },
-            renderContent(h, { node, data, store }) {
+            renderContent(h, {node, data, store}) {
                 return (
                     <span class="custom-tree-node">
-                        <span>{node.label}</span>
-                        <span class="url">{data.extra.href}</span>
+                        <span>{data.name}</span>
+                        <span class="url">{data.href}</span>
                         <span class="opt">
-                            <el-button size="mini" type="text" on-click={ () => this.moveUp(node, data) } class="up">上移</el-button>
-                            <el-button size="mini" type="text" on-click={ () => this.moveDown(node, data) }>下移</el-button>
-                            <el-button size="mini" type="text" on-click={ () => this.showEditDialog(node, data) }>编辑</el-button>
-                            <el-button size="mini" type="text" on-click={ () => this.showAddDialog(node, data) }>添加</el-button>
-                            <el-button size="mini" type="text" on-click={ () => this.remove(node, data) }>删除</el-button>
+                            <el-button size="mini" type="text" on-click={ (e) => {this.moveUp(node, data), e.stopPropagation()} } class="up">上移</el-button>
+                            <el-button size="mini" type="text" on-click={ (e) => {this.moveDown(node, data), e.stopPropagation()} }>下移</el-button>
+                            <el-button size="mini" type="text" on-click={ (e) => {this.showEditDialog(node, data), e.stopPropagation()} }>编辑</el-button>
+                            <el-button size="mini" type="text" on-click={ (e) => {this.showAddDialog(node, data), e.stopPropagation()} }>添加</el-button>
+                            <el-button size="mini" type="text" on-click={ (e) => {this.remove(node, data), e.stopPropagation()} }>删除</el-button>
                         </span>
                     </span>
                 );

+ 8 - 22
src/main/vue/src/pages/Role.vue

@@ -20,7 +20,9 @@
                     :data="menus"
                     :highlight-current="true"
                     :expand-on-click-node="false"
+                    :props="treeProps"
                     node-key="id"
+                    label="name"
                     show-checkbox
                     default-expand-all>
                 </el-tree>
@@ -50,9 +52,7 @@
                     }
                 }).then(res => {
                     if (res.success) {
-                        if (res.data.permission) {
-                            res.data.permission = res.data.permission.split(',');
-                        }
+                        res.data.permission = res.data.permission ? res.data.permission.split(',') : [];
                         if (res.data.menuIds) {
                             this.$refs.menuTree.setCheckedKeys(res.data.menuIds.split(','));
                         }
@@ -75,6 +75,9 @@
                         {required: true, message: '请填写英文名', trigger: 'blur'},
                     ]
                 },
+                treeProps: {
+                    label: 'name'
+                },
                 menus: [],
                 permissions: []
             }
@@ -85,24 +88,7 @@
                     url: '/sysMenu/menuTree'
                 }).then(res => {
                     if (res.success) {
-                        const parse = trees => {
-                            trees.sort((a, b) => {
-                                return a.extra.sort - b.extra.sort;
-                            });
-                            return trees.map(i => {
-                                let t = {
-                                    id: i.id,
-                                    label: i.name,
-                                    parentId: i.parentId,
-                                    extra: i.extra
-                                };
-                                if (i.children instanceof Array) {
-                                    t.children = parse(i.children);
-                                }
-                                return t;
-                            });
-                        };
-                        this.menus = parse(res.data);
+                        this.menus = res.data;
                     }
                 })
             },
@@ -125,7 +111,7 @@
                 });
             },
             submit() {
-                this.formData.menuIds = this.$refs.menuTree.getCheckedKeys(true).join();
+                this.formData.menuIds = this.$refs.menuTree.getCheckedKeys(false).join();
                 this.$http.post({
                     url: this.formData.id ? '/sysRole/update' : '/sysRole/save',
                     data: this.formData

+ 1 - 1
src/main/webapp/WEB-INF/web.xml

@@ -66,7 +66,7 @@
         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
         <init-param>
             <param-name>contextConfigLocation</param-name>
-            <param-value>classpath:spring/appWebServlet.xml</param-value>
+            <param-value>classpath:spring/spring-mvc.xml</param-value>
         </init-param>
         <load-on-startup>1</load-on-startup>
     </servlet>

+ 2 - 2
src/test/java/UserServiceTest.java

@@ -16,11 +16,11 @@ public class UserServiceTest {
 
     @Test
     public void testFindDepartLeader() {
-        System.out.println(userInfoService.findDepartLeader("84666"));
+        System.out.println(userInfoService.findDepartLeader("84664"));
     }
 
     @Test
     public void testFindUserByRoleName() {
-        System.out.println(userInfoService.findUserByRoleName("hr"));
+        System.out.println(userInfoService.findUserByRoleName("departLeader"));
     }
 }

Niektóre pliki nie zostały wyświetlone z powodu dużej ilości zmienionych plików