app-cloudep-permission-server/pkg/usecase/role_permission.go

120 lines
3.3 KiB
Go
Raw Normal View History

package usecase
import (
"context"
"code.30cm.net/digimon/app-cloudep-permission-server/pkg/domain/entity"
"code.30cm.net/digimon/app-cloudep-permission-server/pkg/domain/permission"
"code.30cm.net/digimon/app-cloudep-permission-server/pkg/domain/repository"
"code.30cm.net/digimon/app-cloudep-permission-server/pkg/domain/usecase"
)
type RolePermissionUseCaseParam struct {
rolePermissionRepository repository.RolePermissionRepository
permissionRepository repository.PermissionRepository
roleRepository repository.RoleRepository
// userRoleRepository repository.UserRoleRepository
}
type RolePermissionUseCase struct {
RolePermissionUseCaseParam
}
func NewRolePermissionUseCase(param RolePermissionUseCaseParam) usecase.RolePermissionUseCase {
return &RolePermissionUseCase{
RolePermissionUseCaseParam: param,
}
}
// Get 拿到這個 Role ID 底下有哪些權限是開的
func (use *RolePermissionUseCase) Get(ctx context.Context, roleID string) (permission.Permissions, error) {
// 拿到這個 role 底下有哪些 Permission
rolePermission, err := use.rolePermissionRepository.Get(ctx, roleID)
if err != nil {
return nil, err
}
p, err := use.permissionRepository.GetAll(ctx, nil) // -> 開的關的 permission 都會拿到
if err != nil {
return nil, err
}
return GeneratePermissionTree(p).getFullParentPermission(rolePermission), nil
}
func (use *RolePermissionUseCase) Create(ctx context.Context, roleID string, permissions permission.Permissions) error {
// 如果加了一個,要把上面的節點都加入才可以
permissionIDs, err := use.getPermissionIDs(ctx, permissions)
if err != nil {
return err
}
insert := make([]entity.RolePermission, 0, len(permissions))
for _, permissionID := range permissionIDs {
insert = append(insert, entity.RolePermission{
RoleID: roleID,
PermissionID: permissionID,
})
}
err = use.rolePermissionRepository.Create(ctx, insert)
if err != nil {
return err
}
return nil
}
func (use *RolePermissionUseCase) getPermissionIDs(ctx context.Context, setPermissions permission.Permissions) ([]string, error) {
p, err := use.permissionRepository.GetAll(ctx, nil)
if err != nil {
return nil, err
}
return GeneratePermissionTree(p).getFullParentPermissionIDs(setPermissions)
}
func (use *RolePermissionUseCase) Delete(ctx context.Context, roleID string, permissions permission.Permissions) error {
// 如果加了一個,要把上面的節點都加入才可以
permissionIDs, err := use.getPermissionIDs(ctx, permissions)
if err != nil {
return err
}
err = use.rolePermissionRepository.Delete(ctx, roleID, permissionIDs)
if err != nil {
return err
}
return nil
}
func (use *RolePermissionUseCase) List(ctx context.Context, req usecase.ListQuery) (usecase.RoleResp, error) {
roles, total, err := use.roleRepository.List(ctx, repository.ListQuery{
PageIndex: req.PageIndex,
PageSize: req.PageSize,
ClientID: req.ClientID,
UID: req.UID,
Name: req.Name,
Status: req.Status,
})
if err != nil {
return usecase.RoleResp{}, err
}
result := make([]usecase.Role, 0, len(roles))
for _, item := range roles {
result = append(result, usecase.Role{
ID: item.ID.Hex(),
UID: item.UID,
Name: item.Name,
Status: item.Status,
ClientID: item.ClientID,
})
}
return usecase.RoleResp{
Total: total,
Roles: result,
}, nil
}