[SM-572] Hide Project's People and Service accounts tabs based on permission (#4885)
* Hide tabs based on permission * Swap to a new endpoint * Swap to different server implementation * Swap to server's ProjectPermissionDetails * remove async * remove write access observable * Fix mac decrypt error
This commit is contained in:
parent
5cc73d41d9
commit
5f05f73626
|
@ -5,3 +5,8 @@ export class ProjectView {
|
|||
creationDate: string;
|
||||
revisionDate: string;
|
||||
}
|
||||
|
||||
export class ProjectPermissionDetailsView extends ProjectView {
|
||||
read: boolean;
|
||||
write: boolean;
|
||||
}
|
||||
|
|
|
@ -16,3 +16,14 @@ export class ProjectResponse extends BaseResponse {
|
|||
this.revisionDate = this.getResponseProperty("RevisionDate");
|
||||
}
|
||||
}
|
||||
|
||||
export class ProjectPermissionDetailsResponse extends ProjectResponse {
|
||||
read: boolean;
|
||||
write: boolean;
|
||||
|
||||
constructor(response: any) {
|
||||
super(response);
|
||||
this.read = this.getResponseProperty("Read");
|
||||
this.write = this.getResponseProperty("Write");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -9,12 +9,15 @@ import { SymmetricCryptoKey } from "@bitwarden/common/models/domain/symmetric-cr
|
|||
import { ListResponse } from "@bitwarden/common/models/response/list.response";
|
||||
|
||||
import { ProjectListView } from "../models/view/project-list.view";
|
||||
import { ProjectView } from "../models/view/project.view";
|
||||
import { ProjectPermissionDetailsView, ProjectView } from "../models/view/project.view";
|
||||
import { BulkOperationStatus } from "../shared/dialogs/bulk-status-dialog.component";
|
||||
|
||||
import { ProjectRequest } from "./models/requests/project.request";
|
||||
import { ProjectListItemResponse } from "./models/responses/project-list-item.response";
|
||||
import { ProjectResponse } from "./models/responses/project.response";
|
||||
import {
|
||||
ProjectPermissionDetailsResponse,
|
||||
ProjectResponse,
|
||||
} from "./models/responses/project.response";
|
||||
|
||||
@Injectable({
|
||||
providedIn: "root",
|
||||
|
@ -29,10 +32,10 @@ export class ProjectService {
|
|||
private encryptService: EncryptService
|
||||
) {}
|
||||
|
||||
async getByProjectId(projectId: string): Promise<ProjectView> {
|
||||
async getByProjectId(projectId: string): Promise<ProjectPermissionDetailsView> {
|
||||
const r = await this.apiService.send("GET", "/projects/" + projectId, null, true, true);
|
||||
const projectResponse = new ProjectResponse(r);
|
||||
return await this.createProjectView(projectResponse);
|
||||
const projectResponse = new ProjectPermissionDetailsResponse(r);
|
||||
return await this.createProjectPermissionDetailsView(projectResponse);
|
||||
}
|
||||
|
||||
async getProjects(organizationId: string): Promise<ProjectListView[]> {
|
||||
|
@ -96,7 +99,9 @@ export class ProjectService {
|
|||
return request;
|
||||
}
|
||||
|
||||
private async createProjectView(projectResponse: ProjectResponse): Promise<ProjectView> {
|
||||
private async createProjectView(
|
||||
projectResponse: ProjectResponse | ProjectPermissionDetailsResponse
|
||||
) {
|
||||
const orgKey = await this.getOrganizationKey(projectResponse.organizationId);
|
||||
|
||||
const projectView = new ProjectView();
|
||||
|
@ -108,10 +113,19 @@ export class ProjectService {
|
|||
new EncString(projectResponse.name),
|
||||
orgKey
|
||||
);
|
||||
|
||||
return projectView;
|
||||
}
|
||||
|
||||
private async createProjectPermissionDetailsView(
|
||||
projectResponse: ProjectPermissionDetailsResponse
|
||||
): Promise<ProjectPermissionDetailsView> {
|
||||
return {
|
||||
...(await this.createProjectView(projectResponse)),
|
||||
read: projectResponse.read,
|
||||
write: projectResponse.write,
|
||||
};
|
||||
}
|
||||
|
||||
private async createProjectsListView(
|
||||
organizationId: string,
|
||||
projects: ProjectListItemResponse[]
|
||||
|
|
|
@ -4,8 +4,10 @@
|
|||
</bit-breadcrumbs>
|
||||
<bit-tab-nav-bar label="Main" slot="tabs">
|
||||
<bit-tab-link [route]="['secrets']">{{ "secrets" | i18n }}</bit-tab-link>
|
||||
<ng-container *ngIf="project.write">
|
||||
<bit-tab-link [route]="['people']">{{ "people" | i18n }}</bit-tab-link>
|
||||
<bit-tab-link [route]="['service-accounts']">{{ "serviceAccounts" | i18n }}</bit-tab-link>
|
||||
</ng-container>
|
||||
</bit-tab-nav-bar>
|
||||
<sm-new-menu></sm-new-menu>
|
||||
</sm-header>
|
||||
|
|
|
@ -2,7 +2,7 @@ import { Component, OnInit } from "@angular/core";
|
|||
import { ActivatedRoute } from "@angular/router";
|
||||
import { Observable, switchMap } from "rxjs";
|
||||
|
||||
import { ProjectView } from "../../models/view/project.view";
|
||||
import { ProjectPermissionDetailsView } from "../../models/view/project.view";
|
||||
import { ProjectService } from "../project.service";
|
||||
|
||||
@Component({
|
||||
|
@ -10,7 +10,7 @@ import { ProjectService } from "../project.service";
|
|||
templateUrl: "./project.component.html",
|
||||
})
|
||||
export class ProjectComponent implements OnInit {
|
||||
project$: Observable<ProjectView>;
|
||||
project$: Observable<ProjectPermissionDetailsView>;
|
||||
|
||||
constructor(private route: ActivatedRoute, private projectService: ProjectService) {}
|
||||
|
||||
|
|
|
@ -277,10 +277,12 @@ export class AccessPolicyService {
|
|||
...this.createBaseAccessPolicyView(response),
|
||||
grantedProjectId: response.grantedProjectId,
|
||||
serviceAccountId: response.serviceAccountId,
|
||||
grantedProjectName: await this.encryptService.decryptToUtf8(
|
||||
grantedProjectName: response.grantedProjectName
|
||||
? await this.encryptService.decryptToUtf8(
|
||||
new EncString(response.grantedProjectName),
|
||||
organizationKey
|
||||
),
|
||||
)
|
||||
: null,
|
||||
serviceAccountName: await this.encryptService.decryptToUtf8(
|
||||
new EncString(response.serviceAccountName),
|
||||
organizationKey
|
||||
|
|
Loading…
Reference in New Issue