Browse Source

🗃️ 初始化RBAC数据

pull/1/head
Yangkai.Shen 6 years ago
parent
commit
86710c056d
15 changed files with 556 additions and 60 deletions
  1. +145
    -49
      spring-boot-demo-rbac-security/sql/security.sql
  2. +13
    -0
      spring-boot-demo-rbac-security/src/main/java/com/xkcoding/rbac/security/SpringBootDemoRbacSecurityApplication.java
  3. +30
    -0
      spring-boot-demo-rbac-security/src/main/java/com/xkcoding/rbac/security/config/IdConfig.java
  4. +3
    -3
      spring-boot-demo-rbac-security/src/main/java/com/xkcoding/rbac/security/model/Permission.java
  5. +32
    -0
      spring-boot-demo-rbac-security/src/main/java/com/xkcoding/rbac/security/model/RolePermission.java
  6. +32
    -0
      spring-boot-demo-rbac-security/src/main/java/com/xkcoding/rbac/security/model/UserRole.java
  7. +38
    -0
      spring-boot-demo-rbac-security/src/main/java/com/xkcoding/rbac/security/model/unionkey/RolePermissionKey.java
  8. +38
    -0
      spring-boot-demo-rbac-security/src/main/java/com/xkcoding/rbac/security/model/unionkey/UserRoleKey.java
  9. +14
    -2
      spring-boot-demo-rbac-security/src/main/java/com/xkcoding/rbac/security/repository/PermissionDao.java
  10. +13
    -2
      spring-boot-demo-rbac-security/src/main/java/com/xkcoding/rbac/security/repository/RoleDao.java
  11. +22
    -0
      spring-boot-demo-rbac-security/src/main/java/com/xkcoding/rbac/security/repository/RolePermissionDao.java
  12. +14
    -2
      spring-boot-demo-rbac-security/src/main/java/com/xkcoding/rbac/security/repository/UserDao.java
  13. +23
    -0
      spring-boot-demo-rbac-security/src/main/java/com/xkcoding/rbac/security/repository/UserRoleDao.java
  14. +2
    -2
      spring-boot-demo-rbac-security/src/main/resources/application.yml
  15. +137
    -0
      spring-boot-demo-rbac-security/src/test/java/com/xkcoding/rbac/security/repository/DataInitTest.java

+ 145
- 49
spring-boot-demo-rbac-security/sql/security.sql View File

