123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184 |
- package repository
- import (
- "fmt"
- "github.com/pkg/errors"
- "gorm.io/gorm"
- "sghgogs.com/sghblog/authorization-service/domain/model/base"
- req "sghgogs.com/sghblog/authorization-service/domain/model/request"
- pb "sghgogs.com/sghblog/authorization-service/proto"
- )
- func (u *Repository) IsAdminPermissionExists(identifier interface{}) (bool, error) {
- var user req.AdminPermission
- if err := u.db.Where("id = ? OR name = ?", identifier, identifier).First(&user).Error; err != nil {
- if errors.Is(err, gorm.ErrRecordNotFound) {
- return false, nil // 记录不存在,账号不存在
- }
- return false, err // 发生其他错误
- }
- return true, nil
- }
- func (u *Repository) GetAdminPermissionList(query *pb.GetAdminPermissionListRequest) ([]req.AdminPermission, int64, error) {
- permissions := make([]req.AdminPermission, 0)
- var totalCount int64
- tx := u.db.Model(&req.AdminPermission{}).Order("id desc").
- Preload("Roles", "status = ?", pb.StatusEnum_ENABLED)
- if query.Keyword != "" {
- tx.Where("name = ?", query.Keyword)
- }
- if base.IsStatusEnum(query.Status) {
- tx.Where("status = ?", query.Status)
- }
- tx.Count(&totalCount)
- return permissions, totalCount, tx.Limit(int(query.PageSize)).Offset(int((query.Page - 1) * query.PageSize)).Find(&permissions).Error
- }
- func (u *Repository) GetAdminPermissionAll() ([]req.AdminPermission, error) {
- var permissions []req.AdminPermission
- return permissions, u.db.Model(&req.AdminPermission{}).Where("status = ?", pb.StatusEnum_ENABLED).Find(&permissions).Error
- }
- func (u *Repository) GetAdminPermission(query *pb.GetAdminPermissionRequest) (req.AdminPermission, error) {
- var permission req.AdminPermission
- return permission, u.db.
- Model(req.AdminPermission{}).Where("id = ?", query.Id).
- Preload("Roles", "status = ?", pb.StatusEnum_ENABLED).
- First(&permission).Error
- }
- func (u *Repository) CreateAdminPermission(permission req.AdminPermission, roles []int64) error {
- // 开始事务
- tx := u.db.Begin()
- // 错误处理
- defer func() {
- if r := recover(); r != nil {
- tx.Rollback()
- }
- }()
- if err := tx.Create(&permission).Error; err != nil {
- tx.Rollback()
- return err
- }
- if len(roles) > 0 {
- if _, err := u.getAdminPermissionValidIDs(roles); err != nil {
- tx.Rollback()
- return err
- }
- permissionRoles := make([]req.AdminRole, 0)
- for _, ID := range roles {
- permissionRoles = append(permissionRoles, req.AdminRole{ID: ID})
- }
- if err := tx.Model(&permission).Association("Roles").Append(&permissionRoles); err != nil {
- tx.Rollback()
- return err
- }
- }
- return tx.Commit().Error
- }
- func (u *Repository) UpdateAdminPermission(permissionId int64, reqPermission map[string]interface{}, reqRoles []int64) error {
- fmt.Println("reqPermission", reqPermission)
- fmt.Println("reqRoles", reqRoles)
- // 开始事务
- tx := u.db.Begin()
- // 错误处理
- defer func() {
- if r := recover(); r != nil {
- tx.Rollback()
- }
- }()
- var permission req.AdminPermission
- if err := tx.First(&permission, permissionId).Error; err != nil {
- tx.Rollback()
- return err
- }
- if err := tx.Model(&permission).Association("Roles").Clear(); err != nil {
- tx.Rollback()
- return err
- }
- if len(reqRoles) > 0 {
- if _, err := u.getAdminRoleValidIDs(reqRoles); err != nil {
- tx.Rollback()
- return err
- }
- roles := make([]req.AdminRole, 0)
- for _, ID := range reqRoles {
- roles = append(roles, req.AdminRole{ID: ID})
- }
- if err := tx.Model(&permission).Association("Roles").Append(&roles); err != nil {
- tx.Rollback()
- return err
- }
- }
- if err := tx.Model(&permission).Updates(reqPermission).Error; err != nil {
- tx.Rollback()
- return err
- }
- return tx.Commit().Error
- }
- func (u *Repository) DeleteAdminPermission(permissionId int64) error {
- // 开始事务
- tx := u.db.Begin()
- // 错误处理
- defer func() {
- if r := recover(); r != nil {
- tx.Rollback()
- }
- }()
- var permission req.AdminPermission
- // 1.查询角色
- if err := tx.First(&permission, permissionId).Error; err != nil {
- tx.Rollback()
- return err
- }
- // 2 删除关联用户
- if err := tx.Model(&permission).Association("Roles").Clear(); err != nil {
- tx.Rollback()
- return err
- }
- // 4. 彻底删除
- if err := tx.Model(&req.AdminPermission{}).Delete(&req.AdminPermission{
- ID: permissionId,
- }).Error; err != nil {
- tx.Rollback()
- return err
- }
- return tx.Commit().Error
- }
- func (u *Repository) ToggleAdminPermission(query *pb.ToggleAdminPermissionRequest) error {
- // 1. 开启事务
- tx := u.db.Begin()
- // 错误处理
- defer func() {
- if r := recover(); r != nil {
- tx.Rollback()
- }
- }()
- var permission req.AdminPermission
- // 1.查询角色
- if err := tx.First(&permission, query.PermissionId).Error; err != nil {
- tx.Rollback()
- return err
- }
- if query.Status == pb.StatusEnum_DELETED {
- // 1.1删除关联角色
- if err := tx.Model(&permission).Association("Roles").Clear(); err != nil {
- tx.Rollback()
- return err
- }
- }
- // enum
- // 2. 更新状态
- if err := tx.Model(&req.AdminPermission{}).Where("id = ?", query.PermissionId).Updates(map[string]interface{}{
- "status": query.Status,
- }).Error; err != nil {
- tx.Rollback()
- return err
- }
- return tx.Commit().Error
- }
|