You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
71 lines
2.1 KiB
71 lines
2.1 KiB
package model
|
|
|
|
import (
|
|
"time"
|
|
|
|
"go.uber.org/zap"
|
|
)
|
|
|
|
type GroupPermission struct {
|
|
Id int64 `form:"id" json:"id,omitempty" gorm:"primaryKey;autoIncrement;column:id;comment:自增主键;"`
|
|
GroupId int64 `form:"group_id" json:"group_id,omitempty" gorm:"index:group_permission,unique;index:group_id;column:group_id;comment:组ID;"`
|
|
PermissionId int64 `form:"permission_id" json:"permission_id,omitempty" gorm:"index:group_permission,unique;column:permission_id;comment:权限ID;"`
|
|
CreatedAt *time.Time `form:"created_at" json:"created_at,omitempty" gorm:"column:created_at;type:datetime;comment:创建时间;"`
|
|
UpdatedAt *time.Time `form:"updated_at" json:"updated_at,omitempty" gorm:"column:updated_at;type:datetime;comment:更新时间;"`
|
|
}
|
|
|
|
func (GroupPermission) TableName() string {
|
|
return tablePrefix + "group_permission"
|
|
}
|
|
|
|
// GetGroupPermissinsByGroupId 根据用户组ID获取用户组权限
|
|
func (m *DBModel) GetGroupPermissinsByGroupId(groupId int64) (groupPermissions []*GroupPermission, err error) {
|
|
err = m.db.Where("group_id = ?", groupId).Find(&groupPermissions).Error
|
|
return
|
|
}
|
|
|
|
// 设置权限
|
|
func (m *DBModel) UpdateGroupPermissions(groupdId int64, permissionIds []int64) (err error) {
|
|
sess := m.db.Begin()
|
|
defer func() {
|
|
if err != nil {
|
|
sess.Rollback()
|
|
} else {
|
|
sess.Commit()
|
|
}
|
|
}()
|
|
|
|
// 删除旧的权限
|
|
err = sess.Where("group_id = ?", groupdId).Delete(&GroupPermission{}).Error
|
|
if err != nil {
|
|
m.logger.Error("delete old permission", zap.Error(err))
|
|
return
|
|
}
|
|
|
|
// 添加新的权限
|
|
var (
|
|
permissions []GroupPermission
|
|
existPermission = make(map[int64]struct{})
|
|
)
|
|
|
|
// 去重
|
|
for _, permissionId := range permissionIds {
|
|
if _, ok := existPermission[permissionId]; !ok && permissionId > 0 {
|
|
existPermission[permissionId] = struct{}{}
|
|
permissions = append(permissions, GroupPermission{GroupId: groupdId, PermissionId: permissionId})
|
|
}
|
|
}
|
|
|
|
if len(permissions) == 0 {
|
|
return
|
|
}
|
|
|
|
err = sess.Create(&permissions).Error
|
|
if err != nil {
|
|
m.logger.Error("create group permission", zap.Error(err))
|
|
return
|
|
}
|
|
|
|
return
|
|
}
|