go18/devcloud/mcenter/apps/role/impl/view_permission.go

83 lines
2.3 KiB
Go
Raw Normal View History

2025-06-08 15:11:14 +08:00
package impl
import (
"context"
"122.51.31.227/go-course/go18/devcloud/mcenter/apps/role"
"122.51.31.227/go-course/go18/devcloud/mcenter/apps/view"
"github.com/infraboard/mcube/v2/exception"
"github.com/infraboard/mcube/v2/ioc/config/datasource"
"github.com/infraboard/mcube/v2/types"
"gorm.io/gorm"
)
// 添加角色关联菜单
func (i *RoleServiceImpl) AddViewPermission(ctx context.Context, in *role.AddViewPermissionRequest) ([]*role.ViewPermission, error) {
if err := in.Validate(); err != nil {
return nil, exception.NewBadRequest("validate add view permission error, %s", err)
}
perms := []*role.ViewPermission{}
if err := datasource.DBFromCtx(ctx).Transaction(func(tx *gorm.DB) error {
for i := range in.Items {
item := in.Items[i]
perm := role.NewViewPermission(in.RoleId, item)
if err := tx.Save(perm).Error; err != nil {
return err
}
perms = append(perms, perm)
}
return nil
}); err != nil {
return nil, err
}
return perms, nil
}
// 查询角色关联的视图权限
func (i *RoleServiceImpl) QueryViewPermission(ctx context.Context, in *role.QueryViewPermissionRequest) ([]*role.ViewPermission, error) {
query := datasource.DBFromCtx(ctx).Model(&role.ViewPermission{})
if len(in.RoleIds) > 0 {
query = query.Where("role_id IN ?", in.RoleIds)
}
if len(in.ViewPermissionIds) > 0 {
query = query.Where("in IN ?", in.ViewPermissionIds)
}
perms := []*role.ViewPermission{}
if err := query.Order("created_at desc").
Where("id IN ?", in.RoleIds).
Find(&perms).Error; err != nil {
return nil, err
}
return perms, nil
}
// 移除角色关联菜单
func (i *RoleServiceImpl) RemoveViewPermission(ctx context.Context, in *role.RemoveViewPermissionRequest) ([]*role.ViewPermission, error) {
if err := in.Validate(); err != nil {
return nil, err
}
perms, err := i.QueryViewPermission(ctx, role.NewQueryViewPermissionRequest().AddRoleId(in.RoleId).AddPermissionId(in.ViewPermissionIds...))
if err != nil {
return nil, err
}
if err := datasource.DBFromCtx(ctx).
Where("role_id = ?", in.RoleId).
Where("id IN ?", in.ViewPermissionIds).
Delete(&role.ViewPermission{}).
Error; err != nil {
return nil, err
}
return perms, nil
}
// 查询能匹配到视图菜单
func (i *RoleServiceImpl) QueryMatchedPage(ctx context.Context, in *role.QueryMatchedPageRequest) (*types.Set[*view.Menu], error) {
return nil, nil
}