Skip to content

Commit

Permalink
Merge pull request #231 from cho4036/dev-rbac-tks
Browse files Browse the repository at this point in the history
RBAC 관련 구조체 설계(Role, Permission, Endpoint) 및 tks 권한 적용
  • Loading branch information
ktkfree authored Mar 4, 2024
2 parents b43aca2 + 599f58d commit 18c44cc
Show file tree
Hide file tree
Showing 40 changed files with 3,245 additions and 582 deletions.
3 changes: 3 additions & 0 deletions cmd/server/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,9 @@ func main() {
log.Fatal("cannot connect gormDB")
}

// Ensure default rows in database
err = database.EnsureDefaultRows(db)

// Initialize external client
var argoClient argowf.ArgoClient
if viper.GetString("argo-address") == "" || viper.GetInt("argo-port") == 0 {
Expand Down
69 changes: 60 additions & 9 deletions internal/database/database.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package database

import (
"fmt"
"github.com/openinfradev/tks-api/internal/delivery/api"
"os"
"strings"

Expand Down Expand Up @@ -57,18 +58,15 @@ func migrateSchema(db *gorm.DB) error {
if err := db.AutoMigrate(&repository.CacheEmailCode{}); err != nil {
return err
}
if err := db.AutoMigrate(&repository.User{}); err != nil {
if err := db.AutoMigrate(&domain.User{}); err != nil {
return err
}
if err := db.AutoMigrate(&repository.Role{}); err != nil {
return err
}
if err := db.AutoMigrate(&repository.Policy{}); err != nil {
if err := db.AutoMigrate(&domain.Role{}); err != nil {
return err
}

// Organization
if err := db.AutoMigrate(&repository.Organization{}); err != nil {
if err := db.AutoMigrate(&domain.Organization{}); err != nil {
return err
}

Expand Down Expand Up @@ -114,11 +112,19 @@ func migrateSchema(db *gorm.DB) error {
return err
}

// Project
if err := db.AutoMigrate(&domain.Project{}); err != nil {
// Role
if err := db.AutoMigrate(&domain.Role{}); err != nil {
return err
}
if err := db.AutoMigrate(&domain.ProjectRole{}); err != nil {
if err := db.AutoMigrate(&domain.Permission{}); err != nil {
return err
}
if err := db.AutoMigrate(&domain.Endpoint{}); err != nil {
return err
}

// Project
if err := db.AutoMigrate(&domain.Project{}); err != nil {
return err
}
if err := db.AutoMigrate(&domain.ProjectMember{}); err != nil {
Expand All @@ -127,6 +133,51 @@ func migrateSchema(db *gorm.DB) error {
if err := db.AutoMigrate(&domain.ProjectNamespace{}); err != nil {
return err
}
if err := db.AutoMigrate(&domain.ProjectRole{}); err != nil {
return err
}

return nil
}

func EnsureDefaultRows(db *gorm.DB) error {
// Create default rows
repoFactory := repository.Repository{
Auth: repository.NewAuthRepository(db),
User: repository.NewUserRepository(db),
Cluster: repository.NewClusterRepository(db),
Organization: repository.NewOrganizationRepository(db),
AppGroup: repository.NewAppGroupRepository(db),
AppServeApp: repository.NewAppServeAppRepository(db),
CloudAccount: repository.NewCloudAccountRepository(db),
StackTemplate: repository.NewStackTemplateRepository(db),
Alert: repository.NewAlertRepository(db),
Role: repository.NewRoleRepository(db),
Permission: repository.NewPermissionRepository(db),
Endpoint: repository.NewEndpointRepository(db),
Project: repository.NewProjectRepository(db),
}

//
eps, err := repoFactory.Endpoint.List(nil)
if err != nil {
return err
}

var storedEps = make(map[string]struct{})
for _, ep := range eps {
storedEps[ep.Name] = struct{}{}
}
for _, ep := range api.ApiMap {
if _, ok := storedEps[ep.Name]; !ok {
if err := repoFactory.Endpoint.Create(&domain.Endpoint{
Name: ep.Name,
Group: ep.Group,
}); err != nil {
return err
}
}
}

// Audit
if err := db.AutoMigrate(&repository.Audit{}); err != nil {
Expand Down
147 changes: 104 additions & 43 deletions internal/delivery/api/endpoint.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ const (
VerifyIdentityForLostId
VerifyIdentityForLostPassword
VerifyToken
DeleteToken

// User
CreateUser
Expand Down Expand Up @@ -67,20 +68,20 @@ const (
CreateApplication

// AppServeApp
CreateAppServeApp
GetAppServeApps
GetNumOfAppsOnStack
GetAppServeApp
GetAppServeAppTasksByAppId
GetAppServeAppTaskDetail
GetAppServeAppLatestTask
IsAppServeAppExist
IsAppServeAppNameExist
DeleteAppServeApp
UpdateAppServeApp
UpdateAppServeAppStatus
UpdateAppServeAppEndpoint
RollbackAppServeApp
CreateAppServeApp // 프로젝트 관리/앱 서빙/배포 // 프로젝트 관리/앱 서빙/빌드
GetAppServeApps // 프로젝트 관리/앱 서빙/조회
GetNumOfAppsOnStack // 프로젝트 관리/앱 서빙/조회
GetAppServeApp // 프로젝트 관리/앱 서빙/조회
GetAppServeAppLatestTask // 프로젝트 관리/앱 서빙/조회
IsAppServeAppExist // 프로젝트 관리/앱 서빙/조회 // 프로젝트 관리/앱 서빙/배포 // 프로젝트 관리/앱 서빙/빌드
IsAppServeAppNameExist // 프로젝트 관리/앱 서빙/조회 // 프로젝트 관리/앱 서빙/배포 // 프로젝트 관리/앱 서빙/빌드
DeleteAppServeApp // 프로젝트 관리/앱 서빙/삭제
UpdateAppServeApp // 프로젝트 관리/앱 서빙/배포 // 프로젝트 관리/앱 서빙/빌드
UpdateAppServeAppStatus // 프로젝트 관리/앱 서빙/배포 // 프로젝트 관리/앱 서빙/빌드
UpdateAppServeAppEndpoint // 프로젝트 관리/앱 서빙/배포 // 프로젝트 관리/앱 서빙/빌드
RollbackAppServeApp // 프로젝트 관리/앱 서빙/배포 // 프로젝트 관리/앱 서빙/빌드

// CloudAccount
GetCloudAccounts
Expand All @@ -101,10 +102,10 @@ const (
DeleteStackTemplate

// Dashboard
GetChartsDashboard
GetChartDashboard
GetStacksDashboard
GetResourcesDashboard
GetChartsDashboard // 대시보드/대시보드/조회
GetChartDashboard // 대시보드/대시보드/조회
GetStacksDashboard // 대시보드/대시보드/조회
GetResourcesDashboard // 대시보드/대시보드/조회

// Alert
CreateAlert
Expand All @@ -115,36 +116,36 @@ const (
CreateAlertAction

// Stack
GetStacks
CreateStack
CheckStackName
GetStack
UpdateStack
DeleteStack
GetStackKubeConfig
GetStackStatus
SetFavoriteStack
DeleteFavoriteStack
InstallStack
GetStacks // 스택관리/조회
CreateStack // // 스택관리/생성
CheckStackName // 스택관리/조회
GetStack // 스택관리/조회
UpdateStack // 스택관리/수정
DeleteStack // 스택관리/삭제
GetStackKubeConfig // 스택관리/조회
GetStackStatus // 스택관리/조회
SetFavoriteStack // 스택관리/조회
DeleteFavoriteStack // 스택관리/조회
InstallStack // 스택관리 / 조회

// Project
CreateProject
GetProjectRoles
GetProjectRole
GetProjects
GetProject
UpdateProject
DeleteProject
AddProjectMember
GetProjectMember
GetProjectMembers
RemoveProjectMember
UpdateProjectMemberRole
CreateProjectNamespace
GetProjectNamespaces
GetProjectNamespace
CreateProject // 프로젝트 관리/프로젝트/생성
GetProjectRoles // 프로젝트 관리/설정-일반/조회 // 프로젝트 관리/설정-멤버/조회
GetProjectRole // 프로젝트 관리/설정-일반/조회 // 프로젝트 관리/설정-멤버/조회
GetProjects // 프로젝트 관리/프로젝트/조회 // 프로젝트 관리/설정-일반/조회
GetProject // 프로젝트 관리/프로젝트/조회 // 프로젝트 관리/설정-일반/조회
UpdateProject // 프로젝트 관리/설정-일반/수정
DeleteProject // 프로젝트 관리/설정-일반/삭제
AddProjectMember // 프로젝트 관리/설정-멤버/생성
GetProjectMember // 프로젝트 관리/설정-멤버/조회
GetProjectMembers // 프로젝트 관리/설정-멤버/조회
RemoveProjectMember // 프로젝트 관리/설정-멤버/삭제
UpdateProjectMemberRole // 프로젝트 관리/설정-멤버/수정
CreateProjectNamespace // 프로젝트 관리/설정-네임스페이스/생성
GetProjectNamespaces // 프로젝트 관리/설정-네임스페이스/조회
GetProjectNamespace // 프로젝트 관리/설정-네임스페이스/조회
UpdateProjectNamespace
DeleteProjectNamespace
DeleteProjectNamespace // 프로젝트 관리/설정-네임스페이스/삭제
SetFavoriteProject
SetFavoriteProjectNamespace
UnSetFavoriteProject
Expand All @@ -156,6 +157,18 @@ const (
GetAudits
GetAudit
DeleteAudit

// Role
CreateTksRole
ListTksRoles
GetTksRole
DeleteTksRole
UpdateTksRole

// Permission
GetPermissionTemplates
GetPermissionsByRoleId
UpdatePermissionsByRoleId
)

var ApiMap = map[Endpoint]EndpointInfo{
Expand Down Expand Up @@ -195,6 +208,10 @@ var ApiMap = map[Endpoint]EndpointInfo{
Name: "VerifyToken",
Group: "Auth",
},
DeleteToken: {
Name: "DeleteToken",
Group: "Auth",
},
CreateUser: {
Name: "CreateUser",
Group: "User",
Expand Down Expand Up @@ -635,6 +652,26 @@ var ApiMap = map[Endpoint]EndpointInfo{
Name: "DeleteAudit",
Group: "Audit",
},
CreateTksRole: {
Name: "CreateTksRole",
Group: "Role",
},
ListTksRoles: {
Name: "ListTksRoles",
Group: "Role",
},
GetTksRole: {
Name: "GetTksRole",
Group: "Role",
},
DeleteTksRole: {
Name: "DeleteTksRole",
Group: "Role",
},
UpdateTksRole: {
Name: "UpdateTksRole",
Group: "Role",
},
}

func (e Endpoint) String() string {
Expand All @@ -657,6 +694,8 @@ func (e Endpoint) String() string {
return "VerifyIdentityForLostPassword"
case VerifyToken:
return "VerifyToken"
case DeleteToken:
return "DeleteToken"
case CreateUser:
return "CreateUser"
case ListUser:
Expand Down Expand Up @@ -877,6 +916,16 @@ func (e Endpoint) String() string {
return "GetAudit"
case DeleteAudit:
return "DeleteAudit"
case CreateTksRole:
return "CreateTksRole"
case ListTksRoles:
return "ListTksRoles"
case GetTksRole:
return "GetTksRole"
case DeleteTksRole:
return "DeleteTksRole"
case UpdateTksRole:
return "UpdateTksRole"
default:
return ""
}
Expand All @@ -901,6 +950,8 @@ func GetEndpoint(name string) Endpoint {
return VerifyIdentityForLostPassword
case "VerifyToken":
return VerifyToken
case "DeleteToken":
return DeleteToken
case "CreateUser":
return CreateUser
case "ListUser":
Expand Down Expand Up @@ -1121,6 +1172,16 @@ func GetEndpoint(name string) Endpoint {
return GetAudit
case "DeleteAudit":
return DeleteAudit
case "CreateTksRole":
return CreateTksRole
case "ListTksRoles":
return ListTksRoles
case "GetTksRole":
return GetTksRole
case "DeleteTksRole":
return DeleteTksRole
case "UpdateTksRole":
return UpdateTksRole
default:
return -1
}
Expand Down
1 change: 1 addition & 0 deletions internal/delivery/http/auth.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import (
type IAuthHandler interface {
Login(w http.ResponseWriter, r *http.Request)
Logout(w http.ResponseWriter, r *http.Request)
// Deprecated: PingToken is deprecated. Use VerifyToken instead.
PingToken(w http.ResponseWriter, r *http.Request)
RefreshToken(w http.ResponseWriter, r *http.Request)
FindId(w http.ResponseWriter, r *http.Request)
Expand Down
Loading

0 comments on commit 18c44cc

Please sign in to comment.