feat:permission base usecase

This commit is contained in:
王性驊 2025-02-26 23:29:00 +08:00
parent cccad97512
commit eb85982ef1
41 changed files with 1520 additions and 85 deletions

View File

@ -118,11 +118,12 @@ issues:
- contextcheck
exclude-dirs:
- internal/model
- internal/mock
- internal/logic
exclude-files:
- .*_test.go
- permission_tree.go
- role_permission.go

View File

@ -2,7 +2,8 @@ package main
import (
"flag"
"fmt"
"github.com/zeromicro/go-zero/core/logx"
"code.30cm.net/digimon/app-cloudep-permission-server/gen_result/pb/permission"
"code.30cm.net/digimon/app-cloudep-permission-server/internal/config"
@ -34,6 +35,6 @@ func main() {
})
defer s.Stop()
fmt.Printf("Starting rpc server at %s...\n", c.ListenOn)
logx.Infof("Starting rpc server at %s...\n", c.ListenOn)
s.Start()
}

View File

@ -5,23 +5,22 @@ import (
"go.mongodb.org/mongo-driver/bson/primitive"
)
// 1. UID (使用者ID)
//
//1. UID (使用者ID)
// 這個欄位通常代表創建這個角色的使用者,可能的用途:
// • 追蹤角色的建立者:確保知道誰創建了這個角色。
// • 限定角色的管理範圍:例如,只有 UID 對應的使用者可以修改或刪除這個角色。
// • 支援多租戶 (Multi-Tenancy):如果一個 UID 只能看到自己創建的角色,那這個系統可能是多租戶架構的一部分。
//
//這個欄位通常代表創建這個角色的使用者,可能的用途:
//• 追蹤角色的建立者:確保知道誰創建了這個角色。
//• 限定角色的管理範圍:例如,只有 UID 對應的使用者可以修改或刪除這個角色。
//• 支援多租戶 (Multi-Tenancy):如果一個 UID 只能看到自己創建的角色,那這個系統可能是多租戶架構的一部分。
// 2. ClientID (客戶端ID)
//
//2. ClientID (客戶端ID)
//
//這個欄位通常代表該角色所屬的應用程式或客戶端,可能的用途:
//• 多租戶架構 (Multi-Tenancy):不同 ClientID 的角色可能互相隔離,確保不同組織不會影響彼此的角色權限。
//• 對應 OAuth 2.0 或 OpenID Connect
//• 在 OAuth2 / OIDC 的架構下,每個應用程式 (client_id) 可能有不同的角色和權限。
//• 例如client_id 為 web-app-1 的角色與 client_id 為 mobile-app-1 的角色可能完全不同。
//• API 權限控制:
//• ClientID 可能是用來限制某些角色只能在特定應用程式中被使用,例如 Web 端和行動端的角色不同。
// 這個欄位通常代表該角色所屬的應用程式或客戶端,可能的用途:
// • 多租戶架構 (Multi-Tenancy):不同 ClientID 的角色可能互相隔離,確保不同組織不會影響彼此的角色權限。
// • 對應 OAuth 2.0 或 OpenID Connect
// • 在 OAuth2 / OIDC 的架構下,每個應用程式 (client_id) 可能有不同的角色和權限。
// • 例如client_id 為 web-app-1 的角色與 client_id 為 mobile-app-1 的角色可能完全不同。
// • API 權限控制:
// • ClientID 可能是用來限制某些角色只能在特定應用程式中被使用,例如 Web 端和行動端的角色不同。
// Role 是這樣,如果有綁定某個 UID
type Role struct {

View File

@ -20,6 +20,16 @@ const (
TokenGetErrorCode
FailedToGetRolePermission
FailedToGetUserRole
FailedToGetUserRoleByUID
FailedToCreateUserRole
FailedToUpdateUserRole
FailedToListRole
FailedToGetRoleByID
FailedToGetRoleByUID
FailedToCreateRole
FailedToUpdateRole
FailedToDelRole
)
func TokenError(ec ers.ErrorCode, s ...string) *ers.LibError {

View File

@ -1,8 +1,9 @@
package rbac
import (
"github.com/stretchr/testify/assert"
"testing"
"github.com/stretchr/testify/assert"
)
func TestRule_ToString(t *testing.T) {

View File

@ -1,9 +1,10 @@
package repository
import (
"context"
"code.30cm.net/digimon/app-cloudep-permission-server/pkg/domain/entity"
"code.30cm.net/digimon/app-cloudep-permission-server/pkg/domain/permission"
"context"
"go.mongodb.org/mongo-driver/mongo"
)

View File

@ -1,9 +1,10 @@
package repository
import (
"context"
"code.30cm.net/digimon/app-cloudep-permission-server/pkg/domain/entity"
"code.30cm.net/digimon/app-cloudep-permission-server/pkg/domain/permission"
"context"
"go.mongodb.org/mongo-driver/mongo"
)

View File

@ -1,8 +1,9 @@
package repository
import (
"code.30cm.net/digimon/app-cloudep-permission-server/pkg/domain/entity"
"context"
"code.30cm.net/digimon/app-cloudep-permission-server/pkg/domain/entity"
"go.mongodb.org/mongo-driver/mongo"
)

View File

@ -1,8 +1,9 @@
package repository
import (
"code.30cm.net/digimon/app-cloudep-permission-server/pkg/domain/entity"
"context"
"code.30cm.net/digimon/app-cloudep-permission-server/pkg/domain/entity"
"go.mongodb.org/mongo-driver/mongo"
)

View File

@ -30,6 +30,7 @@ var validAdditionalKeys = map[Additional]struct{}{
// IsValidAdditional 檢查是否是有效的 Additional Key
func IsValidAdditional(key Additional) bool {
_, exists := validAdditionalKeys[key]
return exists
}

View File

@ -1,8 +1,9 @@
package token
import (
"github.com/stretchr/testify/assert"
"testing"
"github.com/stretchr/testify/assert"
)
func TestAdditional_String(t *testing.T) {

View File

@ -1,8 +1,9 @@
package token
import (
"github.com/stretchr/testify/assert"
"testing"
"github.com/stretchr/testify/assert"
)
func TestTScope_ToString(t *testing.T) {

View File

@ -1,8 +1,9 @@
package token
import (
"github.com/stretchr/testify/assert"
"testing"
"github.com/stretchr/testify/assert"
)
func TestType_ToString(t *testing.T) {

View File

@ -1,9 +1,10 @@
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"
"context"
)
type PermissionUseCase interface {

View File

@ -1,8 +1,9 @@
package usecase
import (
"code.30cm.net/digimon/app-cloudep-permission-server/pkg/domain/permission"
"context"
"code.30cm.net/digimon/app-cloudep-permission-server/pkg/domain/permission"
)
type RoleUseCase interface {
@ -35,8 +36,8 @@ type Role struct {
}
type CreateRoleReq struct {
Name *string `json:"name"` // 角色名稱
UID *string `json:"uid"`
ClientID *string `json:"client_id"`
Status *permission.Status `json:"status"` // 例如 1: 啟用, 0: 停用
Name string `json:"name"` // 角色名稱
UID string `json:"uid"`
ClientID string `json:"client_id"`
Status permission.Status `json:"status"` // 例如 1: 啟用, 0: 停用
}

View File

@ -1,16 +1,17 @@
package usecase
import (
"code.30cm.net/digimon/app-cloudep-permission-server/pkg/domain/permission"
"context"
"code.30cm.net/digimon/app-cloudep-permission-server/pkg/domain/permission"
)
type RolePermissionUseCase interface {
Get(ctx context.Context, roleID int64) (permission.Permissions, error)
Get(ctx context.Context, roleID string) (permission.Permissions, error)
GetByRoleUID(ctx context.Context, uid string) (permission.Permissions, error)
GetByUser(ctx context.Context, uid string) (UserPermission, error)
Create(ctx context.Context, roleID int64, permissions permission.Permissions) error
Delete(ctx context.Context, roleID int64, permissions permission.Permissions) error
Create(ctx context.Context, roleID string, permissions permission.Permissions) error
Delete(ctx context.Context, roleID string, permissions permission.Permissions) error
List(ctx context.Context, req ListQuery) (RoleResp, error)
}

View File

@ -6,7 +6,7 @@ type UserRoleUseCase interface {
Select(ctx context.Context, filter UserRoleFilter) ([]UserRole, error)
Get(ctx context.Context, uid string) (UserRole, error)
Create(ctx context.Context, uid, roleID string) (UserRole, error)
Delete(ctx context.Context, uid, roleID string) error
Update(ctx context.Context, uid, roleID string) error
}
type UserRole struct {

View File

@ -0,0 +1,285 @@
// Code generated by MockGen. DO NOT EDIT.
// Source: ./pkg/domain/repository/permission.go
//
// Generated by this command:
//
// mockgen -source=./pkg/domain/repository/permission.go -destination=./pkg/mock/repository/permission.go -package=mock
//
// Package mock is a generated GoMock package.
package mock
import (
context "context"
reflect "reflect"
entity "code.30cm.net/digimon/app-cloudep-permission-server/pkg/domain/entity"
permission "code.30cm.net/digimon/app-cloudep-permission-server/pkg/domain/permission"
repository "code.30cm.net/digimon/app-cloudep-permission-server/pkg/domain/repository"
mongo "go.mongodb.org/mongo-driver/mongo"
gomock "go.uber.org/mock/gomock"
)
// MockPermissionRepository is a mock of PermissionRepository interface.
type MockPermissionRepository struct {
ctrl *gomock.Controller
recorder *MockPermissionRepositoryMockRecorder
isgomock struct{}
}
// MockPermissionRepositoryMockRecorder is the mock recorder for MockPermissionRepository.
type MockPermissionRepositoryMockRecorder struct {
mock *MockPermissionRepository
}
// NewMockPermissionRepository creates a new mock instance.
func NewMockPermissionRepository(ctrl *gomock.Controller) *MockPermissionRepository {
mock := &MockPermissionRepository{ctrl: ctrl}
mock.recorder = &MockPermissionRepositoryMockRecorder{mock}
return mock
}
// EXPECT returns an object that allows the caller to indicate expected use.
func (m *MockPermissionRepository) EXPECT() *MockPermissionRepositoryMockRecorder {
return m.recorder
}
// Delete mocks base method.
func (m *MockPermissionRepository) Delete(ctx context.Context, id string) error {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "Delete", ctx, id)
ret0, _ := ret[0].(error)
return ret0
}
// Delete indicates an expected call of Delete.
func (mr *MockPermissionRepositoryMockRecorder) Delete(ctx, id any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Delete", reflect.TypeOf((*MockPermissionRepository)(nil).Delete), ctx, id)
}
// FindByNames mocks base method.
func (m *MockPermissionRepository) FindByNames(ctx context.Context, names []string) ([]entity.Permission, error) {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "FindByNames", ctx, names)
ret0, _ := ret[0].([]entity.Permission)
ret1, _ := ret[1].(error)
return ret0, ret1
}
// FindByNames indicates an expected call of FindByNames.
func (mr *MockPermissionRepositoryMockRecorder) FindByNames(ctx, names any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FindByNames", reflect.TypeOf((*MockPermissionRepository)(nil).FindByNames), ctx, names)
}
// FindOne mocks base method.
func (m *MockPermissionRepository) FindOne(ctx context.Context, query repository.PermissionQuery) (entity.Permission, error) {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "FindOne", ctx, query)
ret0, _ := ret[0].(entity.Permission)
ret1, _ := ret[1].(error)
return ret0, ret1
}
// FindOne indicates an expected call of FindOne.
func (mr *MockPermissionRepositoryMockRecorder) FindOne(ctx, query any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FindOne", reflect.TypeOf((*MockPermissionRepository)(nil).FindOne), ctx, query)
}
// GetAll mocks base method.
func (m *MockPermissionRepository) GetAll(ctx context.Context, status *permission.Status) ([]entity.Permission, error) {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "GetAll", ctx, status)
ret0, _ := ret[0].([]entity.Permission)
ret1, _ := ret[1].(error)
return ret0, ret1
}
// GetAll indicates an expected call of GetAll.
func (mr *MockPermissionRepositoryMockRecorder) GetAll(ctx, status any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetAll", reflect.TypeOf((*MockPermissionRepository)(nil).GetAll), ctx, status)
}
// GetAllIntoIDMap mocks base method.
func (m *MockPermissionRepository) GetAllIntoIDMap(ctx context.Context, status *permission.Status) (map[string]entity.Permission, error) {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "GetAllIntoIDMap", ctx, status)
ret0, _ := ret[0].(map[string]entity.Permission)
ret1, _ := ret[1].(error)
return ret0, ret1
}
// GetAllIntoIDMap indicates an expected call of GetAllIntoIDMap.
func (mr *MockPermissionRepositoryMockRecorder) GetAllIntoIDMap(ctx, status any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetAllIntoIDMap", reflect.TypeOf((*MockPermissionRepository)(nil).GetAllIntoIDMap), ctx, status)
}
// Index20250214UP mocks base method.
func (m *MockPermissionRepository) Index20250214UP(ctx context.Context) (*mongo.Cursor, error) {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "Index20250214UP", ctx)
ret0, _ := ret[0].(*mongo.Cursor)
ret1, _ := ret[1].(error)
return ret0, ret1
}
// Index20250214UP indicates an expected call of Index20250214UP.
func (mr *MockPermissionRepositoryMockRecorder) Index20250214UP(ctx any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Index20250214UP", reflect.TypeOf((*MockPermissionRepository)(nil).Index20250214UP), ctx)
}
// Insert mocks base method.
func (m *MockPermissionRepository) Insert(ctx context.Context, permission entity.Permission) error {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "Insert", ctx, permission)
ret0, _ := ret[0].(error)
return ret0
}
// Insert indicates an expected call of Insert.
func (mr *MockPermissionRepositoryMockRecorder) Insert(ctx, permission any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Insert", reflect.TypeOf((*MockPermissionRepository)(nil).Insert), ctx, permission)
}
// Update mocks base method.
func (m *MockPermissionRepository) Update(ctx context.Context, id string, req repository.UpdatePermission) error {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "Update", ctx, id, req)
ret0, _ := ret[0].(error)
return ret0
}
// Update indicates an expected call of Update.
func (mr *MockPermissionRepositoryMockRecorder) Update(ctx, id, req any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Update", reflect.TypeOf((*MockPermissionRepository)(nil).Update), ctx, id, req)
}
// MockGetPermission is a mock of GetPermission interface.
type MockGetPermission struct {
ctrl *gomock.Controller
recorder *MockGetPermissionMockRecorder
isgomock struct{}
}
// MockGetPermissionMockRecorder is the mock recorder for MockGetPermission.
type MockGetPermissionMockRecorder struct {
mock *MockGetPermission
}
// NewMockGetPermission creates a new mock instance.
func NewMockGetPermission(ctrl *gomock.Controller) *MockGetPermission {
mock := &MockGetPermission{ctrl: ctrl}
mock.recorder = &MockGetPermissionMockRecorder{mock}
return mock
}
// EXPECT returns an object that allows the caller to indicate expected use.
func (m *MockGetPermission) EXPECT() *MockGetPermissionMockRecorder {
return m.recorder
}
// FindByNames mocks base method.
func (m *MockGetPermission) FindByNames(ctx context.Context, names []string) ([]entity.Permission, error) {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "FindByNames", ctx, names)
ret0, _ := ret[0].([]entity.Permission)
ret1, _ := ret[1].(error)
return ret0, ret1
}
// FindByNames indicates an expected call of FindByNames.
func (mr *MockGetPermissionMockRecorder) FindByNames(ctx, names any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FindByNames", reflect.TypeOf((*MockGetPermission)(nil).FindByNames), ctx, names)
}
// FindOne mocks base method.
func (m *MockGetPermission) FindOne(ctx context.Context, query repository.PermissionQuery) (entity.Permission, error) {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "FindOne", ctx, query)
ret0, _ := ret[0].(entity.Permission)
ret1, _ := ret[1].(error)
return ret0, ret1
}
// FindOne indicates an expected call of FindOne.
func (mr *MockGetPermissionMockRecorder) FindOne(ctx, query any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FindOne", reflect.TypeOf((*MockGetPermission)(nil).FindOne), ctx, query)
}
// GetAll mocks base method.
func (m *MockGetPermission) GetAll(ctx context.Context, status *permission.Status) ([]entity.Permission, error) {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "GetAll", ctx, status)
ret0, _ := ret[0].([]entity.Permission)
ret1, _ := ret[1].(error)
return ret0, ret1
}
// GetAll indicates an expected call of GetAll.
func (mr *MockGetPermissionMockRecorder) GetAll(ctx, status any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetAll", reflect.TypeOf((*MockGetPermission)(nil).GetAll), ctx, status)
}
// GetAllIntoIDMap mocks base method.
func (m *MockGetPermission) GetAllIntoIDMap(ctx context.Context, status *permission.Status) (map[string]entity.Permission, error) {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "GetAllIntoIDMap", ctx, status)
ret0, _ := ret[0].(map[string]entity.Permission)
ret1, _ := ret[1].(error)
return ret0, ret1
}
// GetAllIntoIDMap indicates an expected call of GetAllIntoIDMap.
func (mr *MockGetPermissionMockRecorder) GetAllIntoIDMap(ctx, status any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetAllIntoIDMap", reflect.TypeOf((*MockGetPermission)(nil).GetAllIntoIDMap), ctx, status)
}
// MockIndex is a mock of Index interface.
type MockIndex struct {
ctrl *gomock.Controller
recorder *MockIndexMockRecorder
isgomock struct{}
}
// MockIndexMockRecorder is the mock recorder for MockIndex.
type MockIndexMockRecorder struct {
mock *MockIndex
}
// NewMockIndex creates a new mock instance.
func NewMockIndex(ctrl *gomock.Controller) *MockIndex {
mock := &MockIndex{ctrl: ctrl}
mock.recorder = &MockIndexMockRecorder{mock}
return mock
}
// EXPECT returns an object that allows the caller to indicate expected use.
func (m *MockIndex) EXPECT() *MockIndexMockRecorder {
return m.recorder
}
// Index20250214UP mocks base method.
func (m *MockIndex) Index20250214UP(ctx context.Context) (*mongo.Cursor, error) {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "Index20250214UP", ctx)
ret0, _ := ret[0].(*mongo.Cursor)
ret1, _ := ret[1].(error)
return ret0, ret1
}
// Index20250214UP indicates an expected call of Index20250214UP.
func (mr *MockIndexMockRecorder) Index20250214UP(ctx any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Index20250214UP", reflect.TypeOf((*MockIndex)(nil).Index20250214UP), ctx)
}

