package service import ( "context" "git.nobla.cn/golang/aeus-admin/models" "git.nobla.cn/golang/aeus-admin/pb" "gorm.io/gorm" ) type ( roleOptions struct { db *gorm.DB } RoleOption func(o *roleOptions) RoleService struct { opts *roleOptions } ) func WithRoleDB(db *gorm.DB) RoleOption { return func(o *roleOptions) { o.db = db } } func (s *RoleService) GetRoleLabels(ctx context.Context, req *pb.GetRoleLabelRequest) (res *pb.GetRoleLabelResponse, err error) { values := make([]*models.Role, 0) if err = s.opts.db.WithContext(ctx).Find(&values).Error; err == nil { res = &pb.GetRoleLabelResponse{ Data: make([]*pb.LabelValue, 0, len(values)), } for _, v := range values { res.Data = append(res.Data, &pb.LabelValue{ Label: v.Label, Value: v.Name, }) } } return } func (s *RoleService) GetRolePermissions(ctx context.Context, req *pb.GetRolePermissionRequest) (res *pb.GetRolePermissionResponse, err error) { permissions := make([]*models.Permission, 0) if err = s.opts.db.WithContext(ctx).Where("id IN (SELECT permission_id FROM role_permissions WHERE role = ?)", req.Role).Find(&permissions).Error; err != nil { return } res = &pb.GetRolePermissionResponse{ Role: req.Role, Permissions: make([]string, 0, len(permissions)), } for _, permission := range permissions { res.Permissions = append(res.Permissions, permission.Permission) } return } func NewRoleService(cbs ...RoleOption) *RoleService { opts := &roleOptions{} for _, cb := range cbs { cb(opts) } return &RoleService{ opts: opts, } }