aeus-admin/service/role.go

68 lines
1.5 KiB
Go

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,
}
}