guard/internal/svc/service_context.go

64 lines
1.7 KiB
Go
Raw Normal View History

package svc
import (
"ark-permission/internal/config"
"ark-permission/internal/domain/repository"
domainUseCase "ark-permission/internal/domain/usecase"
"ark-permission/internal/lib/required"
"ark-permission/internal/model"
repo "ark-permission/internal/repository"
"ark-permission/internal/usecase"
ers "code.30cm.net/wanderland/library-go/errors"
"code.30cm.net/wanderland/library-go/errors/code"
"context"
"github.com/zeromicro/go-zero/core/stores/redis"
"github.com/zeromicro/go-zero/core/stores/sqlx"
)
type ServiceContext struct {
Config config.Config
Validate required.Validate
Redis redis.Redis
TokenRedisRepo repository.TokenRepository
PolicyAgent domainUseCase.OpaUseCase
2024-08-19 01:39:05 +00:00
Conn sqlx.SqlConn
Permission model.PermissionModel
RoleRepo model.RoleModel
}
func NewServiceContext(c config.Config) *ServiceContext {
newRedis, err := redis.NewRedis(c.RedisCluster, redis.Cluster())
if err != nil {
panic(err)
}
ers.Scope = code.CloudEPPermission
sqlConn := sqlx.NewMysql(c.DB.DsnString)
pa, err := usecase.NewOpaUseCase(usecase.OpaUseCaseParam{})
if err != nil {
panic(err)
}
// TODO policy 權限還要再組合過,我的角度會把 UID 當成一種 RoleID 這樣就可以針對每一個人克制權限,,初期也可以使用最簡安的來做統一,再想一下
err = pa.LoadPolicy(context.Background(), []domainUseCase.Policy{})
if err != nil {
panic(err)
}
return &ServiceContext{
Config: c,
Validate: required.MustValidator(),
Redis: *newRedis,
TokenRedisRepo: repo.NewTokenRepository(repo.TokenRepositoryParam{
Store: newRedis,
}),
PolicyAgent: pa,
2024-08-19 01:39:05 +00:00
Permission: model.NewPermissionModel(sqlConn),
RoleRepo: model.NewRoleModel(sqlConn),
Conn: sqlConn,
}
}