201
pkg/mock/repository/role.go Normal file
View File

@ -0,0 +1,201 @@
// Code generated by MockGen. DO NOT EDIT.
// Source: ./pkg/domain/repository/role.go
//
// Generated by this command:
//
// mockgen -source=./pkg/domain/repository/role.go -destination=./pkg/mock/repository/role.go -package=mock
//
// Package mock is a generated GoMock package.
package mock
import (
context "context"
reflect "reflect"
entity "code.30cm.net/digimon/app-cloudep-permission-server/pkg/domain/entity"
repository "code.30cm.net/digimon/app-cloudep-permission-server/pkg/domain/repository"
mongo "go.mongodb.org/mongo-driver/mongo"
gomock "go.uber.org/mock/gomock"
)
// MockRoleRepository is a mock of RoleRepository interface.
type MockRoleRepository struct {
ctrl *gomock.Controller
recorder *MockRoleRepositoryMockRecorder
isgomock struct{}
}
// MockRoleRepositoryMockRecorder is the mock recorder for MockRoleRepository.
type MockRoleRepositoryMockRecorder struct {
mock *MockRoleRepository
}
// NewMockRoleRepository creates a new mock instance.
func NewMockRoleRepository(ctrl *gomock.Controller) *MockRoleRepository {
mock := &MockRoleRepository{ctrl: ctrl}
mock.recorder = &MockRoleRepositoryMockRecorder{mock}
return mock
}
// EXPECT returns an object that allows the caller to indicate expected use.
func (m *MockRoleRepository) EXPECT() *MockRoleRepositoryMockRecorder {
return m.recorder
}
// All mocks base method.
func (m *MockRoleRepository) All(ctx context.Context, clientID *string) ([]*entity.Role, error) {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "All", ctx, clientID)
ret0, _ := ret[0].([]*entity.Role)
ret1, _ := ret[1].(error)
return ret0, ret1
}
// All indicates an expected call of All.
func (mr *MockRoleRepositoryMockRecorder) All(ctx, clientID any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "All", reflect.TypeOf((*MockRoleRepository)(nil).All), ctx, clientID)
}
// Create mocks base method.
func (m *MockRoleRepository) Create(ctx context.Context, role *entity.Role) error {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "Create", ctx, role)
ret0, _ := ret[0].(error)
return ret0
}
// Create indicates an expected call of Create.
func (mr *MockRoleRepositoryMockRecorder) Create(ctx, role any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Create", reflect.TypeOf((*MockRoleRepository)(nil).Create), ctx, role)
}
// Delete mocks base method.
func (m *MockRoleRepository) Delete(ctx context.Context, id string) error {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "Delete", ctx, id)
ret0, _ := ret[0].(error)
return ret0
}
// Delete indicates an expected call of Delete.
func (mr *MockRoleRepositoryMockRecorder) Delete(ctx, id any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Delete", reflect.TypeOf((*MockRoleRepository)(nil).Delete), ctx, id)
}
// GetByID mocks base method.
func (m *MockRoleRepository) GetByID(ctx context.Context, id string) (*entity.Role, error) {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "GetByID", ctx, id)
ret0, _ := ret[0].(*entity.Role)
ret1, _ := ret[1].(error)
return ret0, ret1
}
// GetByID indicates an expected call of GetByID.
func (mr *MockRoleRepositoryMockRecorder) GetByID(ctx, id any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetByID", reflect.TypeOf((*MockRoleRepository)(nil).GetByID), ctx, id)
}
// GetByUID mocks base method.
func (m *MockRoleRepository) GetByUID(ctx context.Context, uid string) (*entity.Role, error) {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "GetByUID", ctx, uid)
ret0, _ := ret[0].(*entity.Role)
ret1, _ := ret[1].(error)
return ret0, ret1
}
// GetByUID indicates an expected call of GetByUID.
func (mr *MockRoleRepositoryMockRecorder) GetByUID(ctx, uid any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetByUID", reflect.TypeOf((*MockRoleRepository)(nil).GetByUID), ctx, uid)
}
// Index20250224UP mocks base method.
func (m *MockRoleRepository) Index20250224UP(ctx context.Context) (*mongo.Cursor, error) {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "Index20250224UP", ctx)
ret0, _ := ret[0].(*mongo.Cursor)
ret1, _ := ret[1].(error)
return ret0, ret1
}
// Index20250224UP indicates an expected call of Index20250224UP.
func (mr *MockRoleRepositoryMockRecorder) Index20250224UP(ctx any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Index20250224UP", reflect.TypeOf((*MockRoleRepository)(nil).Index20250224UP), ctx)
}
// List mocks base method.
func (m *MockRoleRepository) List(ctx context.Context, param repository.ListQuery) ([]*entity.Role, int64, error) {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "List", ctx, param)
ret0, _ := ret[0].([]*entity.Role)
ret1, _ := ret[1].(int64)
ret2, _ := ret[2].(error)
return ret0, ret1, ret2
}
// List indicates an expected call of List.
func (mr *MockRoleRepositoryMockRecorder) List(ctx, param any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "List", reflect.TypeOf((*MockRoleRepository)(nil).List), ctx, param)
}
// Update mocks base method.
func (m *MockRoleRepository) Update(ctx context.Context, data repository.UpdateReq) error {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "Update", ctx, data)
ret0, _ := ret[0].(error)
return ret0
}
// Update indicates an expected call of Update.
func (mr *MockRoleRepositoryMockRecorder) Update(ctx, data any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Update", reflect.TypeOf((*MockRoleRepository)(nil).Update), ctx, data)
}
// MockRoleIndex is a mock of RoleIndex interface.
type MockRoleIndex struct {
ctrl *gomock.Controller
recorder *MockRoleIndexMockRecorder
isgomock struct{}
}
// MockRoleIndexMockRecorder is the mock recorder for MockRoleIndex.
type MockRoleIndexMockRecorder struct {
mock *MockRoleIndex
}
// NewMockRoleIndex creates a new mock instance.
func NewMockRoleIndex(ctrl *gomock.Controller) *MockRoleIndex {
mock := &MockRoleIndex{ctrl: ctrl}
mock.recorder = &MockRoleIndexMockRecorder{mock}
return mock
}
// EXPECT returns an object that allows the caller to indicate expected use.
func (m *MockRoleIndex) EXPECT() *MockRoleIndexMockRecorder {
return m.recorder
}
// Index20250224UP mocks base method.
func (m *MockRoleIndex) Index20250224UP(ctx context.Context) (*mongo.Cursor, error) {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "Index20250224UP", ctx)
ret0, _ := ret[0].(*mongo.Cursor)
ret1, _ := ret[1].(error)
return ret0, ret1
}
// Index20250224UP indicates an expected call of Index20250224UP.
func (mr *MockRoleIndexMockRecorder) Index20250224UP(ctx any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Index20250224UP", reflect.TypeOf((*MockRoleIndex)(nil).Index20250224UP), ctx)
}

