Browse Source

role permissions

albertshaw 8 years ago
parent
commit
0c5df9ccd0
27 changed files with 843 additions and 61 deletions
  1. 7 0
      schema/2017-03-20.sql
  2. 17 1
      src/main/java/com/goafanti/admin/controller/AdminCopyrightApiController.java
  3. 2 2
      src/main/java/com/goafanti/common/constant/AFTConstants.java
  4. 1 1
      src/main/java/com/goafanti/common/controller/BaseController.java
  5. 11 0
      src/main/java/com/goafanti/common/dao/PermissionMapper.java
  6. 12 0
      src/main/java/com/goafanti/common/dao/RoleMapper.java
  7. 24 0
      src/main/java/com/goafanti/common/dao/RolePermissionMapper.java
  8. 20 0
      src/main/java/com/goafanti/common/dao/UserRoleMapper.java
  9. 28 0
      src/main/java/com/goafanti/common/mapper/RoleMapper.xml
  10. 36 0
      src/main/java/com/goafanti/common/mapper/RolePermissionMapper.xml
  11. 56 0
      src/main/java/com/goafanti/common/mapper/UserRoleMapper.xml
  12. 32 36
      src/main/java/com/goafanti/common/model/Permission.java
  13. 9 2
      src/main/java/com/goafanti/common/model/Role.java
  14. 32 0
      src/main/java/com/goafanti/common/model/RolePermission.java
  15. 32 0
      src/main/java/com/goafanti/common/model/UserRole.java
  16. 1 0
      src/main/java/com/goafanti/copyright/service/impl/CopyrightInfoServiceImpl.java
  17. 4 3
      src/main/java/com/goafanti/core/shiro/session/CustomSessionManager.java
  18. 3 3
      src/main/java/com/goafanti/core/shiro/token/TokenManager.java
  19. 21 13
      src/main/java/com/goafanti/core/shiro/token/UserRealm.java
  20. 22 0
      src/main/java/com/goafanti/permission/bo/RoleBo.java
  21. 84 0
      src/main/java/com/goafanti/permission/bo/RolePermissionBo.java
  22. 65 0
      src/main/java/com/goafanti/permission/controller/PermissionApiController.java
  23. 101 0
      src/main/java/com/goafanti/permission/controller/RoleApiController.java
  24. 18 0
      src/main/java/com/goafanti/permission/service/PermissionService.java
  25. 30 0
      src/main/java/com/goafanti/permission/service/RoleService.java
  26. 50 0
      src/main/java/com/goafanti/permission/service/impl/PermissionServiceImpl.java
  27. 125 0
      src/main/java/com/goafanti/permission/service/impl/RoleServiceImpl.java

+ 7 - 0
schema/2017-03-20.sql

@@ -0,0 +1,7 @@
+ALTER TABLE `role_permission` 
+ADD PRIMARY KEY (`rid`, `pid`);
+
+ALTER TABLE `role` 
+CHANGE COLUMN `role_type` `role_type` INT(6) NOT NULL DEFAULT 1 ;
+
+INSERT INTO `role` (`id`, `role_name`, `role_type`) VALUES ('1', '超级管理员', '999999');

+ 17 - 1
src/main/java/com/goafanti/admin/controller/AdminCopyrightApiController.java

@@ -1,5 +1,7 @@
 package com.goafanti.admin.controller;
 
+import java.util.Arrays;
+
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import javax.validation.Valid;
@@ -113,6 +115,20 @@ public class AdminCopyrightApiController extends CertifyApiController {
 		return res;
 	}
 
