@@ -42,14 +42,18 @@ type WorkflowService struct {
4242 useCase * biz.WorkflowUseCase
4343 projectsUseCase * biz.ProjectUseCase
4444 contractUC * biz.WorkflowContractUseCase
45+ orgUseCase * biz.OrganizationUseCase
46+ userUseCase * biz.UserUseCase
4547}
4648
47- func NewWorkflowService (uc * biz.WorkflowUseCase , wfuc * biz.WorkflowContractUseCase , projectUseCase * biz.ProjectUseCase , opts ... NewOpt ) * WorkflowService {
49+ func NewWorkflowService (uc * biz.WorkflowUseCase , wfuc * biz.WorkflowContractUseCase , projectUseCase * biz.ProjectUseCase , orgUC * biz. OrganizationUseCase , userUC * biz. UserUseCase , opts ... NewOpt ) * WorkflowService {
4850 return & WorkflowService {
4951 service : newService (opts ... ),
5052 useCase : uc ,
5153 contractUC : wfuc ,
5254 projectsUseCase : projectUseCase ,
55+ orgUseCase : orgUC ,
56+ userUseCase : userUC ,
5357 }
5458}
5559
@@ -59,6 +63,12 @@ func (s *WorkflowService) Create(ctx context.Context, req *pb.WorkflowServiceCre
5963 return nil , err
6064 }
6165
66+ // Get organization
67+ org , err := s .orgUseCase .FindByID (ctx , currentOrg .ID )
68+ if err != nil {
69+ return nil , handleUseCaseErr (err , s .log )
70+ }
71+
6272 if _ , err = s .userHasPermissionOnProject (ctx , currentOrg .ID , & pb.IdentityReference {Name : & req .ProjectName }, authz .PolicyWorkflowCreate ); err != nil {
6373 // if the project is not found, check if user can create projects
6474 if ! errors .IsNotFound (err ) {
@@ -71,14 +81,15 @@ func (s *WorkflowService) Create(ctx context.Context, req *pb.WorkflowServiceCre
7181 }
7282
7383 createOpts := & biz.WorkflowCreateOpts {
74- OrgID : currentOrg .ID ,
75- Name : req .GetName (),
76- Project : req .GetProjectName (),
77- Team : req .GetTeam (),
78- ContractName : req .GetContractName (),
79- ContractBytes : req .GetContractBytes (),
80- Description : req .GetDescription (),
81- Public : req .GetPublic (),
84+ OrgID : currentOrg .ID ,
85+ Name : req .GetName (),
86+ Project : req .GetProjectName (),
87+ Team : req .GetTeam (),
88+ ContractName : req .GetContractName (),
89+ ContractBytes : req .GetContractBytes (),
90+ Description : req .GetDescription (),
91+ Public : req .GetPublic (),
92+ OrgRestrictContractCreationToAdmins : org .RestrictContractCreationToOrgAdmins ,
8293 }
8394
8495 // add current user as the owner of the project in case it needs to be created
@@ -89,6 +100,12 @@ func (s *WorkflowService) Create(ctx context.Context, req *pb.WorkflowServiceCre
89100 return nil , handleUseCaseErr (err , s .log )
90101 }
91102 createOpts .Owner = & userID
103+
104+ // Check if user is an org admin
105+ membership , err := s .userUseCase .MembershipInOrg (ctx , user .ID , org .Name )
106+ if err == nil && membership != nil {
107+ createOpts .UserIsOrgAdmin = membership .Role .IsAdmin ()
108+ }
92109 }
93110
94111 p , err := s .useCase .Create (ctx , createOpts )
0 commit comments