View File

@ -0,0 +1,155 @@
// Code generated by MockGen. DO NOT EDIT.
// Source: ./pkg/domain/repository/role_permission.go
//
// Generated by this command:
//
// mockgen -source=./pkg/domain/repository/role_permission.go -destination=./pkg/mock/repository/role_permission.go -package=mock
//
// Package mock is a generated GoMock package.
package mock
import (
context "context"
reflect "reflect"
entity "code.30cm.net/digimon/app-cloudep-permission-server/pkg/domain/entity"
mongo "go.mongodb.org/mongo-driver/mongo"
gomock "go.uber.org/mock/gomock"
)
// MockRolePermissionRepository is a mock of RolePermissionRepository interface.
type MockRolePermissionRepository struct {
ctrl *gomock.Controller
recorder *MockRolePermissionRepositoryMockRecorder
isgomock struct{}
}
// MockRolePermissionRepositoryMockRecorder is the mock recorder for MockRolePermissionRepository.
type MockRolePermissionRepositoryMockRecorder struct {
mock *MockRolePermissionRepository
}
// NewMockRolePermissionRepository creates a new mock instance.
func NewMockRolePermissionRepository(ctrl *gomock.Controller) *MockRolePermissionRepository {
mock := &MockRolePermissionRepository{ctrl: ctrl}
mock.recorder = &MockRolePermissionRepositoryMockRecorder{mock}
return mock
}
// EXPECT returns an object that allows the caller to indicate expected use.
func (m *MockRolePermissionRepository) EXPECT() *MockRolePermissionRepositoryMockRecorder {
return m.recorder
}
// Create mocks base method.
func (m *MockRolePermissionRepository) Create(ctx context.Context, entity entity.RolePermission) error {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "Create", ctx, entity)
ret0, _ := ret[0].(error)
return ret0
}
// Create indicates an expected call of Create.
func (mr *MockRolePermissionRepositoryMockRecorder) Create(ctx, entity any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Create", reflect.TypeOf((*MockRolePermissionRepository)(nil).Create), ctx, entity)
}
// Delete mocks base method.
func (m *MockRolePermissionRepository) Delete(ctx context.Context, roleID, permission string) error {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "Delete", ctx, roleID, permission)
ret0, _ := ret[0].(error)
return ret0
}
// Delete indicates an expected call of Delete.
func (mr *MockRolePermissionRepositoryMockRecorder) Delete(ctx, roleID, permission any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Delete", reflect.TypeOf((*MockRolePermissionRepository)(nil).Delete), ctx, roleID, permission)
}
// Get mocks base method.
func (m *MockRolePermissionRepository) Get(ctx context.Context, roleID string) ([]*entity.RolePermission, error) {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "Get", ctx, roleID)
ret0, _ := ret[0].([]*entity.RolePermission)
ret1, _ := ret[1].(error)
return ret0, ret1
}
// Get indicates an expected call of Get.
func (mr *MockRolePermissionRepositoryMockRecorder) Get(ctx, roleID any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Get", reflect.TypeOf((*MockRolePermissionRepository)(nil).Get), ctx, roleID)
}
// GetByPermissionID mocks base method.
func (m *MockRolePermissionRepository) GetByPermissionID(ctx context.Context, permissionIDs []string) ([]*entity.RolePermission, error) {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "GetByPermissionID", ctx, permissionIDs)
ret0, _ := ret[0].([]*entity.RolePermission)
ret1, _ := ret[1].(error)
return ret0, ret1
}
// GetByPermissionID indicates an expected call of GetByPermissionID.
func (mr *MockRolePermissionRepositoryMockRecorder) GetByPermissionID(ctx, permissionIDs any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetByPermissionID", reflect.TypeOf((*MockRolePermissionRepository)(nil).GetByPermissionID), ctx, permissionIDs)
}
// Index20250225UP mocks base method.
func (m *MockRolePermissionRepository) Index20250225UP(ctx context.Context) (*mongo.Cursor, error) {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "Index20250225UP", ctx)
ret0, _ := ret[0].(*mongo.Cursor)
ret1, _ := ret[1].(error)
return ret0, ret1
}
// Index20250225UP indicates an expected call of Index20250225UP.
func (mr *MockRolePermissionRepositoryMockRecorder) Index20250225UP(ctx any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Index20250225UP", reflect.TypeOf((*MockRolePermissionRepository)(nil).Index20250225UP), ctx)
}
// MockRolePermissionIndex is a mock of RolePermissionIndex interface.
type MockRolePermissionIndex struct {
ctrl *gomock.Controller
recorder *MockRolePermissionIndexMockRecorder
isgomock struct{}
}
// MockRolePermissionIndexMockRecorder is the mock recorder for MockRolePermissionIndex.
type MockRolePermissionIndexMockRecorder struct {
mock *MockRolePermissionIndex
}
// NewMockRolePermissionIndex creates a new mock instance.
func NewMockRolePermissionIndex(ctrl *gomock.Controller) *MockRolePermissionIndex {
mock := &MockRolePermissionIndex{ctrl: ctrl}
mock.recorder = &MockRolePermissionIndexMockRecorder{mock}
return mock
}
// EXPECT returns an object that allows the caller to indicate expected use.
func (m *MockRolePermissionIndex) EXPECT() *MockRolePermissionIndexMockRecorder {
return m.recorder
}
// Index20250225UP mocks base method.
func (m *MockRolePermissionIndex) Index20250225UP(ctx context.Context) (*mongo.Cursor, error) {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "Index20250225UP", ctx)
ret0, _ := ret[0].(*mongo.Cursor)
ret1, _ := ret[1].(error)
return ret0, ret1
}
// Index20250225UP indicates an expected call of Index20250225UP.
func (mr *MockRolePermissionIndexMockRecorder) Index20250225UP(ctx any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Index20250225UP", reflect.TypeOf((*MockRolePermissionIndex)(nil).Index20250225UP), ctx)
}

