package admin_role import ( "context" "fmt" "github.com/google/uuid" "go-micro.dev/v4/auth" "golang.org/x/crypto/bcrypt" "gorm.io/driver/mysql" "gorm.io/gorm" "gorm.io/gorm/logger" "gorm.io/gorm/schema" req "sghgogs.com/sghblog/authorization-service/domain/model/request" "sghgogs.com/sghblog/authorization-service/domain/repository" "sghgogs.com/sghblog/authorization-service/domain/service" pb "sghgogs.com/sghblog/authorization-service/proto" "testing" ) // hashPassword 使用 bcrypt 对密码进行哈希 func hashPassword(password string) (string, error) { hash, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost) if err != nil { return "", err } return string(hash), nil } func TestAdminLogin(t *testing.T) { address := fmt.Sprintf("%v:%v@(%v:%v)/%v?charset=utf8mb4,utf8&parseTime=True&loc=Local", "root", "xugang131500", "47.56.16.206", 3306, "sghblog") db, err := gorm.Open(mysql.Open(address), &gorm.Config{ Logger: logger.Default.LogMode(logger.Info), NamingStrategy: schema.NamingStrategy{ SingularTable: true, }}) if err != nil { t.Fatal(err) } repo := repository.NewRepository(db) newService := service.NewService(repo) t.Run("创建角色", func(t *testing.T) { roleRequest := &pb.CreateAdminRoleRequest{ Name: "kubernetes", Description: "K8s 管理员", } err = newService.CreateAdminRole(context.Background(), roleRequest) fmt.Println(err) fmt.Println(roleRequest) }) t.Run("测试创建", func(t *testing.T) { // role := req.AdminRole{ // Name: "12sdfa3", // Description: "12312312", // CreatedBy: "asdf", // CreatedAt: time.Time{}, // UpdatedAt: nil, // Status: pb.StatusEnum_DELETED, // IsReserved: false, // } // db.Model(req.AdminRole{}).Create(&role) var res req.AdminRole db.Where("name = ?", "12sdfa3").Model(res) fmt.Println("res", res.Status == pb.StatusEnum_DELETED) fmt.Println("res", res.Status == pb.StatusEnum_ENABLED) fmt.Println("res", res.Status == pb.StatusEnum_DISABLED) // ids := []int64{1, 2, 3, 4, 5, 6, 7} // err2 := db.Model(req.AdminRole{}).Where("id IN ?", ids).Updates(map[string]interface{}{ // "status": pb.StatusEnum_ENABLED, // }).Error // fmt.Println(err2) // err2 := newService.ToggleAdminRole(context.Background(), 1, pb.StatusEnum_ENABLED) // fmt.Println(err2) }) t.Run("查询角色列表", func(t *testing.T) { rolesRequest := &pb.ListAdminRolesRequest{ Page: 1, PageSize: 10, } roles, i, err2 := newService.ListAdminRoles(rolesRequest) for _, item := range roles { fmt.Println("item", item) } fmt.Println(i) fmt.Println(err2) }) t.Run("获取所有启用的角色", func(t *testing.T) { roles, err2 := newService.RetrieveEnabledRoles() fmt.Println(err2) fmt.Println(roles) }) t.Run("获取详情", func(t *testing.T) { role, err2 := newService.GetAdminRole(1) fmt.Println(err2) fmt.Println(role) // fmt.Println(role) }) t.Run("授权角色", func(t *testing.T) { users := []int64{2} // var permissions []int64 err2 := newService.UpdateAdminRole(&pb.UpdateAdminRoleRequest{ RoleId: 3, Users: users, }) fmt.Println(err2) }) t.Run("初始化配置", func(t *testing.T) { // []*auth.Rule roles := make([]req.AdminRole, 0) db.Model(&req.AdminRole{}).Where("status = ?", pb.StatusEnum_ENABLED).Preload("Permissions", "status = ?", pb.StatusEnum_ENABLED).Find(&roles) }) // user, err := repo.AdminLogin(loginRequest) // 断言期望的结果 // assert.NoError(t, err) // assert.NotNil(t, user) // assert.Equal(t, loginRequest.Username, user.Username) } func UpdateRulesItems(roles []req.AdminRole) []*auth.Rule { rules := make([]*auth.Rule, 0) for _, role := range roles { for _, permission := range role.Permissions { fmt.Println(fmt.Sprintf("%+v", auth.Rule{ ID: uuid.New().String(), Scope: role.Name, Priority: 1, })) fmt.Println(fmt.Sprintf("%+v", auth.Resource{ Name: "authorizationservice", Type: "user", Endpoint: permission.Endpoint, })) rules = append(rules, &auth.Rule{ Resource: &auth.Resource{ Name: "authorizationservice", Type: "user", Endpoint: permission.Endpoint, }, ID: uuid.New().String(), Scope: role.Name, Priority: 1, }) } } return rules }