120 lines
3.3 KiB
Go
120 lines
3.3 KiB
Go
|
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
|
||
|
}
|