View File

@ -0,0 +1,187 @@
// Code generated by MockGen. DO NOT EDIT.
// Source: ./pkg/domain/repository/user_role.go
//
// Generated by this command:
//
// mockgen -source=./pkg/domain/repository/user_role.go -destination=./pkg/mock/repository/user_role.go -package=mock
//
// Package mock is a generated GoMock package.
package mock
import (
context "context"
reflect "reflect"
entity "code.30cm.net/digimon/app-cloudep-permission-server/pkg/domain/entity"
repository "code.30cm.net/digimon/app-cloudep-permission-server/pkg/domain/repository"
mongo "go.mongodb.org/mongo-driver/mongo"
gomock "go.uber.org/mock/gomock"
)
// MockUserRoleRepository is a mock of UserRoleRepository interface.
type MockUserRoleRepository struct {
ctrl *gomock.Controller
recorder *MockUserRoleRepositoryMockRecorder
isgomock struct{}
}
// MockUserRoleRepositoryMockRecorder is the mock recorder for MockUserRoleRepository.
type MockUserRoleRepositoryMockRecorder struct {
mock *MockUserRoleRepository
}
// NewMockUserRoleRepository creates a new mock instance.
func NewMockUserRoleRepository(ctrl *gomock.Controller) *MockUserRoleRepository {
mock := &MockUserRoleRepository{ctrl: ctrl}
mock.recorder = &MockUserRoleRepositoryMockRecorder{mock}
return mock
}
// EXPECT returns an object that allows the caller to indicate expected use.
func (m *MockUserRoleRepository) EXPECT() *MockUserRoleRepositoryMockRecorder {
return m.recorder
}
// CountUsersByRole mocks base method.
func (m *MockUserRoleRepository) CountUsersByRole(ctx context.Context) ([]repository.RoleUserCount, error) {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "CountUsersByRole", ctx)
ret0, _ := ret[0].([]repository.RoleUserCount)
ret1, _ := ret[1].(error)
return ret0, ret1
}
// CountUsersByRole indicates an expected call of CountUsersByRole.
func (mr *MockUserRoleRepositoryMockRecorder) CountUsersByRole(ctx any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CountUsersByRole", reflect.TypeOf((*MockUserRoleRepository)(nil).CountUsersByRole), ctx)
}
// CreateUserRole mocks base method.
func (m *MockUserRoleRepository) CreateUserRole(ctx context.Context, param entity.UserRole) error {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "CreateUserRole", ctx, param)
ret0, _ := ret[0].(error)
return ret0
}
// CreateUserRole indicates an expected call of CreateUserRole.
func (mr *MockUserRoleRepositoryMockRecorder) CreateUserRole(ctx, param any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateUserRole", reflect.TypeOf((*MockUserRoleRepository)(nil).CreateUserRole), ctx, param)
}
// GetAll mocks base method.
func (m *MockUserRoleRepository) GetAll(ctx context.Context) ([]*entity.UserRole, error) {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "GetAll", ctx)
ret0, _ := ret[0].([]*entity.UserRole)
ret1, _ := ret[1].(error)
return ret0, ret1
}
// GetAll indicates an expected call of GetAll.
func (mr *MockUserRoleRepositoryMockRecorder) GetAll(ctx any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetAll", reflect.TypeOf((*MockUserRoleRepository)(nil).GetAll), ctx)
}
// GetByUserID mocks base method.
func (m *MockUserRoleRepository) GetByUserID(ctx context.Context, uid string) (entity.UserRole, error) {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "GetByUserID", ctx, uid)
ret0, _ := ret[0].(entity.UserRole)
ret1, _ := ret[1].(error)
return ret0, ret1
}
// GetByUserID indicates an expected call of GetByUserID.
func (mr *MockUserRoleRepositoryMockRecorder) GetByUserID(ctx, uid any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetByUserID", reflect.TypeOf((*MockUserRoleRepository)(nil).GetByUserID), ctx, uid)
}
// GetUsersByRoleID mocks base method.
func (m *MockUserRoleRepository) GetUsersByRoleID(ctx context.Context, roleID string) ([]entity.UserRole, error) {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "GetUsersByRoleID", ctx, roleID)
ret0, _ := ret[0].([]entity.UserRole)
ret1, _ := ret[1].(error)
return ret0, ret1
}
// GetUsersByRoleID indicates an expected call of GetUsersByRoleID.
func (mr *MockUserRoleRepositoryMockRecorder) GetUsersByRoleID(ctx, roleID any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetUsersByRoleID", reflect.TypeOf((*MockUserRoleRepository)(nil).GetUsersByRoleID), ctx, roleID)
}
// Index20250225UP mocks base method.
func (m *MockUserRoleRepository) Index20250225UP(ctx context.Context) (*mongo.Cursor, error) {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "Index20250225UP", ctx)
ret0, _ := ret[0].(*mongo.Cursor)
ret1, _ := ret[1].(error)
return ret0, ret1
}
// Index20250225UP indicates an expected call of Index20250225UP.
func (mr *MockUserRoleRepositoryMockRecorder) Index20250225UP(ctx any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Index20250225UP", reflect.TypeOf((*MockUserRoleRepository)(nil).Index20250225UP), ctx)
}
// UpdateUserRole mocks base method.
func (m *MockUserRoleRepository) UpdateUserRole(ctx context.Context, uid, roleID string) (entity.UserRole, error) {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "UpdateUserRole", ctx, uid, roleID)
ret0, _ := ret[0].(entity.UserRole)
ret1, _ := ret[1].(error)
return ret0, ret1
}
// UpdateUserRole indicates an expected call of UpdateUserRole.
func (mr *MockUserRoleRepositoryMockRecorder) UpdateUserRole(ctx, uid, roleID any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateUserRole", reflect.TypeOf((*MockUserRoleRepository)(nil).UpdateUserRole), ctx, uid, roleID)
}
// MockUserRoleIndex is a mock of UserRoleIndex interface.
type MockUserRoleIndex struct {
ctrl *gomock.Controller
recorder *MockUserRoleIndexMockRecorder
isgomock struct{}
}
// MockUserRoleIndexMockRecorder is the mock recorder for MockUserRoleIndex.
type MockUserRoleIndexMockRecorder struct {
mock *MockUserRoleIndex
}
// NewMockUserRoleIndex creates a new mock instance.
func NewMockUserRoleIndex(ctrl *gomock.Controller) *MockUserRoleIndex {
mock := &MockUserRoleIndex{ctrl: ctrl}
mock.recorder = &MockUserRoleIndexMockRecorder{mock}
return mock
}
// EXPECT returns an object that allows the caller to indicate expected use.
func (m *MockUserRoleIndex) EXPECT() *MockUserRoleIndexMockRecorder {
return m.recorder
}
// Index20250225UP mocks base method.
func (m *MockUserRoleIndex) Index20250225UP(ctx context.Context) (*mongo.Cursor, error) {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "Index20250225UP", ctx)
ret0, _ := ret[0].(*mongo.Cursor)
ret1, _ := ret[1].(error)
return ret0, ret1
}
// Index20250225UP indicates an expected call of Index20250225UP.
func (mr *MockUserRoleIndexMockRecorder) Index20250225UP(ctx any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Index20250225UP", reflect.TypeOf((*MockUserRoleIndex)(nil).Index20250225UP), ctx)
}