@@ -1,65 +1,161 @@
# 用户表
CREATE TABLE IF NOT EXISTS `sec_user`
/*
Navicat Premium Data Transfer

Source Server : 本机
Source Server Type : MySQL
Source Server Version : 50718
Source Host : localhost:3306
Source Schema : spring-boot-demo

Target Server Type : MySQL
Target Server Version : 50718
File Encoding : 65001

Date: 10/12/2018 14:46:38
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for sec_permission
-- ----------------------------
DROP TABLE IF EXISTS `sec_permission`;
CREATE TABLE `sec_permission`
(
`id` BIGINT(64) NOT NULL COMMENT '主键',
`username` VARCHAR(50) NOT NULL COMMENT '用户名',
`password` VARCHAR(60) NOT NULL COMMENT '密码',
`nickname` VARCHAR(255) DEFAULT NULL COMMENT '昵称',
`phone` VARCHAR(11) DEFAULT NULL COMMENT '手机',
`email` VARCHAR(50) DEFAULT NULL COMMENT '邮箱',
`birthday` BIGINT(13) DEFAULT NULL COMMENT '生日',
`sex` TINYINT(1) DEFAULT NULL COMMENT '性别,男-1,女-2',
`status` TINYINT(1) NOT NULL DEFAULT '1' COMMENT '状态,启用-1,禁用-0',
`create_time` BIGINT(13) NOT NULL COMMENT '创建时间',
`update_time` BIGINT(13) NOT NULL COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `username` (`username`),
UNIQUE KEY `phone` (`phone`),
UNIQUE KEY `email` (`email`)
`id` bigint(64) NOT NULL COMMENT '主键',
`name` varchar(50) NOT NULL COMMENT '权限名',
`href` varchar(1000) DEFAULT NULL COMMENT '页面地址',
`type` int(2) NOT NULL COMMENT '权限类型,页面-1,按钮-2',
`permission` varchar(50) DEFAULT NULL COMMENT '权限表达式',
`sort` int(11) NOT NULL COMMENT '排序',
`parent_id` bigint(64) NOT NULL COMMENT '父级id',
PRIMARY KEY (`id`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8 COMMENT '用户表';
DEFAULT CHARSET = utf8 COMMENT ='权限表';

# 角色表
CREATE TABLE IF NOT EXISTS `sec_role`
-- ----------------------------
-- Records of sec_permission
-- ----------------------------
BEGIN;
INSERT INTO `sec_permission`
VALUES (1072019441543417856, '测试页面', '/test', 1, NULL, 1, 0);
INSERT INTO `sec_permission`
VALUES (1072019441564389376, '测试页面-查询', NULL, 2, 'test:query', 1, 1072019441543417856);
INSERT INTO `sec_permission`
VALUES (1072019441576972288, '测试页面-添加', NULL, 2, 'test:insert', 2, 1072019441543417856);
COMMIT;

-- ----------------------------
-- Table structure for sec_role
-- ----------------------------
DROP TABLE IF EXISTS `sec_role`;
CREATE TABLE `sec_role`
(
`id` BIGINT(64) NOT NULL COMMENT '主键',
`name` VARCHAR(50) NOT NULL COMMENT '角色名',
`description` VARCHAR(100) DEFAULT NULL COMMENT '描述',
`create_time` BIGINT(13) NOT NULL COMMENT '创建时间',
`update_time` BIGINT(13) NOT NULL COMMENT '更新时间',
`id` bigint(64) NOT NULL COMMENT '主键',
`name` varchar(50) NOT NULL COMMENT '角色名',
`description` varchar(100) DEFAULT NULL COMMENT '描述',
`create_time` bigint(13) NOT NULL COMMENT '创建时间',
`update_time` bigint(13) NOT NULL COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8 COMMENT '角色表';
DEFAULT CHARSET = utf8 COMMENT ='角色表';

-- ----------------------------
-- Records of sec_role
-- ----------------------------
BEGIN;
INSERT INTO `sec_role`
VALUES (1072019441480503296, '管理员', '超级管理员', 1544424326664, 1544424326664);
INSERT INTO `sec_role`
VALUES (1072019441501474816, '普通用户', '普通用户', 1544424326669, 1544424326669);
COMMIT;

# 权限表
CREATE TABLE IF NOT EXISTS `sec_permission`
-- ----------------------------
-- Table structure for sec_role_permission
-- ----------------------------
DROP TABLE IF EXISTS `sec_role_permission`;
CREATE TABLE `sec_role_permission`
(
`id` BIGINT(64) NOT NULL COMMENT '主键',
`name` VARCHAR(50) NOT NULL COMMENT '权限名',
`href` VARCHAR(1000) DEFAULT NULL COMMENT '页面地址',
`type` TINYINT(1) NOT NULL COMMENT '权限类型,页面-1,按钮-2',
`permission` VARCHAR(50) DEFAULT NULL COMMENT '权限表达式',
`sort` INT(11) NOT NULL COMMENT '排序',
`parent_id` BIGINT(64) NOT NULL COMMENT '父级id',
PRIMARY KEY (`id`)
`role_id` bigint(64) NOT NULL COMMENT '角色主键',
`permission_id` bigint(64) NOT NULL COMMENT '权限主键',
PRIMARY KEY (`role_id`, `permission_id`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8 COMMENT '权限表';
DEFAULT CHARSET = utf8 COMMENT ='角色权限关系表';

-- ----------------------------
-- Records of sec_role_permission
-- ----------------------------
BEGIN;
INSERT INTO `sec_role_permission`
VALUES (1072019441480503296, 1072019441543417856);
INSERT INTO `sec_role_permission`
VALUES (1072019441480503296, 1072019441564389376);
INSERT INTO `sec_role_permission`
VALUES (1072019441480503296, 1072019441576972288);
INSERT INTO `sec_role_permission`
VALUES (1072019441501474816, 1072019441543417856);
INSERT INTO `sec_role_permission`
VALUES (1072019441501474816, 1072019441564389376);
COMMIT;

# 用户角色关系表
CREATE TABLE IF NOT EXISTS `sec_user_role`
-- ----------------------------
-- Table structure for sec_user
-- ----------------------------
DROP TABLE IF EXISTS `sec_user`;
CREATE TABLE `sec_user`
(
`user_id` BIGINT(64) NOT NULL COMMENT '用户主键',
`role_id` BIGINT(64) NOT NULL COMMENT '角色主键',
PRIMARY KEY (`user_id`, `role_id`)
`id` bigint(64) NOT NULL COMMENT '主键',
`username` varchar(50) NOT NULL COMMENT '用户名',
`password` varchar(60) NOT NULL COMMENT '密码',
`nickname` varchar(255) DEFAULT NULL COMMENT '昵称',
`phone` varchar(11) DEFAULT NULL COMMENT '手机',
`email` varchar(50) DEFAULT NULL COMMENT '邮箱',
`birthday` bigint(13) DEFAULT NULL COMMENT '生日',
`sex` int(2) DEFAULT NULL COMMENT '性别,男-1,女-2',
`status` int(2) NOT NULL DEFAULT '1' COMMENT '状态,启用-1,禁用-0',
`create_time` bigint(13) NOT NULL COMMENT '创建时间',
`update_time` bigint(13) NOT NULL COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `username` (`username`),
UNIQUE KEY `phone` (`phone`),
UNIQUE KEY `email` (`email`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8 COMMENT '用户角色关系表';
DEFAULT CHARSET = utf8 COMMENT ='用户表';

-- ----------------------------
-- Records of sec_user
-- ----------------------------
BEGIN;
INSERT INTO `sec_user`
VALUES (1072019440205434880, 'role', '$2a$10$TwdumjYKUYRQvc3VC8dleOlWr4Q2TysQtfmCMplOWygOzyfrKQee2', '管理员',
'17300000000', 'role@xkcoding.com', 785433600000, 1, 1, 1544424326483, 1544424326483);
INSERT INTO `sec_user`
VALUES (1072019441035907072, 'user', '$2a$10$8hL7INOxQCzDzI08GGYNCOFKV6mjDcOqhJ/7c1VeF9agO.wBS3ylq', '普通用户',
'17300001111', 'user@xkcoding.com', 785433600000, 1, 1, 1544424326659, 1544424326659);
COMMIT;

# 角色权限关系表
CREATE TABLE IF NOT EXISTS `sec_role_permission`
-- ----------------------------
-- Table structure for sec_user_role
-- ----------------------------
DROP TABLE IF EXISTS `sec_user_role`;
CREATE TABLE `sec_user_role`
(
`role_id` BIGINT(64) NOT NULL COMMENT '角色主键',
`permission_id` BIGINT(64) NOT NULL COMMENT '权限主键',
PRIMARY KEY (`role_id`, `permission_id`)
`user_id` bigint(64) NOT NULL COMMENT '用户主键',
`role_id` bigint(64) NOT NULL COMMENT '角色主键',
PRIMARY KEY (`user_id`, `role_id`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8 COMMENT '角色权限关系表';
DEFAULT CHARSET = utf8 COMMENT ='用户角色关系表';

-- ----------------------------
-- Records of sec_user_role
-- ----------------------------
BEGIN;
INSERT INTO `sec_user_role`
VALUES (1072019440205434880, 1072019441480503296);
INSERT INTO `sec_user_role`
VALUES (1072019441035907072, 1072019441501474816);
COMMIT;

SET FOREIGN_KEY_CHECKS = 1;

+ 13
- 0
spring-boot-demo-rbac-security/src/main/java/com/xkcoding/rbac/security/SpringBootDemoRbacSecurityApplication.java View File

@@ -3,6 +3,19 @@ package com.xkcoding.rbac.security;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
* <p>
* 启动器
* </p>
*
* @package: com.xkcoding.rbac.security
* @description: 启动器
* @author: yangkai.shen
* @date: Created in 2018-12-10 11:28
* @copyright: Copyright (c) 2018
* @version: V1.0
* @modified: yangkai.shen
*/
@SpringBootApplication
public class SpringBootDemoRbacSecurityApplication {



+ 30
- 0
spring-boot-demo-rbac-security/src/main/java/com/xkcoding/rbac/security/config/IdConfig.java View File

@@ -0,0 +1,30 @@
package com.xkcoding.rbac.security.config;

import cn.hutool.core.lang.Snowflake;
import cn.hutool.core.util.IdUtil;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
* <p>
* 雪花主键生成器
* </p>
*
* @package: com.xkcoding.rbac.security.config
* @description: 雪花主键生成器
* @author: yangkai.shen
* @date: Created in 2018-12-10 11:28
* @copyright: Copyright (c) 2018
* @version: V1.0
* @modified: yangkai.shen
*/
@Configuration
public class IdConfig {
/**
* 雪花生成器
*/
@Bean
public Snowflake snowflake() {
return IdUtil.createSnowflake(1, 1);
}
}

+ 3
- 3
spring-boot-demo-rbac-security/src/main/java/com/xkcoding/rbac/security/model/Permission.java View File

@@ -43,7 +43,7 @@ public class Permission {
/**
* 权限类型,页面-1,按钮-2
*/
private String type;
private Integer type;

/**
* 权限表达式
@@ -53,11 +53,11 @@ public class Permission {
/**
* 排序
*/
private String sort;
private Integer sort;

/**
* 父级id
*/
@Column(name = "parent_id")
private String parentId;
private Long parentId;
}

+ 32
- 0
spring-boot-demo-rbac-security/src/main/java/com/xkcoding/rbac/security/model/RolePermission.java View File

@@ -0,0 +1,32 @@
package com.xkcoding.rbac.security.model;

import com.xkcoding.rbac.security.model.unionkey.RolePermissionKey;
import lombok.Data;

import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.Table;

/**
* <p>
* 角色-权限
* </p>
*
* @package: com.xkcoding.rbac.security.model
* @description: 角色-权限
* @author: yangkai.shen
* @date: Created in 2018-12-10 13:46
* @copyright: Copyright (c) 2018
* @version: V1.0
* @modified: yangkai.shen
*/
@Data
@Entity
@Table(name = "sec_role_permission")
public class RolePermission {
/**
* 主键
*/
@EmbeddedId
private RolePermissionKey id;
}

+ 32
- 0
spring-boot-demo-rbac-security/src/main/java/com/xkcoding/rbac/security/model/UserRole.java View File

@@ -0,0 +1,32 @@
package com.xkcoding.rbac.security.model;

import com.xkcoding.rbac.security.model.unionkey.UserRoleKey;
import lombok.Data;

import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.Table;

/**
* <p>
* 用户角色关联
* </p>
*
* @package: com.xkcoding.rbac.security.model
* @description: 用户角色关联
* @author: yangkai.shen
* @date: Created in 2018-12-10 11:18
* @copyright: Copyright (c) 2018
* @version: V1.0
* @modified: yangkai.shen
*/
@Data
@Entity
@Table(name = "sec_user_role")
public class UserRole {
/**
* 主键
*/
@EmbeddedId
private UserRoleKey id;
}

+ 38
- 0
spring-boot-demo-rbac-security/src/main/java/com/xkcoding/rbac/security/model/unionkey/RolePermissionKey.java View File

@@ -0,0 +1,38 @@
package com.xkcoding.rbac.security.model.unionkey;

import lombok.Data;

import javax.persistence.Column;
import javax.persistence.Embeddable;
import java.io.Serializable;

/**
* <p>
* 角色-权限联合主键
* </p>
*
* @package: com.xkcoding.rbac.security.model.unionkey
* @description: 角色-权限联合主键
* @author: yangkai.shen
* @date: Created in 2018-12-10 13:47
* @copyright: Copyright (c) 2018
* @version: V1.0
* @modified: yangkai.shen
*/
@Data
@Embeddable
public class RolePermissionKey implements Serializable {
private static final long serialVersionUID = 6850974328279713855L;

/**
* 角色id
*/
@Column(name = "role_id")
private Long roleId;

/**
* 权限id
*/
@Column(name = "permission_id")
private Long permissionId;
}

+ 38
- 0
spring-boot-demo-rbac-security/src/main/java/com/xkcoding/rbac/security/model/unionkey/UserRoleKey.java View File

@@ -0,0 +1,38 @@
package com.xkcoding.rbac.security.model.unionkey;

import lombok.Data;

import javax.persistence.Column;
import javax.persistence.Embeddable;
import java.io.Serializable;

/**
* <p>
* 用户-角色联合主键
* </p>
*
* @package: com.xkcoding.rbac.security.model.unionkey
* @description: 用户-角色联合主键
* @author: yangkai.shen
* @date: Created in 2018-12-10 11:20
* @copyright: Copyright (c) 2018
* @version: V1.0
* @modified: yangkai.shen
*/
@Embeddable
@Data
public class UserRoleKey implements Serializable {
private static final long serialVersionUID = 5633412144183654743L;
/**
* 用户id
*/
@Column(name = "user_id")
private Long userId;

/**
* 角色id
*/
@Column(name = "role_id")
private Long roleId;
}

+ 14
- 2
spring-boot-demo-rbac-security/src/main/java/com/xkcoding/rbac/security/repository/PermissionDao.java View File

@@ -1,8 +1,11 @@
package com.xkcoding.rbac.security.repository;

import com.xkcoding.rbac.security.model.Permission;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Query;

import java.util.List;

/**
* <p>
@@ -17,5 +20,14 @@ import org.springframework.data.jpa.repository.JpaRepository;
* @version: V1.0
* @modified: yangkai.shen
*/
public interface PermissionDao extends JpaRepository<Permission, Long>, Specification<Permission> {
public interface PermissionDao extends JpaRepository<Permission, Long>, JpaSpecificationExecutor<Permission> {

/**
* 根据角色列表查询权限列表
*
* @param ids 角色id列表
* @return 权限列表
*/
@Query(value = "SELECT DISTINCT sec_permission.* FROM sec_permission,sec_role,sec_role_permission WHERE sec_role.id = sec_role_permission.role_id AND sec_permission.id = sec_role_permission.permission_id AND sec_role.id IN (:ids)", nativeQuery = true)
List<Permission> selectByRoleIdList(List<Long> ids);
}

+ 13
- 2
spring-boot-demo-rbac-security/src/main/java/com/xkcoding/rbac/security/repository/RoleDao.java View File

@@ -1,8 +1,11 @@
package com.xkcoding.rbac.security.repository;

import com.xkcoding.rbac.security.model.Role;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Query;

import java.util.List;

/**
* <p>
@@ -17,5 +20,13 @@ import org.springframework.data.jpa.repository.JpaRepository;
* @version: V1.0
* @modified: yangkai.shen
*/
public interface RoleDao extends JpaRepository<Role, Long>, Specification<Role> {
public interface RoleDao extends JpaRepository<Role, Long>, JpaSpecificationExecutor<Role> {
/**
* 根据用户id 查询角色列表
*
* @param userId 用户id
* @return 角色列表
*/
@Query(value = "SELECT sec_role.* FROM sec_role,sec_user,sec_user_role WHERE sec_user.id = sec_user_role.user_id AND sec_role.id = sec_user_role.role_id AND sec_user.id = :userId", nativeQuery = true)
List<Role> selectByUserId(Long userId);
}

+ 22
- 0
spring-boot-demo-rbac-security/src/main/java/com/xkcoding/rbac/security/repository/RolePermissionDao.java View File

@@ -0,0 +1,22 @@
package com.xkcoding.rbac.security.repository;

import com.xkcoding.rbac.security.model.RolePermission;
import com.xkcoding.rbac.security.model.unionkey.RolePermissionKey;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;

/**
* <p>
* 角色-权限 DAO
* </p>
*
* @package: com.xkcoding.rbac.security.repository
* @description: 角色-权限 DAO
* @author: yangkai.shen
* @date: Created in 2018-12-10 13:45
* @copyright: Copyright (c) 2018
* @version: V1.0
* @modified: yangkai.shen
*/
public interface RolePermissionDao extends JpaRepository<RolePermission, RolePermissionKey>, JpaSpecificationExecutor<RolePermission> {
}

+ 14
- 2
spring-boot-demo-rbac-security/src/main/java/com/xkcoding/rbac/security/repository/UserDao.java View File

@@ -1,8 +1,11 @@
package com.xkcoding.rbac.security.repository;

import com.xkcoding.rbac.security.model.Permission;
import com.xkcoding.rbac.security.model.User;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;

import java.util.Optional;

/**
* <p>
@@ -17,5 +20,14 @@ import org.springframework.data.jpa.repository.JpaRepository;
* @version: V1.0
* @modified: yangkai.shen
*/
public interface UserDao extends JpaRepository<User, Long>, Specification<User> {
public interface UserDao extends JpaRepository<User, Long>, JpaSpecificationExecutor<User> {
/**
* 根据用户名、邮箱、手机号查询用户
*
* @param username 用户名
* @param email 邮箱
* @param phone 手机号
* @return 用户信息
*/
Optional<User> findByUsernameOrEmailOrPhone(String username, String email, String phone);
}

+ 23
- 0
spring-boot-demo-rbac-security/src/main/java/com/xkcoding/rbac/security/repository/UserRoleDao.java View File

@@ -0,0 +1,23 @@
package com.xkcoding.rbac.security.repository;

import com.xkcoding.rbac.security.model.UserRole;
import com.xkcoding.rbac.security.model.unionkey.UserRoleKey;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;

/**
* <p>
* 用户角色 DAO
* </p>
*
* @package: com.xkcoding.rbac.security.repository
* @description: 用户角色 DAO
* @author: yangkai.shen
* @date: Created in 2018-12-10 11:24
* @copyright: Copyright (c) 2018
* @version: V1.0
* @modified: yangkai.shen
*/
public interface UserRoleDao extends JpaRepository<UserRole, UserRoleKey>, JpaSpecificationExecutor<UserRole> {

}

+ 2
- 2
spring-boot-demo-rbac-security/src/main/resources/application.yml View File

@@ -5,10 +5,10 @@ server:
spring:
datasource:
hikari:
jdbc-url: jdbc:mysql://127.0.0.1:3306/spring-boot-demo?useUnicode=true&characterEncoding=UTF-8&useSSL=false&autoReconnect=true&failOverReadOnly=false&serverTimezone=GMT%2B8
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/spring-boot-demo?useUnicode=true&characterEncoding=UTF-8&useSSL=false&autoReconnect=true&failOverReadOnly=false&serverTimezone=GMT%2B8
jpa:
show-sql: true
generate-ddl: false


+ 137
- 0
spring-boot-demo-rbac-security/src/test/java/com/xkcoding/rbac/security/repository/DataInitTest.java View File

@@ -0,0 +1,137 @@
package com.xkcoding.rbac.security.repository;

import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Snowflake;
import com.xkcoding.rbac.security.SpringBootDemoRbacSecurityApplicationTests;
import com.xkcoding.rbac.security.model.*;
import com.xkcoding.rbac.security.model.unionkey.RolePermissionKey;
import com.xkcoding.rbac.security.model.unionkey.UserRoleKey;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;

/**
* <p>
* 数据初始化测试
* </p>
*
* @package: com.xkcoding.rbac.security.repository
* @description: 数据初始化测试
* @author: yangkai.shen
* @date: Created in 2018-12-10 11:26
* @copyright: Copyright (c) 2018
* @version: V1.0
* @modified: yangkai.shen
*/
public class DataInitTest extends SpringBootDemoRbacSecurityApplicationTests {
@Autowired
private UserDao userDao;

@Autowired
private RoleDao roleDao;

@Autowired
private PermissionDao permissionDao;

@Autowired
private UserRoleDao userRoleDao;

@Autowired
private RolePermissionDao rolePermissionDao;

@Autowired
private Snowflake snowflake;

@Autowired
private BCryptPasswordEncoder encoder;

@Test
public void initTest() {
init();
}

private void init() {
User admin = createUser(true);
User user = createUser(false);

Role roleAdmin = createRole(true);
Role roleUser = createRole(false);

createUserRoleRelation(admin.getId(), roleAdmin.getId());
createUserRoleRelation(user.getId(), roleUser.getId());

// 页面权限
Permission pagePerm = createPermission("/test", "测试页面", 1, null, 1, 0L);
// 按钮权限
Permission btnQueryPerm = createPermission(null, "测试页面-查询", 2, "test:query", 1, pagePerm.getId());
Permission btnPermInsert = createPermission(null, "测试页面-添加", 2, "test:insert", 2, pagePerm.getId());

createRolePermissionRelation(roleAdmin.getId(), pagePerm.getId());
createRolePermissionRelation(roleUser.getId(), pagePerm.getId());
createRolePermissionRelation(roleAdmin.getId(), btnQueryPerm.getId());
createRolePermissionRelation(roleUser.getId(), btnQueryPerm.getId());
createRolePermissionRelation(roleAdmin.getId(), btnPermInsert.getId());
}

private void createRolePermissionRelation(Long roleId, Long permissionId) {
RolePermission adminPage = new RolePermission();
RolePermissionKey adminPageKey = new RolePermissionKey();
adminPageKey.setRoleId(roleId);
adminPageKey.setPermissionId(permissionId);
adminPage.setId(adminPageKey);
rolePermissionDao.save(adminPage);
}

private Permission createPermission(String href, String name, Integer type, String permission, Integer sort, Long parentId) {
// 页面权限
Permission perm = new Permission();
perm.setId(snowflake.nextId());
perm.setHref(href);
perm.setName(name);
perm.setType(type);
perm.setPermission(permission);
perm.setSort(sort);
perm.setParentId(parentId);
permissionDao.save(perm);
return perm;
}

private void createUserRoleRelation(Long userId, Long roleId) {
UserRole userRole = new UserRole();
UserRoleKey key = new UserRoleKey();
key.setUserId(userId);
key.setRoleId(roleId);
userRole.setId(key);
userRoleDao.save(userRole);
}

private Role createRole(boolean isAdmin) {
Role role = new Role();
role.setId(snowflake.nextId());
role.setName(isAdmin ? "管理员" : "普通用户");
role.setDescription(isAdmin ? "超级管理员" : "普通用户");
role.setCreateTime(DateUtil.current(false));
role.setUpdateTime(DateUtil.current(false));
roleDao.save(role);
return role;
}

private User createUser(boolean isAdmin) {
User user = new User();
user.setId(snowflake.nextId());
user.setUsername(isAdmin ? "role" : "user");
user.setNickname(isAdmin ? "管理员" : "普通用户");
user.setPassword(encoder.encode("123456"));
user.setBirthday(DateTime.of("1994-11-22", "yyyy-MM-dd").getTime());
user.setEmail((isAdmin ? "role" : "user") + "@xkcoding.com");
user.setPhone(isAdmin ? "17300000000" : "17300001111");
user.setSex(1);
user.setStatus(1);
user.setCreateTime(DateUtil.current(false));
user.setUpdateTime(DateUtil.current(false));
userDao.save(user);
return user;
}

}

Loading…
Cancel
Save