1
0
mirror of https://github.com/bitwarden/browser synced 2025-12-20 18:23:31 +00:00

[SM-670] Restrict UI actions based on user permission (#5090)

* Restrict UI actions based on user permission

* Swap to hiding bulk option without permission

* Fix read/write assignment in project service

* Filter projects based on permission in dialog

* Fix encryption error for updating secret result

* Fix spinner (#5182)

* Swap to bit-no-items

* [SM-699] Projects bulk delete - add bulk confirmation dialog (#5200)

* Add bulk confirmation dialog

* Code review updates

* Code review - load projects

* code review - swap to observable

* Code review - remove oninit
This commit is contained in:
Thomas Avery
2023-04-26 13:09:30 -05:00
committed by GitHub
parent 95b1ea318c
commit 208e3f30b4
18 changed files with 259 additions and 88 deletions

View File

@@ -9,15 +9,12 @@ 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 { ProjectPermissionDetailsView, ProjectView } from "../models/view/project.view";
import { 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 {
ProjectPermissionDetailsResponse,
ProjectResponse,
} from "./models/responses/project.response";
import { ProjectResponse } from "./models/responses/project.response";
@Injectable({
providedIn: "root",
@@ -32,10 +29,10 @@ export class ProjectService {
private encryptService: EncryptService
) {}
async getByProjectId(projectId: string): Promise<ProjectPermissionDetailsView> {
async getByProjectId(projectId: string): Promise<ProjectView> {
const r = await this.apiService.send("GET", "/projects/" + projectId, null, true, true);
const projectResponse = new ProjectPermissionDetailsResponse(r);
return await this.createProjectPermissionDetailsView(projectResponse);
const projectResponse = new ProjectResponse(r);
return await this.createProjectView(projectResponse);
}
async getProjects(organizationId: string): Promise<ProjectListView[]> {
@@ -99,9 +96,7 @@ export class ProjectService {
return request;
}
private async createProjectView(
projectResponse: ProjectResponse | ProjectPermissionDetailsResponse
) {
private async createProjectView(projectResponse: ProjectResponse) {
const orgKey = await this.getOrganizationKey(projectResponse.organizationId);
const projectView = new ProjectView();
@@ -109,6 +104,8 @@ export class ProjectService {
projectView.organizationId = projectResponse.organizationId;
projectView.creationDate = projectResponse.creationDate;
projectView.revisionDate = projectResponse.revisionDate;
projectView.read = projectResponse.read;
projectView.write = projectResponse.write;
projectView.name = await this.encryptService.decryptToUtf8(
new EncString(projectResponse.name),
orgKey
@@ -116,16 +113,6 @@ export class ProjectService {
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[]
@@ -136,6 +123,8 @@ export class ProjectService {
const projectListView = new ProjectListView();
projectListView.id = s.id;
projectListView.organizationId = s.organizationId;
projectListView.read = s.read;
projectListView.write = s.write;
projectListView.name = await this.encryptService.decryptToUtf8(
new EncString(s.name),
orgKey