View File

@ -1,15 +1,16 @@
package repository
import (
"context"
"encoding/json"
"time"
"code.30cm.net/digimon/app-cloudep-permission-server/pkg/domain"
"code.30cm.net/digimon/app-cloudep-permission-server/pkg/domain/rbac"
"code.30cm.net/digimon/app-cloudep-permission-server/pkg/domain/repository"
"context"
"encoding/json"
"github.com/casbin/casbin/v2/model"
"github.com/casbin/casbin/v2/persist"
"github.com/zeromicro/go-zero/core/stores/redis"
"time"
)
type RBACAdapterParam struct {
@ -144,6 +145,6 @@ func (adapter *rbacAdapter) RemovePolicy(_ string, policyType string, rule []str
}
// RemoveFilteredPolicy 沒用到先不實作
func (adapter *rbacAdapter) RemoveFilteredPolicy(_ string, policyType string, fieldIndex int, fieldValues ...string) error {
func (adapter *rbacAdapter) RemoveFilteredPolicy(_ string, _ string, _ int, _ ...string) error {
return nil
}

View File

@ -1,13 +1,14 @@
package repository
import (
"code.30cm.net/digimon/app-cloudep-permission-server/pkg/domain"
"code.30cm.net/digimon/app-cloudep-permission-server/pkg/domain/rbac"
"context"
"encoding/json"
"testing"
"code.30cm.net/digimon/app-cloudep-permission-server/pkg/domain"
"code.30cm.net/digimon/app-cloudep-permission-server/pkg/domain/rbac"
"github.com/casbin/casbin/v2/model"
"github.com/stretchr/testify/assert"
"testing"
)
func Test_rbacAdapter_AddPolicy(t *testing.T) {

View File

@ -2,6 +2,7 @@ package repository
import (
"errors"
"github.com/zeromicro/go-zero/core/stores/mon"
)

View File

@ -1,17 +1,18 @@
package repository
import (
"context"
"time"
"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"
mgo "code.30cm.net/digimon/library-go/mongo"
"context"
"github.com/zeromicro/go-zero/core/stores/mon"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/bson/primitive"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
"time"
)
type PermissionRepositoryParam struct {

View File

@ -1,15 +1,16 @@
package repository
import (
"context"
"fmt"
"testing"
"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"
mgo "code.30cm.net/digimon/library-go/mongo"
"context"
"fmt"
"github.com/stretchr/testify/assert"
"go.mongodb.org/mongo-driver/bson/primitive"
"testing"
)
func SetupTestPermissionRepository(db string) (repository.PermissionRepository, func(), error) {

View File

@ -1,17 +1,18 @@
package repository
import (
"context"
"fmt"
"time"
"code.30cm.net/digimon/app-cloudep-permission-server/pkg/domain/entity"
"code.30cm.net/digimon/app-cloudep-permission-server/pkg/domain/repository"
mgo "code.30cm.net/digimon/library-go/mongo"
"context"
"fmt"
"github.com/zeromicro/go-zero/core/stores/mon"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/bson/primitive"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
"time"
)
type RoleRepositoryParam struct {

View File

@ -1,15 +1,16 @@
package repository
import (
"context"
"time"
"code.30cm.net/digimon/app-cloudep-permission-server/pkg/domain/entity"
"code.30cm.net/digimon/app-cloudep-permission-server/pkg/domain/repository"
mgo "code.30cm.net/digimon/library-go/mongo"
"context"
"github.com/zeromicro/go-zero/core/stores/mon"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/bson/primitive"
"go.mongodb.org/mongo-driver/mongo"
"time"
)
type RolePermissionRepositoryParam struct {

View File

@ -1,15 +1,16 @@
package repository
import (
"context"
"fmt"
"testing"
"time"
"code.30cm.net/digimon/app-cloudep-permission-server/pkg/domain/entity"
"code.30cm.net/digimon/app-cloudep-permission-server/pkg/domain/repository"
mgo "code.30cm.net/digimon/library-go/mongo"
"context"
"fmt"
"github.com/stretchr/testify/assert"
"go.mongodb.org/mongo-driver/bson/primitive"
"testing"
"time"
)
func SetupTestRolePermissionRepository(db string) (repository.RolePermissionRepository, func(), error) {

View File

@ -1,15 +1,16 @@
package repository
import (
"context"
"fmt"
"testing"
"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"
mgo "code.30cm.net/digimon/library-go/mongo"
"context"
"fmt"
"github.com/stretchr/testify/assert"
"go.mongodb.org/mongo-driver/bson/primitive"
"testing"
)
func SetupTestRoleRepository(db string) (repository.RoleRepository, func(), error) {

View File

@ -47,6 +47,7 @@ func (repo *TokenRepository) setRefreshToken(ctx context.Context, tx redis.Pipel
if token.RefreshToken == "" {
return nil
}
return tx.Set(ctx, domain.GetRefreshTokenRedisKey(token.RefreshToken), token.ID, ttl).Err()
}
@ -110,6 +111,7 @@ func (repo *TokenRepository) getTokensBySet(ctx context.Context, setKey string)
if errors.Is(err, redis.Nil) {
return nil, nil
}
return nil, err
}
@ -120,11 +122,13 @@ func (repo *TokenRepository) getTokensBySet(ctx context.Context, setKey string)
token, err := repo.retrieveToken(ctx, domain.GetAccessTokenRedisKey(id))
if err != nil {
tokensToDelete = append(tokensToDelete, id)
continue
}
if token.ExpiresIn < now {
tokensToDelete = append(tokensToDelete, id)
continue
}
tokens = append(tokens, token)
@ -174,6 +178,7 @@ func (repo *TokenRepository) batchDeleteKeys(ctx context.Context, keys ...string
return err
}
}
return nil
})
}
@ -200,6 +205,7 @@ func (repo *TokenRepository) Create(ctx context.Context, token entity.Token) err
if err := repo.setTokenRelation(ctx, tx, token.UID, token.DeviceID, token.ID, refreshTTL); err != nil {
return err
}
return nil
})
}
@ -212,6 +218,7 @@ func (repo *TokenRepository) CreateOneTimeToken(ctx context.Context, key string,
}
_, err = repo.Redis.SetnxExCtx(ctx, domain.GetRefreshTokenRedisKey(key), string(body), int(dt.Seconds()))
return err
}
@ -251,6 +258,7 @@ func (repo *TokenRepository) Delete(ctx context.Context, token entity.Token) err
domain.GetAccessTokenRedisKey(token.ID),
domain.GetRefreshTokenRedisKey(token.RefreshToken),
}
return repo.deleteKeysAndRelations(ctx, keys, token.UID, token.DeviceID, token.ID)
}
@ -267,6 +275,7 @@ func (repo *TokenRepository) DeleteAccessTokenByID(ctx context.Context, ids []st
}
_ = repo.deleteKeysAndRelations(ctx, keys, token.UID, token.DeviceID, token.ID)
}
return nil
}
@ -281,6 +290,7 @@ func (repo *TokenRepository) DeleteAccessTokensByUID(ctx context.Context, uid st
return err
}
}
return nil
}
@ -303,6 +313,7 @@ func (repo *TokenRepository) DeleteAccessTokensByDeviceID(ctx context.Context, d
for _, token := range tokens {
_ = tx.SRem(ctx, domain.GetUIDTokenRedisKey(token.UID), token.ID)
}
return nil
}); err != nil {
return err
@ -313,6 +324,7 @@ func (repo *TokenRepository) DeleteAccessTokensByDeviceID(ctx context.Context, d
}
_, err = repo.Redis.Del(domain.GetDeviceTokenRedisKey(deviceID))
return err
}

