(ctx context.Context, user *store.UserMessage, permission permission.Permission, iamManager *iam.Manager, stores *store.Store)
| 132 | } |
| 133 | |
| 134 | func getProjectIDsSearchFilter(ctx context.Context, user *store.UserMessage, permission permission.Permission, iamManager *iam.Manager, stores *store.Store) (*[]string, error) { |
| 135 | workspaceID := common.GetWorkspaceIDFromContext(ctx) |
| 136 | projects, err := stores.ListProjects(ctx, &store.FindProjectMessage{Workspace: workspaceID}) |
| 137 | if err != nil { |
| 138 | return nil, errors.Wrapf(err, "failed to list projects") |
| 139 | } |
| 140 | |
| 141 | ok, err := iamManager.CheckPermission(ctx, permission, user, workspaceID) |
| 142 | if err != nil { |
| 143 | return nil, errors.Wrapf(err, "failed to check permission %q", permission) |
| 144 | } |
| 145 | if ok { |
| 146 | projectIDs := make([]string, 0, len(projects)) |
| 147 | for _, project := range projects { |
| 148 | projectIDs = append(projectIDs, project.ResourceID) |
| 149 | } |
| 150 | return &projectIDs, nil |
| 151 | } |
| 152 | |
| 153 | var projectIDs []string |
| 154 | for _, project := range projects { |
| 155 | ok, err := iamManager.CheckPermission(ctx, permission, user, workspaceID, project.ResourceID) |
| 156 | if err != nil { |
| 157 | return nil, errors.Wrapf(err, "failed to check permission %q", permission) |
| 158 | } |
| 159 | if ok { |
| 160 | projectIDs = append(projectIDs, project.ResourceID) |
| 161 | } |
| 162 | } |
| 163 | return &projectIDs, nil |
| 164 | } |
| 165 | |
| 166 | // CreatePlan creates a new plan. |
| 167 | func (s *PlanService) CreatePlan(ctx context.Context, request *connect.Request[v1pb.CreatePlanRequest]) (*connect.Response[v1pb.Plan], error) { |
no test coverage detected