first commit
This commit is contained in:
303
repositories/pms_repository.go
Normal file
303
repositories/pms_repository.go
Normal file
@@ -0,0 +1,303 @@
|
||||
// Package repositories/pms_repository.go
|
||||
package repositories
|
||||
|
||||
import (
|
||||
"Quincy_admin/schemas"
|
||||
"database/sql"
|
||||
"errors"
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"github.com/jmoiron/sqlx"
|
||||
)
|
||||
|
||||
type PermissionRepository struct {
|
||||
db *sqlx.DB
|
||||
}
|
||||
|
||||
func NewPermissionRepository(db *sqlx.DB) *PermissionRepository {
|
||||
return &PermissionRepository{db: db}
|
||||
}
|
||||
|
||||
// GetRoleIDByCode 根据scode获取权限角色 ID
|
||||
func (r *PermissionRepository) GetRoleIDByCode(scode string) (int, error) {
|
||||
query := `
|
||||
SELECT
|
||||
COALESCE(tb2.role_id, 0) AS rolecode
|
||||
FROM
|
||||
admin_user tb1
|
||||
LEFT JOIN admin_user_role tb2 ON tb1.id = tb2.user_id
|
||||
WHERE
|
||||
tb1.STATUS != 0
|
||||
AND tb1.sessioncode = ?
|
||||
ORDER BY
|
||||
id
|
||||
LIMIT 1
|
||||
`
|
||||
|
||||
var rolecode int
|
||||
err := r.db.QueryRow(query, scode).Scan(&rolecode)
|
||||
if err != nil {
|
||||
if errors.Is(err, sql.ErrNoRows) {
|
||||
return 0, nil
|
||||
}
|
||||
return 0, err
|
||||
}
|
||||
|
||||
return rolecode, nil
|
||||
}
|
||||
|
||||
// GetRoutesByID 获取侧边栏菜单权限
|
||||
func (r *PermissionRepository) GetRoutesByID(roleID int) ([]*schemas.MenuItems, error) {
|
||||
query := `
|
||||
SELECT
|
||||
m.id,
|
||||
m.parent_id,
|
||||
m.title,
|
||||
m.path,
|
||||
m.component,
|
||||
m.icon,
|
||||
m.sort,
|
||||
m.visible,
|
||||
m.status
|
||||
FROM admin_menu m
|
||||
INNER JOIN admin_role_menu arm ON m.id = arm.menu_id
|
||||
WHERE arm.role_id = ?
|
||||
AND m.status = 1
|
||||
AND m.visible = 1
|
||||
ORDER BY m.parent_id, m.sort
|
||||
`
|
||||
|
||||
var menuItems []*schemas.MenuItems
|
||||
err := r.db.Select(&menuItems, query, roleID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return menuItems, nil
|
||||
}
|
||||
|
||||
// GetRoutes 获取路由权限
|
||||
func (r *PermissionRepository) GetRoutes() ([]*schemas.MenuItems, error) {
|
||||
query := `
|
||||
SELECT
|
||||
m.id,
|
||||
m.parent_id,
|
||||
m.title,
|
||||
m.path,
|
||||
m.component,
|
||||
m.icon,
|
||||
m.sort,
|
||||
m.visible,
|
||||
m.status
|
||||
FROM admin_menu m
|
||||
WHERE m.status = 1
|
||||
AND m.visible = 1
|
||||
ORDER BY m.parent_id, m.sort
|
||||
`
|
||||
|
||||
var menuItems []*schemas.MenuItems
|
||||
err := r.db.Select(&menuItems, query)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return menuItems, nil
|
||||
}
|
||||
|
||||
// GetMenuList 获取菜单列表
|
||||
func (r *PermissionRepository) GetMenuList(page, pageSize int) ([]*schemas.MenuItems, int64, error) {
|
||||
offset := (page - 1) * pageSize
|
||||
|
||||
// 查询总数
|
||||
countQuery := `SELECT COUNT(*) FROM admin_menu`
|
||||
var total int64
|
||||
err := r.db.QueryRow(countQuery).Scan(&total)
|
||||
if err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
|
||||
query := `
|
||||
SELECT
|
||||
m.id,
|
||||
m.parent_id,
|
||||
m.title,
|
||||
m.path,
|
||||
m.component,
|
||||
m.icon,
|
||||
m.sort,
|
||||
m.visible,
|
||||
m.status,
|
||||
m.create_time
|
||||
FROM admin_menu m
|
||||
ORDER BY m.parent_id, m.sort
|
||||
LIMIT ? OFFSET ?
|
||||
`
|
||||
|
||||
var menuItems []*schemas.MenuItems
|
||||
err = r.db.Select(&menuItems, query, pageSize, offset)
|
||||
if err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
|
||||
return menuItems, total, nil
|
||||
}
|
||||
|
||||
// UpdateMenuStatus 启用/停用菜单
|
||||
func (r *PermissionRepository) UpdateMenuStatus(id int, status int) error {
|
||||
query := `
|
||||
UPDATE admin_menu SET status = ? WHERE id = ?
|
||||
`
|
||||
|
||||
result, err := r.db.Exec(query, status, id)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// 检查是否有行被影响,如果没有说明数据不存在
|
||||
rowsAffected, err := result.RowsAffected()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if rowsAffected == 0 {
|
||||
return fmt.Errorf("数据不存在")
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// GetPermission 获取权限信息
|
||||
func (r *PermissionRepository) GetPermission(roleID int, typeStr string) (*[]string, error) {
|
||||
query := `
|
||||
SELECT
|
||||
tb2.name
|
||||
FROM
|
||||
admin_role_permission tb1
|
||||
JOIN admin_permission tb2 ON tb1.permission_id = tb2.id
|
||||
WHERE
|
||||
tb1.role_id = ?
|
||||
AND (? = 'all' OR tb2.type = ?)
|
||||
AND tb2.status != 0
|
||||
`
|
||||
var permissionNames []string
|
||||
err := r.db.Select(&permissionNames, query, roleID, typeStr, typeStr)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &permissionNames, nil
|
||||
}
|
||||
|
||||
func (r *PermissionRepository) GetRolePermission(roleID int, typeStr string) (*[]int, error) {
|
||||
query := `
|
||||
SELECT
|
||||
tb2.id
|
||||
FROM
|
||||
admin_role_permission tb1
|
||||
JOIN admin_permission tb2 ON tb1.permission_id = tb2.id
|
||||
WHERE
|
||||
tb1.role_id = ?
|
||||
AND (? = 'all' OR tb2.type = ?)
|
||||
AND tb2.status != 0
|
||||
`
|
||||
var permissionID []int
|
||||
err := r.db.Select(&permissionID, query, roleID, typeStr, typeStr)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &permissionID, nil
|
||||
}
|
||||
|
||||
// GetAllPermission 获取全部权限信息
|
||||
func (r *PermissionRepository) GetAllPermission(typeStr string) (*[]string, error) {
|
||||
query := `
|
||||
SELECT
|
||||
tb1.name
|
||||
FROM
|
||||
admin_permission tb1
|
||||
WHERE (? = 'all' OR tb1.type = ?)
|
||||
AND tb1.status != 0
|
||||
`
|
||||
var permissionNames []string
|
||||
err := r.db.Select(&permissionNames, query, typeStr, typeStr)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &permissionNames, nil
|
||||
}
|
||||
|
||||
// GetAllNewPermission 获取全部权限信息
|
||||
func (r *PermissionRepository) GetAllNewPermission() ([]*schemas.PermissionItems, error) {
|
||||
query := `
|
||||
SELECT
|
||||
id, name, title, path, type, module, action, parent_id, sort, status
|
||||
FROM admin_permission
|
||||
WHERE status = 1
|
||||
ORDER BY parent_id, sort
|
||||
`
|
||||
|
||||
var PermissionItems []*schemas.PermissionItems
|
||||
err := r.db.Select(&PermissionItems, query)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return PermissionItems, nil
|
||||
}
|
||||
|
||||
// GetRolePermissionIDs 获取角色已有的权限ID列表
|
||||
func (r *PermissionRepository) GetRolePermissionIDs(roleID int) ([]int, error) {
|
||||
query := `
|
||||
SELECT permission_id
|
||||
FROM admin_role_permission
|
||||
WHERE role_id = ?
|
||||
`
|
||||
var permissionIDs []int
|
||||
err := r.db.Select(&permissionIDs, query, roleID)
|
||||
return permissionIDs, err
|
||||
}
|
||||
|
||||
// InsertRolePermissions 批量插入角色权限关联
|
||||
func (r *PermissionRepository) InsertRolePermissions(roleID int, permissionIDs []int) error {
|
||||
if len(permissionIDs) == 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
// 构造批量插入SQL
|
||||
query := `
|
||||
INSERT INTO admin_role_permission (role_id, permission_id)
|
||||
VALUES (?, ?)
|
||||
`
|
||||
|
||||
// 批量插入
|
||||
for _, permID := range permissionIDs {
|
||||
_, err := r.db.Exec(query, roleID, permID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// DeleteRolePermissions 批量删除角色权限关联
|
||||
func (r *PermissionRepository) DeleteRolePermissions(roleID int, permissionIDs []int) error {
|
||||
if len(permissionIDs) == 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
// 构造IN查询的占位符
|
||||
placeholders := make([]string, len(permissionIDs))
|
||||
args := make([]interface{}, 0, len(permissionIDs)+1)
|
||||
args = append(args, roleID) // role_id
|
||||
|
||||
for i, permID := range permissionIDs {
|
||||
placeholders[i] = "?"
|
||||
args = append(args, permID)
|
||||
}
|
||||
|
||||
query := "DELETE FROM admin_role_permission WHERE role_id = ? AND permission_id IN (" +
|
||||
strings.Join(placeholders, ",") + ")"
|
||||
|
||||
_, err := r.db.Exec(query, args...)
|
||||
return err
|
||||
}
|
||||
Reference in New Issue
Block a user