View File

@ -1,16 +1,17 @@
package repository
import (
"context"
"fmt"
"time"
"code.30cm.net/digimon/app-cloudep-permission-server/pkg/domain/entity"
"code.30cm.net/digimon/app-cloudep-permission-server/pkg/domain/repository"
mgo "code.30cm.net/digimon/library-go/mongo"
"context"
"fmt"
"github.com/zeromicro/go-zero/core/stores/mon"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/bson/primitive"
"go.mongodb.org/mongo-driver/mongo"
"time"
)
// UserRoleRepositoryParam 定義 MongoDB 配置參數
@ -106,6 +107,7 @@ func (repo *userRoleRepository) CreateUserRole(ctx context.Context, param entity
}
_, err := repo.DB.GetClient().InsertOne(ctx, param)
return err
}
@ -128,10 +130,9 @@ func (repo *userRoleRepository) UpdateUserRole(ctx context.Context, uid, roleID
return updated, nil
}
func (repo *userRoleRepository) Index20250225UP(ctx context.Context) (*mongo.Cursor, error) {
repo.DB.PopulateIndex(ctx, "role_id", 1, false)
repo.DB.PopulateIndex(ctx, "uid", 1, false)
repo.DB.PopulateIndex(ctx, "uid", 1, true)
return repo.DB.GetClient().Indexes().List(ctx)
}

View File