+	@RequestMapping(value = "/delete", method = RequestMethod.POST)
+	public Result delete(@RequestParam(name = "id[]", required = false) String[] ids) {
+		Result res = new Result();
+		if (!checkAdminLogin(res)) {
+			return res;
+		}
+		if (ids == null || ids.length < 1) {
+			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", ""));
+		} else {
+			copyrightInfoService.batchDeleteByPrimaryKey(Arrays.asList(ids));
+		}
+		return res;
+	}
+
 	@RequestMapping(value = "/list", method = RequestMethod.GET)
 	public Result list(String province, String unitName, String copyrightName, String status, String pageNo,
 			String pageSize, @RequestParam(name = "createTime[]", required = false) String[] createTime,
@@ -149,7 +165,7 @@ public class AdminCopyrightApiController extends CertifyApiController {
 				if (clazz != null && "java.util.Date".equals(clazz.getName())) {
 					res.getError()
 							.add(buildError(ErrorConstants.PARAM_PATTERN_ERROR, "日期格式错误",
-									CopyrightFields.getFieldDesc(fe.getField()), AFTConstants.DATE_FORMAT)
+									CopyrightFields.getFieldDesc(fe.getField()), AFTConstants.YYYYMMDDHHMMSS)
 											.buildField(fe.getField()));
 				} else {
 					res.getError()

+ 2 - 2
src/main/java/com/goafanti/common/constant/AFTConstants.java

@@ -1,8 +1,8 @@
 package com.goafanti.common.constant;
 
 public class AFTConstants {
-	public static final String	DATE_FORMAT					= "yyyy-MM-dd HH:mm:ss";
+	public static final String	YYYYMMDDHHMMSS	= "yyyy-MM-dd HH:mm:ss";
 
-	public static final String	YYYYMMDD					= "yyyy-MM-dd";
+	public static final String	YYYYMMDD		= "yyyy-MM-dd";
 
 }

+ 1 - 1
src/main/java/com/goafanti/common/controller/BaseController.java

@@ -84,7 +84,7 @@ public class BaseController {
 
 	@InitBinder
 	public void initBinder(WebDataBinder binder) {
-		DateFormat dateFormat = new SimpleDateFormat(AFTConstants.DATE_FORMAT);
+		DateFormat dateFormat = new SimpleDateFormat(AFTConstants.YYYYMMDDHHMMSS);
 		dateFormat.setLenient(true);
 		binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));
 	}

+ 11 - 0
src/main/java/com/goafanti/common/dao/PermissionMapper.java

@@ -1,5 +1,8 @@
 package com.goafanti.common.dao;
 
+import java.util.List;
+import java.util.Set;
+
 import com.goafanti.common.model.Permission;
 
 public interface PermissionMapper {
@@ -14,4 +17,12 @@ public interface PermissionMapper {
     int updateByPrimaryKeySelective(Permission record);
 
     int updateByPrimaryKey(Permission record);
+
+	int insertBatch(List<Permission> records);
+
+	Set<String> findPermissionByUserId(String userId);
+
+	List<Permission> findAll();
+
+	int deleteByPrimaryKeys(List<String> ids);
 }

+ 12 - 0
src/main/java/com/goafanti/common/dao/RoleMapper.java

@@ -1,6 +1,10 @@
 package com.goafanti.common.dao;
 
+import java.util.List;
+import java.util.Set;
+
 import com.goafanti.common.model.Role;
+import com.goafanti.permission.bo.RolePermissionBo;
 
 public interface RoleMapper {
     int deleteByPrimaryKey(String id);
@@ -14,4 +18,12 @@ public interface RoleMapper {
     int updateByPrimaryKeySelective(Role record);
 
     int updateByPrimaryKey(Role record);
+
+	Set<String> findRoleByUserId(String userId);
+
+	List<RolePermissionBo> findRolePermissions();
+
+	int insertBatch(List<Role> records);
+
+	int deleteByPrimaryKeys(List<String> records);
 }

+ 24 - 0
src/main/java/com/goafanti/common/dao/RolePermissionMapper.java

@@ -0,0 +1,24 @@
+package com.goafanti.common.dao;
+
+import java.util.List;
+import java.util.Map;
+
+import com.goafanti.common.model.RolePermission;
+
+public interface RolePermissionMapper {
+    int insert(RolePermission record);
+
+	void deleteByPermissionId(List<String> ids);
+
+	void deleteByRids(Map<String, Object> resultMap);
+
+	List<RolePermission> findRolePermissionByPid(String idx);
+
+	void deleteByRid(String roleId);
+
+	void deleteByRoleId(List<String> records);
+
+	int deleteByPrimaryKey(Map<String, Object> params);
+
+	int insertBatch(List<RolePermission> rps);
+}

+ 20 - 0
src/main/java/com/goafanti/common/dao/UserRoleMapper.java

@@ -0,0 +1,20 @@
+package com.goafanti.common.dao;
+
+import java.util.List;
+import java.util.Map;
+
+import com.goafanti.common.model.UserRole;
+
+public interface UserRoleMapper {
+	int insert(UserRole record);
+
+	int insertSelective(UserRole record);
+
+	List<String> findUserIdByRoleId(String roleId);
+
+	List<String> findUserIdByRoleIds(List<String> roleIds);
+
+	void deleteByRoleId(List<String> records);
+
+	int deleteByUserRole(Map<String, Object> params);
+}

+ 28 - 0
src/main/java/com/goafanti/common/mapper/RoleMapper.xml

@@ -68,4 +68,32 @@
       role_type = #{roleType,jdbcType=INTEGER}
     where id = #{id,jdbcType=VARCHAR}
   </update>
+  <insert id="insertBatch" parameterType="com.goafanti.common.model.Role">
+    insert into role (id, name)
+    values 
+    <foreach item="item" index="index" collection="list" separator=",">
+      (#{item.id,jdbcType=VARCHAR}, #{item.name,jdbcType=VARCHAR})
+    </foreach>
+    ON DUPLICATE KEY UPDATE
+	    name = values(name)
+  </insert>
+  <select id="findRolePermissions" resultType="com.goafanti.permission.bo.RolePermissionBo">
+    select tr.id as rid, tr.name as rname, tr.type,tp.id as pid,tp.name as pname,tp.url
+    from role tr
+    left join role_permission trp on trp.rid=tr.id
+    left join permission tp on tp.id=trp.pid
+    where tr.type <![CDATA[ < ]]> 999999
+  </select>
+  <select id="findRoleByUserId" resultType="java.lang.String">
+    select tr.type from role tr
+    left join user_role tur on tur.rid=tr.id
+    where tur.uid = #{userId,jdbcType=VARCHAR}
+  </select>
+  <delete id="deleteByPrimaryKeys" parameterType="java.lang.String">
+    delete from role
+    where id in 
+    <foreach item="item" index="index" collection="list" open="(" separator="," close=")">  
+	  #{item,jdbcType=VARCHAR}  
+    </foreach>
+  </delete>
 </mapper>

+ 36 - 0
src/main/java/com/goafanti/common/mapper/RolePermissionMapper.xml

@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.goafanti.common.dao.RolePermissionMapper">
+  <resultMap id="BaseResultMap" type="com.goafanti.common.model.RolePermission">
+    <result column="rid" jdbcType="VARCHAR" property="rid" />
+    <result column="pid" jdbcType="VARCHAR" property="pid" />
+  </resultMap>
+  <insert id="insert" parameterType="com.goafanti.common.model.RolePermission">
+    insert into role_permission (rid, pid)
+    values (#{rid,jdbcType=VARCHAR}, #{pid,jdbcType=VARCHAR})
+    ON DUPLICATE KEY UPDATE
+    pid = values(pid)
+  </insert>
+  <delete id="deleteByPermissionId" parameterType="java.lang.String">
+    delete from role_permission
+    where pid in 
+    <foreach item="item" index="index" collection="list" open="(" separator="," close=")">  
+	  #{item,jdbcType=VARCHAR}  
+    </foreach>
+  </delete>
+  <delete id="deleteByRoleId" parameterType="java.lang.String">
+    delete from role_permission
+    where rid in 
+    <foreach item="item" index="index" collection="list" open="(" separator="," close=")">  
+	  #{item,jdbcType=VARCHAR}  
+    </foreach>
+  </delete>
+  <delete id="deleteByRid" parameterType="java.lang.String">
+    delete from role_permission
+    where rid = #{roleId, jdbcType=VARCHAR}
+  </delete>
+  <delete id="deleteByPrimaryKey">
+    delete from role_permission
+    where rid = #{rid,jdbcType=VARCHAR} and pid = #{pid,jdbcType=VARCHAR}
+  </delete>
+</mapper>

+ 56 - 0
src/main/java/com/goafanti/common/mapper/UserRoleMapper.xml

@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.goafanti.common.dao.UserRoleMapper">
+  <resultMap id="BaseResultMap" type="com.goafanti.common.model.UserRole">
+    <result column="uid" jdbcType="VARCHAR" property="uid" />
+    <result column="rid" jdbcType="VARCHAR" property="rid" />
+  </resultMap>
+  <insert id="insert" parameterType="com.goafanti.common.model.UserRole">
+    insert into user_role (uid, rid)
+    values (#{uid,jdbcType=VARCHAR}, #{rid,jdbcType=VARCHAR})
+  </insert>
+  <insert id="insertSelective" parameterType="com.goafanti.common.model.UserRole">
+    insert into user_role
+    <trim prefix="(" suffix=")" suffixOverrides=",">
+      <if test="uid != null">
+        uid,
+      </if>
+      <if test="rid != null">
+        rid,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides=",">
+      <if test="uid != null">
+        #{uid,jdbcType=VARCHAR},
+      </if>
+      <if test="rid != null">
+        #{rid,jdbcType=VARCHAR},
+      </if>
+    </trim>
+  </insert>
+  <delete id="deleteByRoleId" parameterType="java.lang.String">
+    delete from user_role
+    where rid in 
+    <foreach item="item" index="index" collection="list" open="(" separator="," close=")">  
+	  #{item,jdbcType=VARCHAR}  
+    </foreach>
+  </delete>
+  
+  <delete id="deleteByPrimaryKey">
+    delete from user_role
+    where rid = #{rid,jdbcType=VARCHAR} and uid = #{uid,jdbcType=VARCHAR}
+  </delete>
+  
+  <delete id="deleteByUserId" parameterType="java.lang.String">
+    delete from user_role
+    where uid = #{userId,jdbcType=VARCHAR}  
+  </delete>
+
+  <insert id="insertBatch">
+    insert into user_role (uid, rid)
+    values 
+    <foreach item="item" index="index" collection="roles" separator=",">
+      (#{uid,jdbcType=VARCHAR}, #{item,jdbcType=VARCHAR})
+    </foreach>
+  </insert>
+</mapper>

+ 32 - 36
src/main/java/com/goafanti/common/model/Permission.java

@@ -1,39 +1,35 @@
 package com.goafanti.common.model;
 
-public class Permission {
-    private String id;
-
-    /**
-    * 权限对应的url path
-    */
-    private String url;
-
-    /**
-    * 权限名字
-    */
-    private String name;
-
-    public String getId() {
-        return id;
-    }
-
-    public void setId(String id) {
-        this.id = id;
-    }
-
-    public String getUrl() {
-        return url;
-    }
-
-    public void setUrl(String url) {
-        this.url = url;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
+public class Permission extends BaseModel {
+
+	/**
+	 * 
+	 */
+	private static final long	serialVersionUID	= 1L;
+
+	/**
+	 * 权限对应的url path
+	 */
+	private String	url;
+
+	/**
+	 * 权限名字
+	 */
+	private String	name;
+
+	public String getUrl() {
+		return url;
+	}
+
+	public void setUrl(String url) {
+		this.url = url;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
 }

+ 9 - 2
src/main/java/com/goafanti/common/model/Role.java

@@ -1,7 +1,14 @@
 package com.goafanti.common.model;
 
-public class Role {
-    private String id;
+import java.io.Serializable;
+
+public class Role implements Serializable{
+    /**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	private String id;
 
     private String roleName;
 

+ 32 - 0
src/main/java/com/goafanti/common/model/RolePermission.java

@@ -0,0 +1,32 @@
+package com.goafanti.common.model;
+
+public class RolePermission {
+	private String	rid;
+
+	private String	pid;
+
+	public RolePermission() {
+
+	}
+
+	public RolePermission(String rid, String pid) {
+		this.rid = rid;
+		this.pid = pid;
+	}
+
+	public String getRid() {
+		return rid;
+	}
+
+	public void setRid(String rid) {
+		this.rid = rid;
+	}
+
+	public String getPid() {
+		return pid;
+	}
+
+	public void setPid(String pid) {
+		this.pid = pid;
+	}
+}

+ 32 - 0
src/main/java/com/goafanti/common/model/UserRole.java

@@ -0,0 +1,32 @@
+package com.goafanti.common.model;
+
+public class UserRole {
+	private String	uid;
+
+	private String	rid;
+
+	public UserRole() {
+
+	}
+
+	public UserRole(String uid, String rid) {
+		this.uid = uid;
+		this.rid = rid;
+	}
+
+	public String getUid() {
+		return uid;
+	}
+
+	public void setUid(String uid) {
+		this.uid = uid;
+	}
+
+	public String getRid() {
+		return rid;
+	}
+
+	public void setRid(String rid) {
+		this.rid = rid;
+	}
+}

+ 1 - 0
src/main/java/com/goafanti/copyright/service/impl/CopyrightInfoServiceImpl.java

@@ -65,6 +65,7 @@ public class CopyrightInfoServiceImpl extends BaseMybatisDao<CopyrightInfoMapper
 
 	@Override
 	public int batchDeleteByPrimaryKey(List<String> id) {
+		
 		return 0;
 	}
 

+ 4 - 3
src/main/java/com/goafanti/core/shiro/session/CustomSessionManager.java

@@ -13,6 +13,7 @@ import org.apache.shiro.subject.support.DefaultSubjectContext;
 import org.springframework.beans.factory.annotation.Autowired;
 
 import com.goafanti.common.constant.ShiroConstants;
+import com.goafanti.common.model.AftUser;
 import com.goafanti.common.model.User;
 import com.goafanti.common.utils.ArrayUtils;
 import com.goafanti.common.utils.LoggerUtils;
@@ -56,9 +57,9 @@ public class CustomSessionManager {
 	 * @return
 	 */
 	@SuppressWarnings("unchecked")
-	public List<SimplePrincipalCollection> getSimplePrincipalCollectionByUserId(Long... userIds) {
+	public List<SimplePrincipalCollection> getSimplePrincipalCollectionByUserId(String... userIds) {
 		// 把userIds 转成Set,好判断
-		Set<Long> idset = (Set<Long>) ArrayUtils.array2Set(userIds);
+		Set<String> idset = (Set<String>) ArrayUtils.array2Set(userIds);
 		// 获取所有session
 		Collection<Session> sessions = customShiroSessionDAO.getActiveSessions();
 		// 定义返回
@@ -72,7 +73,7 @@ public class CustomSessionManager {
 				// 判断用户,匹配用户ID。
 				obj = spc.getPrimaryPrincipal();
 				if (null != obj && obj instanceof User) {
-					User user = (User) obj;
+					AftUser user = (AftUser) obj;
 					// 比较用户ID,符合即加入集合
 					if (null != user && idset.contains(user.getId())) {
 						list.add(spc);

+ 3 - 3
src/main/java/com/goafanti/core/shiro/token/TokenManager.java

@@ -89,7 +89,7 @@ public class TokenManager {
 			return null;
 		}
 	}
-	
+
 	/**
 	 * 获取当前登录的管理员对象
 	 * 
@@ -184,7 +184,7 @@ public class TokenManager {
 	 * @param id
 	 *            用户ID
 	 */
-	public static void clearUserAuthByUserId(Long... userIds) {
+	public static void clearUserAuthByUserId(String... userIds) {
 
 		if (null == userIds || userIds.length == 0)
 			return;
@@ -204,7 +204,7 @@ public class TokenManager {
 		if (null == userIds || userIds.size() == 0) {
 			return;
 		}
-		clearUserAuthByUserId(userIds.toArray(new Long[0]));
+		clearUserAuthByUserId(userIds.toArray(new String[0]));
 	}
 
 	// public static void forbidUser(Long userId) {

+ 21 - 13
src/main/java/com/goafanti/core/shiro/token/UserRealm.java

@@ -1,5 +1,7 @@
 package com.goafanti.core.shiro.token;
 
+import java.util.Set;
+
 import javax.annotation.Resource;
 
 import org.apache.shiro.SecurityUtils;
@@ -9,6 +11,7 @@ import org.apache.shiro.authc.AuthenticationToken;
 import org.apache.shiro.authc.SimpleAuthenticationInfo;
 import org.apache.shiro.authc.UnknownAccountException;
 import org.apache.shiro.authz.AuthorizationInfo;
+import org.apache.shiro.authz.SimpleAuthorizationInfo;
 import org.apache.shiro.realm.AuthorizingRealm;
 import org.apache.shiro.subject.PrincipalCollection;
 import org.apache.shiro.subject.SimplePrincipalCollection;
@@ -19,6 +22,8 @@ import com.goafanti.common.model.AftUser;
 import com.goafanti.common.model.User;
 import com.goafanti.common.utils.PasswordUtil;
 import com.goafanti.patent.service.AdminService;
+import com.goafanti.permission.service.PermissionService;
+import com.goafanti.permission.service.RoleService;
 import com.goafanti.user.service.UserService;
 
 public class UserRealm extends AuthorizingRealm {
@@ -26,6 +31,11 @@ public class UserRealm extends AuthorizingRealm {
 	UserService				userService;
 	@Autowired
 	AdminService			adminService;
+	@Autowired
+	RoleService				roleService;
+	@Autowired
+	PermissionService		permissionService;
+
 	@Resource(name = "passwordUtil")
 	private PasswordUtil	passwordUtil;
 
@@ -55,7 +65,8 @@ public class UserRealm extends AuthorizingRealm {
 				throw new UnknownAccountException();
 			}
 			AftUser aftUser = user;
-			return new SimpleAuthenticationInfo(aftUser, aftUser.getPassword(), passwordUtil.getAftSalt(aftUser), getName());
+			return new SimpleAuthenticationInfo(aftUser, aftUser.getPassword(), passwordUtil.getAftSalt(aftUser),
+					getName());
 		}
 		// User user = userService.findUserByEmail(token.getUsername());
 		// if (null == user) {
@@ -79,18 +90,15 @@ public class UserRealm extends AuthorizingRealm {
 	 */
 	@Override
 	protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
-
-		// Long userId = TokenManager.getUserId();
-		// SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
-		// // 根据用户ID查询角色(role),放入到Authorization里。
-		// Set<String> roles = roleService.findRoleByUserId(userId);
-		// info.setRoles(roles);
-		// // 根据用户ID查询权限(permission),放入到Authorization里。
-		// Set<String> permissions =
-		// permissionService.findPermissionByUserId(userId);
-		// info.setStringPermissions(permissions);
-		// return info;
-		return null;
+		String userId = TokenManager.getUserId();
+		SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
+		// 根据用户ID查询角色(role),放入到Authorization里。
+		Set<String> roles = roleService.findRoleByUserId(userId);
+		info.setRoles(roles);
+		// 根据用户ID查询权限(permission),放入到Authorization里。
+		Set<String> permissions = permissionService.findPermissionByUserId(userId);
+		info.setStringPermissions(permissions);
+		return info;
 	}
 
 	/**

+ 22 - 0
src/main/java/com/goafanti/permission/bo/RoleBo.java

@@ -0,0 +1,22 @@
+package com.goafanti.permission.bo;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import com.goafanti.common.model.Permission;
+import com.goafanti.common.model.Role;
+
+public class RoleBo extends Role {
+	private static final long	serialVersionUID	= 1L;
+
+	List<Permission>			permissions			= new ArrayList<>();
+
+	public List<Permission> getPermissions() {
+		return permissions;
+	}
+
+	public void setPermissions(List<Permission> permissions) {
+		this.permissions = permissions;
+	}
+
+}

+ 84 - 0
src/main/java/com/goafanti/permission/bo/RolePermissionBo.java

@@ -0,0 +1,84 @@
+package com.goafanti.permission.bo;
+
+public class RolePermissionBo {
+	
+	/**
+	 * 角色id
+	 */
+    private String rid;
+
+    /**
+    * 角色名称
+    */
+    private String rname;
+
+    /**
+    * 角色类型
+    */
+    private Integer type;
+    
+    /**
+     * 权限id
+     */
+    private String pid;
+    
+
+    /**
+    * 权限名称
+    */
+    private String pname;
+    
+    /**
+     * 权限接口地址
+     */
+    private String url;
+
+	public String getRname() {
+		return rname;
+	}
+
+	public void setRname(String rname) {
+		this.rname = rname;
+	}
+
+	public Integer getType() {
+		return type;
+	}
+
+	public void setType(Integer type) {
+		this.type = type;
+	}
+
+	public String getPname() {
+		return pname;
+	}
+
+	public void setPname(String pname) {
+		this.pname = pname;
+	}
+
+	public String getUrl() {
+		return url;
+	}
+
+	public void setUrl(String url) {
+		this.url = url;
+	}
+
+	public String getRid() {
+		return rid;
+	}
+
+	public void setRid(String rid) {
+		this.rid = rid;
+	}
+
+	public String getPid() {
+		return pid;
+	}
+
+	public void setPid(String pid) {
+		this.pid = pid;
+	}
+    
+}

+ 65 - 0
src/main/java/com/goafanti/permission/controller/PermissionApiController.java

@@ -0,0 +1,65 @@
+package com.goafanti.permission.controller;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.goafanti.common.bo.Result;
+import com.goafanti.common.controller.BaseApiController;
+import com.goafanti.common.model.Permission;
+import com.goafanti.permission.service.PermissionService;
+
+@RestController
+public class PermissionApiController extends BaseApiController {
+	@Resource
+	private PermissionService permissionService;
+
+	@RequestMapping(value = "/permissions", method = RequestMethod.GET)
+	public Result permissions(String roomid, HttpServletRequest request, Model model) {
+		Result res = new Result();
+		res.setData(permissionService.findPermissions());
+		return res;
+	}
+
+	@RequestMapping(value = "/permission", method = RequestMethod.POST)
+	public Result insertPermission(String data) {
+		Result res = new Result();
+		JSONArray ja = (JSONArray) JSON.parse(data);
+		if (ja != null && !ja.isEmpty()) {
+			List<Permission> records = new ArrayList<>();
+			for (int idx = 0; idx < ja.size(); idx++) {
+				records.add(ja.getJSONObject(idx).toJavaObject(Permission.class));
+			}
+			res.setData(permissionService.insert(records));
+		} else {
+			res.getError().add(buildError("", "参数格式不正确"));
+		}
+		return res;
+	}
+
+	@RequestMapping(value = "/permission/delete", method = RequestMethod.POST)
+	public Result deletePermission(String data) {
+		Result res = new Result();
+		JSONArray ja = (JSONArray) JSON.parse(data);
+		if (ja != null && !ja.isEmpty()) {
+			List<String> records = new ArrayList<>();
+			for (int idx = 0; idx < ja.size(); idx++) {
+				records.add(ja.getString(idx));
+			}
+			res.setData(permissionService.deleteByPrimaryKeys(records));
+		} else {
+			res.getError().add(buildError("", "参数格式不正确"));
+		}
+		return res;
+	}
+
+}

+ 101 - 0
src/main/java/com/goafanti/permission/controller/RoleApiController.java

@@ -0,0 +1,101 @@
+package com.goafanti.permission.controller;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.annotation.Resource;
+
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.goafanti.common.bo.Result;
+import com.goafanti.common.controller.BaseApiController;
+import com.goafanti.common.model.Role;
+import com.goafanti.common.utils.StringUtils;
+import com.goafanti.permission.service.RoleService;
+
+@RestController
+public class RoleApiController extends BaseApiController {
+	@Resource
+	private RoleService roleService;
+
+	@RequestMapping(value = "/roles", method = RequestMethod.GET)
+	public Result roles() {
+		Result res = new Result();
+		res.setData(roleService.findRoles());
+		return res;
+	}
+
+	@RequestMapping(value = "/role", method = RequestMethod.POST)
+	public Result insertRole(String data) {
+		Result res = new Result();
+		JSONObject jo = (JSONObject) JSON.parse(data);
+		if (jo != null) {
+			JSONArray permissions = jo.getJSONArray("permissions");
+			List<String> permisionIds = new ArrayList<>();
+			for (int idx = 0; idx < permissions.size(); idx++) {
+				String pid = permissions.getString(idx);
+				if (StringUtils.isNumeric(pid)) {
+					permisionIds.add(pid);
+				}
+			}
+			Role records = jo.toJavaObject(Role.class);
+			res.setData(roleService.insert(records, permisionIds));
+		} else {
+			res.getError().add(buildError("", "参数格式不正确"));
+		}
+		return res;
+	}
+
+	@RequestMapping(value = "/role/delete", method = RequestMethod.POST)
+	public Result deleteRole(String data) {
+		Result res = new Result();
+		JSONArray ja = (JSONArray) JSON.parse(data);
+		if (ja != null && !ja.isEmpty()) {
+			List<String> records = new ArrayList<>();
+			for (int idx = 0; idx < ja.size(); idx++) {
+				String rid = ja.getString(idx);
+				if (rid != "1") {
+					records.add(rid);
+				}
+			}
+			res.setData(roleService.deleteByPrimaryKeys(records));
+		} else {
+			res.getError().add(buildError("", "参数格式不正确"));
+		}
+		return res;
+	}
+
+	@RequestMapping(value = "/role/bindpermission", method = RequestMethod.POST)
+	public Result bindPermission(String rid, String pid) {
+		Result res = new Result();
+		res.setData(roleService.bindPermission(rid, pid));
+		return res;
+	}
+
+	@RequestMapping(value = "/role/binduser", method = RequestMethod.POST)
+	public Result bindUser(String rid, String uid) {
+		Result res = new Result();
+		res.setData(roleService.bindUser(rid, uid));
+		return res;
+	}
+
+	@RequestMapping(value = "/role/unbindpermission", method = RequestMethod.POST)
+	public Result unbindPermission(String rid, String pid) {
+		Result res = new Result();
+		res.setData(roleService.bindPermission(rid, pid));
+		return res;
+	}
+
+	@RequestMapping(value = "/role/unbinduser", method = RequestMethod.POST)
+	public Result unbindUser(String rid, String uid) {
+		Result res = new Result();
+		res.setData(roleService.bindUser(rid, uid));
+		return res;
+	}
+
+}

+ 18 - 0
src/main/java/com/goafanti/permission/service/PermissionService.java

@@ -0,0 +1,18 @@
+package com.goafanti.permission.service;
+
+import java.util.List;
+import java.util.Set;
+
+import com.goafanti.common.model.Permission;
+
+public interface PermissionService {
+
+	int deleteByPrimaryKeys(List<String> ids);
+
+	// 根据用户ID查询权限(permission),放入到Authorization里。
+	Set<String> findPermissionByUserId(String userId);
+
+	List<Permission> findPermissions();
+
+	int insert(List<Permission> records);
+}

+ 30 - 0
src/main/java/com/goafanti/permission/service/RoleService.java

@@ -0,0 +1,30 @@
+package com.goafanti.permission.service;
+
+import java.util.List;
+import java.util.Set;
+
+import com.goafanti.common.model.Role;
+import com.goafanti.permission.bo.RoleBo;
+
+public interface RoleService {
+
+	int insert(List<Role> records);
+
+	// 根据用户ID查询角色(role),放入到Authorization里。
+	Set<String> findRoleByUserId(String userId);
+
+	List<RoleBo> findRoles();
+
+	int deleteByPrimaryKeys(List<String> records);
+
+	int bindPermission(String roleId, String permissionId);
+
+	int unbindPermission(String roleId, String permissionId);
+
+	int bindUser(String roleId, String userId);
+
+	int unbindUser(String roleId, String userId);
+
+	int insert(Role record, List<String> permissions);
+
+}

+ 50 - 0
src/main/java/com/goafanti/permission/service/impl/PermissionServiceImpl.java

@@ -0,0 +1,50 @@
+package com.goafanti.permission.service.impl;
+
+import java.util.List;
+import java.util.Set;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.goafanti.common.dao.PermissionMapper;
+import com.goafanti.common.dao.RolePermissionMapper;
+import com.goafanti.common.dao.UserMapper;
+import com.goafanti.common.dao.UserRoleMapper;
+import com.goafanti.common.model.Permission;
+import com.goafanti.core.mybatis.BaseMybatisDao;
+import com.goafanti.permission.service.PermissionService;
+
+@Service
+public class PermissionServiceImpl extends BaseMybatisDao<PermissionMapper> implements PermissionService {
+
+	@Autowired
+	PermissionMapper		permissionMapper;
+	@Autowired
+	UserMapper				userMapper;
+	@Autowired
+	RolePermissionMapper	rolePermissionMapper;
+	@Autowired
+	UserRoleMapper			userRoleMapper;
+
+	@Override
+	public int insert(List<Permission> records) {
+		return permissionMapper.insertBatch(records);
+	}
+
+	@Override
+	public Set<String> findPermissionByUserId(String userId) {
+		return permissionMapper.findPermissionByUserId(userId);
+	}
+
+	@Override
+	public List<Permission> findPermissions() {
+		return permissionMapper.findAll();
+	}
+
+	@Override
+	public int deleteByPrimaryKeys(List<String> ids) {
+		rolePermissionMapper.deleteByPermissionId(ids);
+		return permissionMapper.deleteByPrimaryKeys(ids);
+	}
+
+}

+ 125 - 0
src/main/java/com/goafanti/permission/service/impl/RoleServiceImpl.java

@@ -0,0 +1,125 @@
+package com.goafanti.permission.service.impl;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.goafanti.common.dao.RoleMapper;
+import com.goafanti.common.dao.RolePermissionMapper;
+import com.goafanti.common.dao.UserMapper;
+import com.goafanti.common.dao.UserRoleMapper;
+import com.goafanti.common.model.Permission;
+import com.goafanti.common.model.Role;
+import com.goafanti.common.model.RolePermission;
+import com.goafanti.common.model.UserRole;
+import com.goafanti.core.mybatis.BaseMybatisDao;
+import com.goafanti.core.shiro.token.TokenManager;
+import com.goafanti.permission.bo.RoleBo;
+import com.goafanti.permission.bo.RolePermissionBo;
+import com.goafanti.permission.service.RoleService;
+
+@Service
+public class RoleServiceImpl extends BaseMybatisDao<RoleMapper> implements RoleService {
+
+	@Autowired
+	RoleMapper				roleMapper;
+	@Autowired
+	UserMapper				userMapper;
+	@Autowired
+	UserRoleMapper			userRoleMapper;
+	@Autowired
+	RolePermissionMapper	rolePermissionMapper;
+
+	@Override
+	public Set<String> findRoleByUserId(String userId) {
+		return roleMapper.findRoleByUserId(userId);
+	}
+
+	@Override
+	public List<RoleBo> findRoles() {
+		List<RolePermissionBo> res = roleMapper.findRolePermissions();
+		Map<String, RoleBo> roleMap = new HashMap<>();
+		for (RolePermissionBo rp : res) {
+			RoleBo rb = roleMap.get(rp.getRid());
+			if (rb == null) {
+				rb = new RoleBo();
+				rb.setId(rp.getRid());
+				rb.setRoleName(rp.getRname());
+				rb.setRoleType(rp.getType());
+				roleMap.put(rp.getRid(), rb);
+			}
+			Permission p = new Permission();
+			p.setId(rp.getPid());
+			p.setName(rp.getPname());
+			p.setUrl(rp.getUrl());
+			if (p.getId() != null) {
+				rb.getPermissions().add(p);
+			}
+		}
+		return new ArrayList<>(roleMap.values());
+	}
+
+	@Override
+	public int insert(List<Role> records) {
+		return roleMapper.insertBatch(records);
+	}
+
+	@Override
+	public int deleteByPrimaryKeys(List<String> records) {
+		rolePermissionMapper.deleteByRoleId(records);
+		userRoleMapper.deleteByRoleId(records);
+		TokenManager.clearUserAuthByUserId((String[]) userRoleMapper.findUserIdByRoleIds(records).toArray());
+		return roleMapper.deleteByPrimaryKeys(records);
+	}
+
+	@Override
+	public int bindPermission(String rid, String pid) {
+		TokenManager.clearUserAuthByUserId((String[]) userRoleMapper.findUserIdByRoleId(rid).toArray());
+		return rolePermissionMapper.insert(new RolePermission(rid, pid));
+	}
+
+	@Override
+	public int bindUser(String rid, String uid) {
+		TokenManager.clearUserAuthByUserId(new String[] { uid });
+		return userRoleMapper.insert(new UserRole(uid, rid));
+	}
+
+	@Override
+	public int unbindPermission(String roleId, String permissionId) {
+		Map<String, Object> params = new HashMap<>();
+		params.put("rid", roleId);
+		params.put("pid", permissionId);
+		TokenManager.clearUserAuthByUserId((String[]) userRoleMapper.findUserIdByRoleId(roleId).toArray());
+		return rolePermissionMapper.deleteByPrimaryKey(params);
+	}
+
+	@Override
+	public int unbindUser(String roleId, String userId) {
+		Map<String, Object> params = new HashMap<>();
+		params.put("rid", roleId);
+		params.put("uid", userId);
+		TokenManager.clearUserAuthByUserId(new String[] { userId });
+		return userRoleMapper.deleteByUserRole(params);
+	}
+
+	@Override
+	public int insert(Role record, List<String> permissions) {
+		if (record.getId() != null) {
+			List<RolePermission> rps = new ArrayList<>();
+			rolePermissionMapper.deleteByRid(record.getId());
+			for (String pid : permissions) {
+				rps.add(new RolePermission(record.getId(), pid));
+			}
+			if (!rps.isEmpty()) {
+				rolePermissionMapper.insertBatch(rps);
+			}
+		}
+		return roleMapper.insert(record);
+	}
+
+}