feat: 添加测试框架和覆盖率报告功能
feat(测试): 新增Playwright和Vitest测试配置 feat(测试): 添加测试覆盖率报告生成功能 feat(测试): 实现前后端测试脚本集成 fix(测试): 修复测试密码不匹配问题 fix(测试): 修正URL等待策略 fix(测试): 调整错误消息选择器 refactor(测试): 重构测试目录结构 refactor(测试): 优化测试用例组织方式 docs: 更新测试报告文档 docs: 添加测试覆盖率报告模板 ci: 添加Docker测试环境配置 ci: 实现测试自动化脚本 chore: 更新依赖版本 chore: 添加测试相关配置文件
This commit is contained in:
+73
@@ -0,0 +1,73 @@
|
||||
package cn.novalon.manage.db.converter;
|
||||
|
||||
import cn.novalon.manage.sys.core.domain.SysPermission;
|
||||
import cn.novalon.manage.db.entity.SysPermissionEntity;
|
||||
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 权限实体转换器
|
||||
*
|
||||
* @author 张翔
|
||||
* @date 2026-03-25
|
||||
*/
|
||||
@Component
|
||||
public class SysPermissionConverter {
|
||||
|
||||
public SysPermission toDomain(SysPermissionEntity entity) {
|
||||
if (entity == null) {
|
||||
return null;
|
||||
}
|
||||
SysPermission domain = new SysPermission();
|
||||
domain.setId(entity.getId());
|
||||
domain.setPermissionName(entity.getPermissionName());
|
||||
domain.setPermissionCode(entity.getPermissionCode());
|
||||
domain.setResource(entity.getResource());
|
||||
domain.setAction(entity.getAction());
|
||||
domain.setDescription(entity.getDescription());
|
||||
domain.setStatus(entity.getStatus());
|
||||
domain.setCreatedAt(entity.getCreatedAt());
|
||||
domain.setUpdatedAt(entity.getUpdatedAt());
|
||||
domain.setDeletedAt(entity.getDeletedAt());
|
||||
return domain;
|
||||
}
|
||||
|
||||
public SysPermissionEntity toEntity(SysPermission domain) {
|
||||
if (domain == null) {
|
||||
return null;
|
||||
}
|
||||
SysPermissionEntity entity = new SysPermissionEntity();
|
||||
entity.setId(domain.getId());
|
||||
entity.setPermissionName(domain.getPermissionName());
|
||||
entity.setPermissionCode(domain.getPermissionCode());
|
||||
entity.setResource(domain.getResource());
|
||||
entity.setAction(domain.getAction());
|
||||
entity.setDescription(domain.getDescription());
|
||||
entity.setStatus(domain.getStatus());
|
||||
entity.setCreatedAt(domain.getCreatedAt());
|
||||
entity.setUpdatedAt(domain.getUpdatedAt());
|
||||
entity.setDeletedAt(domain.getDeletedAt());
|
||||
return entity;
|
||||
}
|
||||
|
||||
public List<SysPermission> toDomainList(List<SysPermissionEntity> entities) {
|
||||
if (entities == null) {
|
||||
return null;
|
||||
}
|
||||
return entities.stream()
|
||||
.map(this::toDomain)
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
public List<SysPermissionEntity> toEntityList(List<SysPermission> domains) {
|
||||
if (domains == null) {
|
||||
return null;
|
||||
}
|
||||
return domains.stream()
|
||||
.map(this::toEntity)
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
}
|
||||
+63
@@ -0,0 +1,63 @@
|
||||
package cn.novalon.manage.db.converter;
|
||||
|
||||
import cn.novalon.manage.sys.core.domain.SysRolePermission;
|
||||
import cn.novalon.manage.db.entity.SysRolePermissionEntity;
|
||||
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 角色权限关联实体转换器
|
||||
*
|
||||
* @author 张翔
|
||||
* @date 2026-03-25
|
||||
*/
|
||||
@Component
|
||||
public class SysRolePermissionConverter {
|
||||
|
||||
public SysRolePermission toDomain(SysRolePermissionEntity entity) {
|
||||
if (entity == null) {
|
||||
return null;
|
||||
}
|
||||
SysRolePermission domain = new SysRolePermission();
|
||||
domain.setId(entity.getId());
|
||||
domain.setRoleId(entity.getRoleId());
|
||||
domain.setPermissionId(entity.getPermissionId());
|
||||
domain.setCreatedAt(entity.getCreatedAt());
|
||||
domain.setUpdatedAt(entity.getUpdatedAt());
|
||||
return domain;
|
||||
}
|
||||
|
||||
public SysRolePermissionEntity toEntity(SysRolePermission domain) {
|
||||
if (domain == null) {
|
||||
return null;
|
||||
}
|
||||
SysRolePermissionEntity entity = new SysRolePermissionEntity();
|
||||
entity.setId(domain.getId());
|
||||
entity.setRoleId(domain.getRoleId());
|
||||
entity.setPermissionId(domain.getPermissionId());
|
||||
entity.setCreatedAt(domain.getCreatedAt());
|
||||
entity.setUpdatedAt(domain.getUpdatedAt());
|
||||
return entity;
|
||||
}
|
||||
|
||||
public List<SysRolePermission> toDomainList(List<SysRolePermissionEntity> entities) {
|
||||
if (entities == null) {
|
||||
return null;
|
||||
}
|
||||
return entities.stream()
|
||||
.map(this::toDomain)
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
public List<SysRolePermissionEntity> toEntityList(List<SysRolePermission> domains) {
|
||||
if (domains == null) {
|
||||
return null;
|
||||
}
|
||||
return domains.stream()
|
||||
.map(this::toEntity)
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
}
|
||||
+2
@@ -22,4 +22,6 @@ public interface SysLoginLogDao extends R2dbcRepository<SysLoginLogEntity, Long>
|
||||
Mono<Long> count();
|
||||
|
||||
Mono<Long> countByUsername(String username);
|
||||
|
||||
Mono<Long> countByLoginTimeBetween(LocalDateTime startTime, LocalDateTime endTime);
|
||||
}
|
||||
|
||||
+38
@@ -0,0 +1,38 @@
|
||||
package cn.novalon.manage.db.dao;
|
||||
|
||||
import cn.novalon.manage.db.entity.SysPermissionEntity;
|
||||
import org.springframework.data.domain.Sort;
|
||||
import org.springframework.data.r2dbc.repository.R2dbcRepository;
|
||||
import org.springframework.stereotype.Repository;
|
||||
import reactor.core.publisher.Flux;
|
||||
import reactor.core.publisher.Mono;
|
||||
|
||||
@Repository
|
||||
public interface SysPermissionDao extends R2dbcRepository<SysPermissionEntity, Long> {
|
||||
|
||||
Mono<SysPermissionEntity> findByIdAndDeletedAtIsNull(Long id);
|
||||
|
||||
Mono<SysPermissionEntity> findByPermissionCodeAndDeletedAtIsNull(String permissionCode);
|
||||
|
||||
Flux<SysPermissionEntity> findByDeletedAtIsNull();
|
||||
|
||||
Flux<SysPermissionEntity> findByDeletedAtIsNull(Sort sort);
|
||||
|
||||
Mono<Long> countByDeletedAtIsNull();
|
||||
|
||||
Mono<Boolean> existsByPermissionCodeAndDeletedAtIsNull(String permissionCode);
|
||||
|
||||
@org.springframework.data.r2dbc.repository.Query("""
|
||||
SELECT p.* FROM sys_permission p
|
||||
INNER JOIN sys_role_permission rp ON p.id = rp.permission_id
|
||||
WHERE rp.role_id = :roleId AND p.deleted_at IS NULL
|
||||
""")
|
||||
Flux<SysPermissionEntity> findByRoleId(Long roleId);
|
||||
|
||||
@org.springframework.data.r2dbc.repository.Query("""
|
||||
SELECT DISTINCT p.* FROM sys_permission p
|
||||
INNER JOIN sys_role_permission rp ON p.id = rp.permission_id
|
||||
WHERE rp.role_id IN (:roleIds) AND p.deleted_at IS NULL
|
||||
""")
|
||||
Flux<SysPermissionEntity> findByRoleIds(java.util.List<Long> roleIds);
|
||||
}
|
||||
+41
@@ -0,0 +1,41 @@
|
||||
package cn.novalon.manage.db.dao;
|
||||
|
||||
import cn.novalon.manage.db.entity.SysRolePermissionEntity;
|
||||
import org.springframework.data.r2dbc.repository.R2dbcRepository;
|
||||
import org.springframework.stereotype.Repository;
|
||||
import reactor.core.publisher.Flux;
|
||||
import reactor.core.publisher.Mono;
|
||||
|
||||
@Repository
|
||||
public interface SysRolePermissionDao extends R2dbcRepository<SysRolePermissionEntity, Long> {
|
||||
|
||||
Flux<SysRolePermissionEntity> findByRoleId(Long roleId);
|
||||
|
||||
Flux<SysRolePermissionEntity> findByPermissionId(Long permissionId);
|
||||
|
||||
Flux<Long> findPermissionIdsByRoleId(Long roleId);
|
||||
|
||||
Flux<Long> findRoleIdsByPermissionId(Long permissionId);
|
||||
|
||||
@org.springframework.data.r2dbc.repository.Query("""
|
||||
DELETE FROM sys_role_permission
|
||||
WHERE role_id = :roleId AND permission_id IN (:permissionIds)
|
||||
""")
|
||||
Mono<Void> deleteByRoleIdAndPermissionIds(Long roleId, java.util.List<Long> permissionIds);
|
||||
|
||||
@org.springframework.data.r2dbc.repository.Query("""
|
||||
DELETE FROM sys_role_permission
|
||||
WHERE permission_id = :permissionId AND role_id IN (:roleIds)
|
||||
""")
|
||||
Mono<Void> deleteByPermissionIdAndRoleIds(Long permissionId, java.util.List<Long> roleIds);
|
||||
|
||||
@org.springframework.data.r2dbc.repository.Query("""
|
||||
DELETE FROM sys_role_permission WHERE role_id = :roleId
|
||||
""")
|
||||
Mono<Void> deleteByRoleId(Long roleId);
|
||||
|
||||
@org.springframework.data.r2dbc.repository.Query("""
|
||||
DELETE FROM sys_role_permission WHERE permission_id = :permissionId
|
||||
""")
|
||||
Mono<Void> deleteByPermissionId(Long permissionId);
|
||||
}
|
||||
+80
@@ -0,0 +1,80 @@
|
||||
package cn.novalon.manage.db.entity;
|
||||
|
||||
import org.springframework.data.relational.core.mapping.Column;
|
||||
import org.springframework.data.relational.core.mapping.Table;
|
||||
|
||||
/**
|
||||
* 权限数据库实体类
|
||||
*
|
||||
* @author 张翔
|
||||
* @date 2026-03-25
|
||||
*/
|
||||
@Table("sys_permission")
|
||||
public class SysPermissionEntity extends BaseEntity {
|
||||
|
||||
@Column("permission_name")
|
||||
private String permissionName;
|
||||
|
||||
@Column("permission_code")
|
||||
private String permissionCode;
|
||||
|
||||
@Column("resource")
|
||||
private String resource;
|
||||
|
||||
@Column("action")
|
||||
private String action;
|
||||
|
||||
@Column("description")
|
||||
private String description;
|
||||
|
||||
@Column("status")
|
||||
private Integer status;
|
||||
|
||||
public String getPermissionName() {
|
||||
return permissionName;
|
||||
}
|
||||
|
||||
public void setPermissionName(String permissionName) {
|
||||
this.permissionName = permissionName;
|
||||
}
|
||||
|
||||
public String getPermissionCode() {
|
||||
return permissionCode;
|
||||
}
|
||||
|
||||
public void setPermissionCode(String permissionCode) {
|
||||
this.permissionCode = permissionCode;
|
||||
}
|
||||
|
||||
public String getResource() {
|
||||
return resource;
|
||||
}
|
||||
|
||||
public void setResource(String resource) {
|
||||
this.resource = resource;
|
||||
}
|
||||
|
||||
public String getAction() {
|
||||
return action;
|
||||
}
|
||||
|
||||
public void setAction(String action) {
|
||||
this.action = action;
|
||||
}
|
||||
|
||||
public String getDescription() {
|
||||
return description;
|
||||
}
|
||||
|
||||
public void setDescription(String description) {
|
||||
this.description = description;
|
||||
}
|
||||
|
||||
public Integer getStatus() {
|
||||
return status;
|
||||
}
|
||||
|
||||
public void setStatus(Integer status) {
|
||||
this.status = status;
|
||||
}
|
||||
}
|
||||
+36
@@ -0,0 +1,36 @@
|
||||
package cn.novalon.manage.db.entity;
|
||||
|
||||
import org.springframework.data.relational.core.mapping.Column;
|
||||
import org.springframework.data.relational.core.mapping.Table;
|
||||
|
||||
/**
|
||||
* 角色权限关联数据库实体类
|
||||
*
|
||||
* @author 张翔
|
||||
* @date 2026-03-25
|
||||
*/
|
||||
@Table("sys_role_permission")
|
||||
public class SysRolePermissionEntity extends BaseEntity {
|
||||
|
||||
@Column("role_id")
|
||||
private Long roleId;
|
||||
|
||||
@Column("permission_id")
|
||||
private Long permissionId;
|
||||
|
||||
public Long getRoleId() {
|
||||
return roleId;
|
||||
}
|
||||
|
||||
public void setRoleId(Long roleId) {
|
||||
this.roleId = roleId;
|
||||
}
|
||||
|
||||
public Long getPermissionId() {
|
||||
return permissionId;
|
||||
}
|
||||
|
||||
public void setPermissionId(Long permissionId) {
|
||||
this.permissionId = permissionId;
|
||||
}
|
||||
}
|
||||
+97
@@ -0,0 +1,97 @@
|
||||
package cn.novalon.manage.db.repository;
|
||||
|
||||
import cn.novalon.manage.sys.core.domain.SysPermission;
|
||||
import cn.novalon.manage.sys.core.repository.ISysPermissionRepository;
|
||||
import cn.novalon.manage.db.converter.SysPermissionConverter;
|
||||
import cn.novalon.manage.db.dao.SysPermissionDao;
|
||||
import org.springframework.data.domain.Sort;
|
||||
import org.springframework.stereotype.Repository;
|
||||
import reactor.core.publisher.Flux;
|
||||
import reactor.core.publisher.Mono;
|
||||
|
||||
/**
|
||||
* 权限仓储实现类
|
||||
*
|
||||
* @author 张翔
|
||||
* @date 2026-03-25
|
||||
*/
|
||||
@Repository
|
||||
public class SysPermissionRepository implements ISysPermissionRepository {
|
||||
|
||||
private final SysPermissionDao sysPermissionDao;
|
||||
private final SysPermissionConverter sysPermissionConverter;
|
||||
|
||||
public SysPermissionRepository(SysPermissionDao sysPermissionDao, SysPermissionConverter sysPermissionConverter) {
|
||||
this.sysPermissionDao = sysPermissionDao;
|
||||
this.sysPermissionConverter = sysPermissionConverter;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Mono<SysPermission> findById(Long id) {
|
||||
return sysPermissionDao.findByIdAndDeletedAtIsNull(id)
|
||||
.map(sysPermissionConverter::toDomain);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Mono<SysPermission> findByIdIncludingDeleted(Long id) {
|
||||
return sysPermissionDao.findById(id)
|
||||
.map(sysPermissionConverter::toDomain);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Mono<SysPermission> save(SysPermission sysPermission) {
|
||||
return sysPermissionDao.save(sysPermissionConverter.toEntity(sysPermission))
|
||||
.map(sysPermissionConverter::toDomain);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Mono<Void> deleteById(Long id) {
|
||||
return sysPermissionDao.deleteById(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Flux<SysPermission> findAll() {
|
||||
return sysPermissionDao.findByDeletedAtIsNull()
|
||||
.map(sysPermissionConverter::toDomain);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Flux<SysPermission> findAll(Sort sort) {
|
||||
return sysPermissionDao.findByDeletedAtIsNull(sort)
|
||||
.map(sysPermissionConverter::toDomain);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Mono<SysPermission> findByPermissionCode(String permissionCode) {
|
||||
return sysPermissionDao.findByPermissionCodeAndDeletedAtIsNull(permissionCode)
|
||||
.map(sysPermissionConverter::toDomain);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Mono<Long> count() {
|
||||
return sysPermissionDao.countByDeletedAtIsNull();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Mono<Boolean> existsByPermissionCode(String permissionCode) {
|
||||
return sysPermissionDao.existsByPermissionCodeAndDeletedAtIsNull(permissionCode);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Mono<SysPermission> updatePermission(SysPermission permission) {
|
||||
return sysPermissionDao.save(sysPermissionConverter.toEntity(permission))
|
||||
.map(sysPermissionConverter::toDomain);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Flux<SysPermission> findByRoleId(Long roleId) {
|
||||
return sysPermissionDao.findByRoleId(roleId)
|
||||
.map(sysPermissionConverter::toDomain);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Flux<SysPermission> findByRoleIds(java.util.List<Long> roleIds) {
|
||||
return sysPermissionDao.findByRoleIds(roleIds)
|
||||
.map(sysPermissionConverter::toDomain);
|
||||
}
|
||||
}
|
||||
+80
@@ -0,0 +1,80 @@
|
||||
package cn.novalon.manage.db.repository;
|
||||
|
||||
import cn.novalon.manage.sys.core.domain.SysRolePermission;
|
||||
import cn.novalon.manage.sys.core.repository.ISysRolePermissionRepository;
|
||||
import cn.novalon.manage.db.converter.SysRolePermissionConverter;
|
||||
import cn.novalon.manage.db.dao.SysRolePermissionDao;
|
||||
import org.springframework.stereotype.Repository;
|
||||
import reactor.core.publisher.Flux;
|
||||
import reactor.core.publisher.Mono;
|
||||
|
||||
/**
|
||||
* 角色权限关联仓储实现类
|
||||
*
|
||||
* @author 张翔
|
||||
* @date 2026-03-25
|
||||
*/
|
||||
@Repository
|
||||
public class SysRolePermissionRepository implements ISysRolePermissionRepository {
|
||||
|
||||
private final SysRolePermissionDao sysRolePermissionDao;
|
||||
private final SysRolePermissionConverter sysRolePermissionConverter;
|
||||
|
||||
public SysRolePermissionRepository(SysRolePermissionDao sysRolePermissionDao, SysRolePermissionConverter sysRolePermissionConverter) {
|
||||
this.sysRolePermissionDao = sysRolePermissionDao;
|
||||
this.sysRolePermissionConverter = sysRolePermissionConverter;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Mono<SysRolePermission> save(SysRolePermission rolePermission) {
|
||||
return sysRolePermissionDao.save(sysRolePermissionConverter.toEntity(rolePermission))
|
||||
.map(sysRolePermissionConverter::toDomain);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Mono<Void> deleteById(Long id) {
|
||||
return sysRolePermissionDao.deleteById(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Mono<Void> deleteByRoleId(Long roleId) {
|
||||
return sysRolePermissionDao.deleteByRoleId(roleId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Mono<Void> deleteByPermissionId(Long permissionId) {
|
||||
return sysRolePermissionDao.deleteByPermissionId(permissionId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Flux<SysRolePermission> findByRoleId(Long roleId) {
|
||||
return sysRolePermissionDao.findByRoleId(roleId)
|
||||
.map(sysRolePermissionConverter::toDomain);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Flux<SysRolePermission> findByPermissionId(Long permissionId) {
|
||||
return sysRolePermissionDao.findByPermissionId(permissionId)
|
||||
.map(sysRolePermissionConverter::toDomain);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Flux<Long> findPermissionIdsByRoleId(Long roleId) {
|
||||
return sysRolePermissionDao.findPermissionIdsByRoleId(roleId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Flux<Long> findRoleIdsByPermissionId(Long permissionId) {
|
||||
return sysRolePermissionDao.findRoleIdsByPermissionId(permissionId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Mono<Void> deleteByRoleIdAndPermissionIds(Long roleId, java.util.List<Long> permissionIds) {
|
||||
return sysRolePermissionDao.deleteByRoleIdAndPermissionIds(roleId, permissionIds);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Mono<Void> deleteByPermissionIdAndRoleIds(Long permissionId, java.util.List<Long> roleIds) {
|
||||
return sysRolePermissionDao.deleteByPermissionIdAndRoleIds(permissionId, roleIds);
|
||||
}
|
||||
}
|
||||
+104
@@ -0,0 +1,104 @@
|
||||
-- Novalon管理系统权限功能数据库迁移脚本
|
||||
-- 版本: V4
|
||||
-- 描述: 创建权限管理相关表结构
|
||||
|
||||
-- 权限表
|
||||
CREATE TABLE IF NOT EXISTS sys_permission (
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
permission_name VARCHAR(100) NOT NULL,
|
||||
permission_code VARCHAR(100) NOT NULL UNIQUE,
|
||||
resource VARCHAR(200) NOT NULL,
|
||||
action VARCHAR(50) NOT NULL,
|
||||
description VARCHAR(500),
|
||||
status INTEGER DEFAULT 1,
|
||||
create_by VARCHAR(50),
|
||||
update_by VARCHAR(50),
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
deleted_at TIMESTAMP
|
||||
);
|
||||
|
||||
-- 角色权限关联表
|
||||
CREATE TABLE IF NOT EXISTS sys_role_permission (
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
role_id BIGINT NOT NULL,
|
||||
permission_id BIGINT NOT NULL,
|
||||
create_by VARCHAR(50),
|
||||
update_by VARCHAR(50),
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (role_id) REFERENCES roles(id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (permission_id) REFERENCES sys_permission(id) ON DELETE CASCADE,
|
||||
UNIQUE (role_id, permission_id)
|
||||
);
|
||||
|
||||
-- 表注释
|
||||
COMMENT ON TABLE sys_permission IS '系统权限表';
|
||||
COMMENT ON COLUMN sys_permission.id IS '主键ID';
|
||||
COMMENT ON COLUMN sys_permission.permission_name IS '权限名称';
|
||||
COMMENT ON COLUMN sys_permission.permission_code IS '权限编码';
|
||||
COMMENT ON COLUMN sys_permission.resource IS '资源路径';
|
||||
COMMENT ON COLUMN sys_permission.action IS '操作类型';
|
||||
COMMENT ON COLUMN sys_permission.description IS '权限描述';
|
||||
COMMENT ON COLUMN sys_permission.status IS '状态:0-禁用,1-正常';
|
||||
COMMENT ON COLUMN sys_permission.create_by IS '创建者';
|
||||
COMMENT ON COLUMN sys_permission.update_by IS '更新者';
|
||||
COMMENT ON COLUMN sys_permission.created_at IS '创建时间';
|
||||
COMMENT ON COLUMN sys_permission.updated_at IS '更新时间';
|
||||
COMMENT ON COLUMN sys_permission.deleted_at IS '删除时间';
|
||||
|
||||
COMMENT ON TABLE sys_role_permission IS '角色权限关联表';
|
||||
COMMENT ON COLUMN sys_role_permission.id IS '主键ID';
|
||||
COMMENT ON COLUMN sys_role_permission.role_id IS '角色ID';
|
||||
COMMENT ON COLUMN sys_role_permission.permission_id IS '权限ID';
|
||||
COMMENT ON COLUMN sys_role_permission.create_by IS '创建者';
|
||||
COMMENT ON COLUMN sys_role_permission.update_by IS '更新者';
|
||||
COMMENT ON COLUMN sys_role_permission.created_at IS '创建时间';
|
||||
COMMENT ON COLUMN sys_role_permission.updated_at IS '更新时间';
|
||||
|
||||
-- 创建索引
|
||||
CREATE INDEX IF NOT EXISTS idx_permission_code ON sys_permission(permission_code);
|
||||
CREATE INDEX IF NOT EXISTS idx_permission_resource ON sys_permission(resource);
|
||||
CREATE INDEX IF NOT EXISTS idx_permission_status ON sys_permission(status);
|
||||
CREATE INDEX IF NOT EXISTS idx_role_permission_role_id ON sys_role_permission(role_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_role_permission_permission_id ON sys_role_permission(permission_id);
|
||||
|
||||
-- 插入初始权限数据
|
||||
INSERT INTO sys_permission (permission_name, permission_code, resource, action, description, status) VALUES
|
||||
('用户查看', 'system:user:view', '/api/users', 'GET', '查看用户列表', 1),
|
||||
('用户创建', 'system:user:create', '/api/users', 'POST', '创建用户', 1),
|
||||
('用户编辑', 'system:user:edit', '/api/users', 'PUT', '编辑用户', 1),
|
||||
('用户删除', 'system:user:delete', '/api/users', 'DELETE', '删除用户', 1),
|
||||
('角色查看', 'system:role:view', '/api/roles', 'GET', '查看角色列表', 1),
|
||||
('角色创建', 'system:role:create', '/api/roles', 'POST', '创建角色', 1),
|
||||
('角色编辑', 'system:role:edit', '/api/roles', 'PUT', '编辑角色', 1),
|
||||
('角色删除', 'system:role:delete', '/api/roles', 'DELETE', '删除角色', 1),
|
||||
('角色分配权限', 'system:role:assign', '/api/roles/*/permissions', 'POST', '为角色分配权限', 1),
|
||||
('权限查看', 'system:permission:view', '/api/permissions', 'GET', '查看权限列表', 1),
|
||||
('权限创建', 'system:permission:create', '/api/permissions', 'POST', '创建权限', 1),
|
||||
('权限编辑', 'system:permission:edit', '/api/permissions', 'PUT', '编辑权限', 1),
|
||||
('权限删除', 'system:permission:delete', '/api/permissions', 'DELETE', '删除权限', 1),
|
||||
('菜单查看', 'system:menu:view', '/api/menus', 'GET', '查看菜单列表', 1),
|
||||
('菜单创建', 'system:menu:create', '/api/menus', 'POST', '创建菜单', 1),
|
||||
('菜单编辑', 'system:menu:edit', '/api/menus', 'PUT', '编辑菜单', 1),
|
||||
('菜单删除', 'system:menu:delete', '/api/menus', 'DELETE', '删除菜单', 1),
|
||||
('字典查看', 'system:dict:view', '/api/dict', 'GET', '查看字典列表', 1),
|
||||
('字典创建', 'system:dict:create', '/api/dict', 'POST', '创建字典', 1),
|
||||
('字典编辑', 'system:dict:edit', '/api/dict', 'PUT', '编辑字典', 1),
|
||||
('字典删除', 'system:dict:delete', '/api/dict', 'DELETE', '删除字典', 1),
|
||||
('配置查看', 'system:config:view', '/api/config', 'GET', '查看系统配置', 1),
|
||||
('配置创建', 'system:config:create', '/api/config', 'POST', '创建系统配置', 1),
|
||||
('配置编辑', 'system:config:edit', '/api/config', 'PUT', '编辑系统配置', 1),
|
||||
('配置删除', 'system:config:delete', '/api/config', 'DELETE', '删除系统配置', 1),
|
||||
('日志查看', 'system:log:view', '/api/logs', 'GET', '查看日志', 1),
|
||||
('文件上传', 'system:file:upload', '/api/files/upload', 'POST', '上传文件', 1),
|
||||
('文件下载', 'system:file:download', '/api/files/download', 'GET', '下载文件', 1),
|
||||
('文件删除', 'system:file:delete', '/api/files', 'DELETE', '删除文件', 1),
|
||||
('公告查看', 'system:notice:view', '/api/notices', 'GET', '查看公告', 1),
|
||||
('公告创建', 'system:notice:create', '/api/notices', 'POST', '创建公告', 1),
|
||||
('公告编辑', 'system:notice:edit', '/api/notices', 'PUT', '编辑公告', 1),
|
||||
('公告删除', 'system:notice:delete', '/api/notices', 'DELETE', '删除公告', 1);
|
||||
|
||||
-- 为管理员角色分配所有权限
|
||||
INSERT INTO sys_role_permission (role_id, permission_id)
|
||||
SELECT 1, id FROM sys_permission WHERE status = 1;
|
||||
Reference in New Issue
Block a user