@ -1,15 +1,16 @@
package repository
import (
"context"
"fmt"
"testing"
"time"
"code.30cm.net/digimon/app-cloudep-permission-server/pkg/domain/entity"
"code.30cm.net/digimon/app-cloudep-permission-server/pkg/domain/repository"
mgo "code.30cm.net/digimon/library-go/mongo"
"context"
"fmt"
"github.com/stretchr/testify/assert"
"go.mongodb.org/mongo-driver/bson/primitive"
"testing"
"time"
)
func SetupTestUserRoleRepository(db string) (repository.UserRoleRepository, func(), error) {

View File

@ -1,6 +1,12 @@
package usecase
import (
"context"
"fmt"
"log"
"net/http"
"time"
"code.30cm.net/digimon/app-cloudep-permission-server/pkg/domain"
"code.30cm.net/digimon/app-cloudep-permission-server/pkg/domain/entity"
"code.30cm.net/digimon/app-cloudep-permission-server/pkg/domain/permission"
@ -8,14 +14,9 @@ import (
"code.30cm.net/digimon/app-cloudep-permission-server/pkg/domain/usecase"
"code.30cm.net/digimon/library-go/errs"
"code.30cm.net/digimon/library-go/errs/code"
"context"
"fmt"
"github.com/casbin/casbin/v2"
"github.com/casbin/casbin/v2/model"
"github.com/zeromicro/go-zero/core/logx"
"log"
"net/http"
"time"
)
type RBACUseCaseParam struct {
@ -35,7 +36,7 @@ type RBACUseCase struct {
instance *casbin.Enforcer
}
func NewUseCase(param RBACUseCaseParam) usecase.RBACUseCase {
func NewRBACUseCase(param RBACUseCaseParam) usecase.RBACUseCase {
result := &RBACUseCase{
adapter: param.RBACRedisAdapter,
permissionRepo: param.permissionRepo,
@ -89,7 +90,6 @@ func (use *RBACUseCase) Check(ctx context.Context, role, path, method string) (u
return usecase.CheckRolePermissionStatus{}, err
}
status.Select.PlainCode = policy
}
limit := 4
@ -168,7 +168,7 @@ func (use *RBACUseCase) LoadPolicy(ctx context.Context) error {
continue
}
_, err = use.instance.AddPolicy(r.UID, p.HTTPPath, p.HTTPMethod, p.Name)
_, err = use.instance.AddPolicy(r.Name, p.HTTPPath, p.HTTPMethod, p.Name)
if err != nil {
return err
}

View File

@ -1 +1,119 @@
package usecase
import (
"context"
"net/http"
"testing"
"time"
"code.30cm.net/digimon/app-cloudep-permission-server/pkg/domain/entity"
"code.30cm.net/digimon/app-cloudep-permission-server/pkg/domain/permission"
mock "code.30cm.net/digimon/app-cloudep-permission-server/pkg/mock/repository"
"code.30cm.net/digimon/app-cloudep-permission-server/pkg/repository"
"github.com/alicebob/miniredis/v2"
"github.com/stretchr/testify/assert"
"github.com/zeromicro/go-zero/core/stores/redis"
"go.mongodb.org/mongo-driver/bson/primitive"
"go.uber.org/mock/gomock"
)
func setupMiniRedis() (*miniredis.Miniredis, *redis.Redis) {
// 啟動 setupMiniRedis 作為模擬的 Redis 服務
mr, err := miniredis.Run()
if err != nil {
panic("failed to start miniRedis: " + err.Error())
}
// 使用 setupMiniRedis 的地址配置 go-zero Redis 客戶端
redisConf := redis.RedisConf{
Host: mr.Addr(),
Type: "node",
}
r := redis.MustNewRedis(redisConf)
return mr, r
}
func TestNewRBACUseCase_LoadPolicy(t *testing.T) {
// 固定發行者設定,測試中會用來驗證 claims.Issuer
mockCtrl := gomock.NewController(t)
defer mockCtrl.Finish()
// 準備測試資料
permID, _ := primitive.ObjectIDFromHex("507f1f77bcf86cd799439011")
permissionData := entity.Permission{
ID: permID,
Parent: "",
Name: "read_perm",
HTTPMethod: http.MethodGet,
HTTPPath: "/resource",
Status: permission.Open, // 1: 啟用
// 其他欄位可以隨便填上
CreateAt: time.Now().Unix(),
UpdateAt: time.Now().Unix(),
}
roleID, _ := primitive.ObjectIDFromHex("507f1f77bcf86cd799439012")
roleData := &entity.Role{
ID: roleID,
Name: "test_role",
UID: "role1",
ClientID: "client1",
Status: permission.Open,
CreateAt: time.Now().Unix(),
UpdateAt: time.Now().Unix(),
}
rolePermissionData := &entity.RolePermission{
// 這裡 RoleID 與 PermissionID 皆以 Hex 字串儲存
RoleID: roleID.Hex(),
PermissionID: permID.Hex(),
CreateAt: time.Now().Unix(),
UpdateAt: time.Now().Unix(),
}
// 建立 mock 物件,並設定期望值
permissionRepo := mock.NewMockPermissionRepository(mockCtrl)
roleRepo := mock.NewMockRoleRepository(mockCtrl)
rolePermissionRepo := mock.NewMockRolePermissionRepository(mockCtrl)
ctx := context.Background()
permissionRepo.EXPECT().
GetAll(ctx, nil).
Return([]entity.Permission{permissionData}, nil)
roleRepo.EXPECT().
All(ctx, nil).
Return([]*entity.Role{roleData}, nil)
rolePermissionRepo.EXPECT().
Get(ctx, roleID.Hex()).
Return([]*entity.RolePermission{rolePermissionData}, nil)
// 建立 miniRedis 與 adapter
mr, rdb := setupMiniRedis()
defer mr.Close()
adapter, err := repository.NewRBACAdapter(repository.RBACAdapterParam{Redis: rdb})
assert.NoError(t, err)
// 建立 RBACUseCase 測試實例
uc := NewRBACUseCase(RBACUseCaseParam{
ModulePath: "../../etc/rbac.conf", // 注意:確認路徑下有對應的模型檔
permissionRepo: permissionRepo,
roleRepo: roleRepo,
rolePermission: rolePermissionRepo,
RBACRedisAdapter: adapter,
})
// 載入 policy
err = uc.LoadPolicy(ctx)
assert.NoError(t, err)
// 接下來測試 casbin 是否能正確檢查該權限
status, err := uc.Check(ctx, roleData.Name, permissionData.HTTPPath, permissionData.HTTPMethod)
assert.NoError(t, err)
assert.True(t, status.Allow)
// 預期 PermissionName 為 "read_perm"
assert.Equal(t, "read_perm", status.Select.PermissionName)
}

View File

@ -1,9 +1,10 @@
package usecase
import (
"sync"
"code.30cm.net/digimon/app-cloudep-permission-server/pkg/domain/entity"
"code.30cm.net/digimon/app-cloudep-permission-server/pkg/domain/permission"
"sync"
"go.mongodb.org/mongo-driver/bson/primitive"
)

View File

@ -1,11 +1,12 @@
package usecase
import (
"sync"
"testing"
"code.30cm.net/digimon/app-cloudep-permission-server/pkg/domain/entity"
"code.30cm.net/digimon/app-cloudep-permission-server/pkg/domain/permission"
"go.mongodb.org/mongo-driver/bson/primitive"
"sync"
"testing"
)
// TestGeneratePermissionTree 測試 GeneratePermissionTree 函數的建立樹功能

235
pkg/usecase/role.go Normal file
View File

@ -0,0 +1,235 @@
package usecase
import (
"context"
"code.30cm.net/digimon/app-cloudep-permission-server/pkg/domain"
"code.30cm.net/digimon/app-cloudep-permission-server/pkg/domain/entity"
"code.30cm.net/digimon/app-cloudep-permission-server/pkg/domain/repository"
"code.30cm.net/digimon/app-cloudep-permission-server/pkg/domain/usecase"
"code.30cm.net/digimon/library-go/errs"
"code.30cm.net/digimon/library-go/errs/code"
"github.com/zeromicro/go-zero/core/logx"
)
type RoleUseCaseParam struct {
roleRepository repository.RoleRepository
}
type RoleUseCase struct {
RoleUseCaseParam
}
func NewRoleUseCase(param RoleUseCaseParam) usecase.RoleUseCase {
return &RoleUseCase{
RoleUseCaseParam: param,
}
}
func (use *RoleUseCase) List(ctx context.Context, param usecase.ListQuery) ([]usecase.Role, int64, error) {
query := repository.ListQuery{
PageSize: param.PageSize,
PageIndex: param.PageIndex,
ClientID: param.ClientID,
Name: param.Name,
UID: param.UID,
Status: param.Status,
}
if param.UID != nil {
query.UID = param.UID
}
list, i, err := use.roleRepository.List(ctx, query)
if err != nil {
e := errs.DatabaseErrorWithScopeL(
code.CloudEPPermission,
domain.FailedToListRole,
logx.WithContext(ctx),
[]logx.LogField{
{Key: "param", Value: param},
{Key: "func", Value: "roleRepository.List"},
{Key: "err", Value: err.Error()},
},
"failed to list role")
return nil, 0, e
}
result := make([]usecase.Role, 0, len(list))
for _, item := range list {
result = append(result, usecase.Role{
ID: item.ID.Hex(),
UID: item.UID,
Name: item.Name,
Status: item.Status,
ClientID: item.ClientID,
CreateAt: item.CreateAt,
UpdateAt: item.UpdateAt,
})
}
return result, i, nil
}
func (use *RoleUseCase) All(ctx context.Context, clientID *string) ([]usecase.Role, error) {
all, err := use.roleRepository.All(ctx, clientID)
if err != nil {
e := errs.DatabaseErrorWithScopeL(
code.CloudEPPermission,
domain.FailedToListRole,
logx.WithContext(ctx),
[]logx.LogField{
{Key: "clientID", Value: clientID},
{Key: "func", Value: "roleRepository.All"},
{Key: "err", Value: err.Error()},
},
"failed to get all role")
return nil, e
}
result := make([]usecase.Role, 0, len(all))
for _, item := range all {
result = append(result, usecase.Role{
ID: item.ID.Hex(),
UID: item.UID,
Name: item.Name,
Status: item.Status,
ClientID: item.ClientID,
CreateAt: item.CreateAt,
UpdateAt: item.UpdateAt,
})
}
return result, nil
}
func (use *RoleUseCase) GetByID(ctx context.Context, id string) (*usecase.Role, error) {
byID, err := use.roleRepository.GetByID(ctx, id)
if err != nil {
e := errs.DatabaseErrorWithScopeL(
code.CloudEPPermission,
domain.FailedToGetRoleByID,
logx.WithContext(ctx),
[]logx.LogField{
{Key: "id", Value: id},
{Key: "func", Value: "roleRepository.GetByID"},
{Key: "err", Value: err.Error()},
},
"failed to get role by id")
return nil, e
}
return &usecase.Role{
ID: byID.ID.Hex(),
UID: byID.UID,
Name: byID.Name,
Status: byID.Status,
ClientID: byID.ClientID,
CreateAt: byID.CreateAt,
UpdateAt: byID.UpdateAt,
}, nil
}
func (use *RoleUseCase) GetByUID(ctx context.Context, uid string) (*usecase.Role, error) {
byUID, err := use.roleRepository.GetByUID(ctx, uid)
if err != nil {
e := errs.DatabaseErrorWithScopeL(
code.CloudEPPermission,
domain.FailedToGetRoleByUID,
logx.WithContext(ctx),
[]logx.LogField{
{Key: "uid", Value: uid},
{Key: "func", Value: "roleRepository.GetByUID"},
{Key: "err", Value: err.Error()},
},
"failed to get role by uid")
return nil, e
}
return &usecase.Role{
ID: byUID.ID.Hex(),
UID: byUID.UID,
Name: byUID.Name,
Status: byUID.Status,
ClientID: byUID.ClientID,
CreateAt: byUID.CreateAt,
UpdateAt: byUID.UpdateAt,
}, nil
}
func (use *RoleUseCase) Create(ctx context.Context, role usecase.CreateRoleReq) error {
err := use.roleRepository.Create(ctx, &entity.Role{
UID: role.UID,
Name: role.Name,
Status: role.Status,
ClientID: role.ClientID,
})
if err != nil {
e := errs.DatabaseErrorWithScopeL(
code.CloudEPPermission,
domain.FailedToCreateRole,
logx.WithContext(ctx),
[]logx.LogField{
{Key: "param", Value: role},
{Key: "func", Value: "roleRepository.Create"},
{Key: "err", Value: err.Error()},
},
"failed to create role")
return e
}
return nil
}
func (use *RoleUseCase) Update(ctx context.Context, id string, data usecase.CreateRoleReq) error {
err := use.roleRepository.Update(ctx, repository.UpdateReq{
ID: id,
Name: &data.Name,
UID: &data.UID,
ClientID: &data.ClientID,
Status: &data.Status,
})
if err != nil {
e := errs.DatabaseErrorWithScopeL(
code.CloudEPPermission,
domain.FailedToUpdateRole,
logx.WithContext(ctx),
[]logx.LogField{
{Key: "id", Value: id},
{Key: "param", Value: data},
{Key: "func", Value: "roleRepository.Update"},
{Key: "err", Value: err.Error()},
},
"failed to update role")
return e
}
return nil
}
func (use *RoleUseCase) Delete(ctx context.Context, id string) error {
err := use.roleRepository.Delete(ctx, id)
if err != nil {
e := errs.DatabaseErrorWithScopeL(
code.CloudEPPermission,
domain.FailedToDelRole,
logx.WithContext(ctx),
[]logx.LogField{
{Key: "id", Value: id},
{Key: "func", Value: "roleRepository.Delete"},
{Key: "err", Value: err.Error()},
},
"failed to delete role")
return e
}
return nil
}

View File

@ -0,0 +1,73 @@
package usecase
import (
"context"
"code.30cm.net/digimon/app-cloudep-permission-server/pkg/domain/permission"
"code.30cm.net/digimon/app-cloudep-permission-server/pkg/domain/usecase"
)
type RolePermissionUseCaseParam struct {
//rolePermissionRepository repository.RolePermissionRepository
}
type RolePermissionUseCase struct {
RolePermissionUseCaseParam
}
func NewRolePermissionUseCase(param RolePermissionUseCaseParam) usecase.RolePermissionUseCase {
return &RolePermissionUseCase{
RolePermissionUseCaseParam: param,
}
}
func (use *RolePermissionUseCase) Get(ctx context.Context, roleID string) (permission.Permissions, error) {
//rolePermissions, err := use.rolePermissionRepository.Get(ctx, roleID)
//if err != nil && !errors.Is(err, repository.ErrRecordNotFound) {
// return nil, usecase.InternalError{Err: fmt.Errorf("permissionRepo.Get error: %w", err)}
//}
//
//permissions, err := uc.PermissionRepo.All(ctx)
//if err != nil && !errors.Is(err, repository.ErrRecordNotFound) {
// return nil, usecase.InternalError{Err: fmt.Errorf("permissionRepo.AllStatus error: %w", err)}
//}
//
//// TODO cache http://jira.logintt.com:8080/browse/ESC-2046
//return GeneratePermissionTree(permissions).getFullParentPermission(rolePermissions), nil
//get, err := use.rolePermissionRepository.Get(ctx, roleID)
//if err != nil {
// return nil, err
//}
//
//permissions := make(permission.Permissions, len(get))
//for _, item := range get {
// permissions[item.PermissionID] = item.
//}
//
return permission.Permissions{}, nil
}
func (use *RolePermissionUseCase) GetByRoleUID(ctx context.Context, uid string) (permission.Permissions, error) {
//TODO implement me
panic("implement me")
}
func (use *RolePermissionUseCase) GetByUser(ctx context.Context, uid string) (usecase.UserPermission, error) {
//TODO implement me
panic("implement me")
}
func (use *RolePermissionUseCase) Create(ctx context.Context, roleID string, permissions permission.Permissions) error {
//TODO implement me
panic("implement me")
}
func (use *RolePermissionUseCase) Delete(ctx context.Context, roleID string, permissions permission.Permissions) error {
//TODO implement me
panic("implement me")
}
func (use *RolePermissionUseCase) List(ctx context.Context, req usecase.ListQuery) (usecase.RoleResp, error) {
//TODO implement me
panic("implement me")
}

View File

@ -1,16 +1,17 @@
package usecase
import (
"context"
"fmt"
"testing"
"time"
"code.30cm.net/digimon/app-cloudep-permission-server/pkg/domain/entity"
"code.30cm.net/digimon/app-cloudep-permission-server/pkg/domain/usecase"
mock "code.30cm.net/digimon/app-cloudep-permission-server/pkg/mock/repository"
"context"
"fmt"
"github.com/golang-jwt/jwt/v4"
"github.com/stretchr/testify/assert"
"go.uber.org/mock/gomock"
"testing"
"time"
)
// TestTokenUseCase_CreateAccessToken_TableDriven 透過 table-driven 方式測試 CreateAccessToken

132
pkg/usecase/user_role.go Normal file
View File

@ -0,0 +1,132 @@
package usecase
import (
"context"
"fmt"
"code.30cm.net/digimon/app-cloudep-permission-server/pkg/domain"
"code.30cm.net/digimon/app-cloudep-permission-server/pkg/domain/entity"
"code.30cm.net/digimon/app-cloudep-permission-server/pkg/domain/repository"
"code.30cm.net/digimon/app-cloudep-permission-server/pkg/domain/usecase"
"code.30cm.net/digimon/library-go/errs"
"code.30cm.net/digimon/library-go/errs/code"
"github.com/zeromicro/go-zero/core/logx"
)
type UserRoleUseCaseParam struct {
userRoleRepository repository.UserRoleRepository
}
type UserRoleUseCase struct {
UserRoleUseCaseParam
}
func NewUserRoleUseCase(param UserRoleUseCaseParam) usecase.UserRoleUseCase {
return &UserRoleUseCase{
UserRoleUseCaseParam: param,
}
}
func (use *UserRoleUseCase) Select(ctx context.Context, filter usecase.UserRoleFilter) ([]usecase.UserRole, error) {
id, err := use.userRoleRepository.GetUsersByRoleID(ctx, filter.RoleID)
if err != nil {
e := errs.DatabaseErrorWithScopeL(
code.CloudEPPermission,
domain.FailedToGetUserRole,
logx.WithContext(ctx),
[]logx.LogField{
{Key: "req", Value: filter},
{Key: "func", Value: "userRoleRepository.GetUsersByRoleID"},
{Key: "err", Value: err.Error()},
},
"failed to get users by role id")
return nil, e
}
result := make([]usecase.UserRole, 0, len(id))
for _, item := range result {
result = append(result, usecase.UserRole{
UID: item.UID,
RoleID: filter.RoleID,
CreateAt: item.CreateAt,
UpdateAt: item.UpdateAt,
})
}
return result, nil
}
func (use *UserRoleUseCase) Get(ctx context.Context, uid string) (usecase.UserRole, error) {
id, err := use.userRoleRepository.GetByUserID(ctx, uid)
if err != nil {
e := errs.DatabaseErrorWithScopeL(
code.CloudEPPermission,
domain.FailedToGetUserRoleByUID,
logx.WithContext(ctx),
[]logx.LogField{
{Key: "uid", Value: uid},
{Key: "func", Value: "userRoleRepository.GetByUserID"},
{Key: "err", Value: err.Error()},
},
"failed to get users by role id")
return usecase.UserRole{}, e
}
return usecase.UserRole{
UID: id.UID,
RoleID: id.RoleID,
CreateAt: id.CreateAt,
UpdateAt: id.UpdateAt,
}, nil
}
func (use *UserRoleUseCase) Create(ctx context.Context, uid, roleID string) (usecase.UserRole, error) {
ins := entity.UserRole{
UID: uid,
RoleID: roleID,
}
err := use.userRoleRepository.CreateUserRole(ctx, ins)
if err != nil {
e := errs.DatabaseErrorWithScopeL(
code.CloudEPPermission,
domain.FailedToCreateUserRole,
logx.WithContext(ctx),
[]logx.LogField{
{Key: "uid-role", Value: fmt.Sprintf("%s-%s", uid, roleID)},
{Key: "func", Value: "userRoleRepository.CreateUserRole"},
{Key: "err", Value: err.Error()},
},
"failed to create user role")
return usecase.UserRole{}, e
}
return usecase.UserRole{
UID: ins.UID,
RoleID: ins.RoleID,
CreateAt: ins.CreateAt,
UpdateAt: ins.UpdateAt,
}, nil
}
func (use *UserRoleUseCase) Update(ctx context.Context, uid, roleID string) error {
_, err := use.userRoleRepository.UpdateUserRole(ctx, uid, roleID)
if err != nil {
e := errs.DatabaseErrorWithScopeL(
code.CloudEPPermission,
domain.FailedToUpdateUserRole,
logx.WithContext(ctx),
[]logx.LogField{
{Key: "uid-role", Value: fmt.Sprintf("%s-%s", uid, roleID)},
{Key: "func", Value: "userRoleRepository.UpdateUserRole"},
{Key: "err", Value: err.Error()},
},
"failed to update user role")
return e
}
return nil
}