diff --git a/bitwarden_license/src/app/app.module.ts b/bitwarden_license/src/app/app.module.ts index 9e0de2af..781e3f45 100644 --- a/bitwarden_license/src/app/app.module.ts +++ b/bitwarden_license/src/app/app.module.ts @@ -19,17 +19,17 @@ import { MaximumVaultTimeoutPolicyComponent } from "./policies/maximum-vault-tim @NgModule({ imports: [ - AppRoutingModule, - BrowserAnimationsModule, - DragDropModule, - FormsModule, - InfiniteScrollModule, JslibModule, - OrganizationsModule, - OssRoutingModule, + BrowserAnimationsModule, + FormsModule, ReactiveFormsModule, - RouterModule, ServicesModule, + InfiniteScrollModule, + DragDropModule, + AppRoutingModule, + OssRoutingModule, + OrganizationsModule, // Must be after OssRoutingModule for competing routes to resolve properly + RouterModule, WildcardRoutingModule, // Needs to be last to catch all non-existing routes ], declarations: [ diff --git a/bitwarden_license/src/app/organizations/organizations-routing.module.ts b/bitwarden_license/src/app/organizations/organizations-routing.module.ts index 0bb5063b..7ce7f56c 100644 --- a/bitwarden_license/src/app/organizations/organizations-routing.module.ts +++ b/bitwarden_license/src/app/organizations/organizations-routing.module.ts @@ -4,10 +4,10 @@ import { RouterModule, Routes } from "@angular/router"; import { AuthGuard } from "jslib-angular/guards/auth.guard"; import { Permissions } from "jslib-common/enums/permissions"; -import { OrganizationLayoutComponent } from "src/app/layouts/organization-layout.component"; +import { PermissionsGuard } from "src/app/organizations/guards/permissions.guard"; +import { OrganizationLayoutComponent } from "src/app/organizations/layouts/organization-layout.component"; import { ManageComponent } from "src/app/organizations/manage/manage.component"; -import { OrganizationGuardService } from "src/app/services/organization-guard.service"; -import { OrganizationTypeGuardService } from "src/app/services/organization-type-guard.service"; +import { NavigationPermissionsService } from "src/app/organizations/services/navigation-permissions.service"; import { SsoComponent } from "./manage/sso.component"; @@ -15,24 +15,15 @@ const routes: Routes = [ { path: "organizations/:organizationId", component: OrganizationLayoutComponent, - canActivate: [AuthGuard, OrganizationGuardService], + canActivate: [AuthGuard, PermissionsGuard], children: [ { path: "manage", component: ManageComponent, - canActivate: [OrganizationTypeGuardService], + canActivate: [PermissionsGuard], data: { permissions: [ - Permissions.CreateNewCollections, - Permissions.EditAnyCollection, - Permissions.DeleteAnyCollection, - Permissions.EditAssignedCollections, - Permissions.DeleteAssignedCollections, - Permissions.AccessEventLogs, - Permissions.ManageGroups, - Permissions.ManageUsers, - Permissions.ManagePolicies, - Permissions.ManageSso, + NavigationPermissionsService.getPermissions("manage").concat(Permissions.ManageSso), ], }, children: [ diff --git a/bitwarden_license/src/app/providers/services/provider-type-guard.service.ts b/bitwarden_license/src/app/providers/guards/provider-type.guard.ts similarity index 94% rename from bitwarden_license/src/app/providers/services/provider-type-guard.service.ts rename to bitwarden_license/src/app/providers/guards/provider-type.guard.ts index 84997686..107fd044 100644 --- a/bitwarden_license/src/app/providers/services/provider-type-guard.service.ts +++ b/bitwarden_license/src/app/providers/guards/provider-type.guard.ts @@ -5,7 +5,7 @@ import { ProviderService } from "jslib-common/abstractions/provider.service"; import { Permissions } from "jslib-common/enums/permissions"; @Injectable() -export class ProviderTypeGuardService implements CanActivate { +export class PermissionsGuard implements CanActivate { constructor(private providerService: ProviderService, private router: Router) {} async canActivate(route: ActivatedRouteSnapshot) { diff --git a/bitwarden_license/src/app/providers/services/provider-guard.service.ts b/bitwarden_license/src/app/providers/guards/provider.guard.ts similarity index 94% rename from bitwarden_license/src/app/providers/services/provider-guard.service.ts rename to bitwarden_license/src/app/providers/guards/provider.guard.ts index 51f62272..444d65fd 100644 --- a/bitwarden_license/src/app/providers/services/provider-guard.service.ts +++ b/bitwarden_license/src/app/providers/guards/provider.guard.ts @@ -6,7 +6,7 @@ import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.se import { ProviderService } from "jslib-common/abstractions/provider.service"; @Injectable() -export class ProviderGuardService implements CanActivate { +export class ProviderGuard implements CanActivate { constructor( private router: Router, private platformUtilsService: PlatformUtilsService, diff --git a/bitwarden_license/src/app/providers/providers-routing.module.ts b/bitwarden_license/src/app/providers/providers-routing.module.ts index 21b67319..14cd7c47 100644 --- a/bitwarden_license/src/app/providers/providers-routing.module.ts +++ b/bitwarden_license/src/app/providers/providers-routing.module.ts @@ -9,13 +9,13 @@ import { ProvidersComponent } from "src/app/providers/providers.component"; import { ClientsComponent } from "./clients/clients.component"; import { CreateOrganizationComponent } from "./clients/create-organization.component"; +import { PermissionsGuard } from "./guards/provider-type.guard"; +import { ProviderGuard } from "./guards/provider.guard"; import { AcceptProviderComponent } from "./manage/accept-provider.component"; import { EventsComponent } from "./manage/events.component"; import { ManageComponent } from "./manage/manage.component"; import { PeopleComponent } from "./manage/people.component"; import { ProvidersLayoutComponent } from "./providers-layout.component"; -import { ProviderGuardService } from "./services/provider-guard.service"; -import { ProviderTypeGuardService } from "./services/provider-type-guard.service"; import { AccountComponent } from "./settings/account.component"; import { SettingsComponent } from "./settings/settings.component"; import { SetupProviderComponent } from "./setup/setup-provider.component"; @@ -54,7 +54,7 @@ const routes: Routes = [ { path: ":providerId", component: ProvidersLayoutComponent, - canActivate: [ProviderGuardService], + canActivate: [ProviderGuard], children: [ { path: "", pathMatch: "full", redirectTo: "clients" }, { path: "clients/create", component: CreateOrganizationComponent }, @@ -71,7 +71,7 @@ const routes: Routes = [ { path: "people", component: PeopleComponent, - canActivate: [ProviderTypeGuardService], + canActivate: [PermissionsGuard], data: { titleId: "people", permissions: [Permissions.ManageUsers], @@ -80,7 +80,7 @@ const routes: Routes = [ { path: "events", component: EventsComponent, - canActivate: [ProviderTypeGuardService], + canActivate: [PermissionsGuard], data: { titleId: "eventLogs", permissions: [Permissions.AccessEventLogs], @@ -100,7 +100,7 @@ const routes: Routes = [ { path: "account", component: AccountComponent, - canActivate: [ProviderTypeGuardService], + canActivate: [PermissionsGuard], data: { titleId: "myProvider", permissions: [Permissions.ManageProvider], diff --git a/bitwarden_license/src/app/providers/providers.module.ts b/bitwarden_license/src/app/providers/providers.module.ts index 9f762cf4..7880d78c 100644 --- a/bitwarden_license/src/app/providers/providers.module.ts +++ b/bitwarden_license/src/app/providers/providers.module.ts @@ -10,6 +10,8 @@ import { OssModule } from "src/app/oss.module"; import { AddOrganizationComponent } from "./clients/add-organization.component"; import { ClientsComponent } from "./clients/clients.component"; import { CreateOrganizationComponent } from "./clients/create-organization.component"; +import { PermissionsGuard } from "./guards/provider-type.guard"; +import { ProviderGuard } from "./guards/provider.guard"; import { AcceptProviderComponent } from "./manage/accept-provider.component"; import { BulkConfirmComponent } from "./manage/bulk/bulk-confirm.component"; import { BulkRemoveComponent } from "./manage/bulk/bulk-remove.component"; @@ -19,8 +21,6 @@ import { PeopleComponent } from "./manage/people.component"; import { UserAddEditComponent } from "./manage/user-add-edit.component"; import { ProvidersLayoutComponent } from "./providers-layout.component"; import { ProvidersRoutingModule } from "./providers-routing.module"; -import { ProviderGuardService } from "./services/provider-guard.service"; -import { ProviderTypeGuardService } from "./services/provider-type-guard.service"; import { WebProviderService } from "./services/webProvider.service"; import { AccountComponent } from "./settings/account.component"; import { SettingsComponent } from "./settings/settings.component"; @@ -46,7 +46,7 @@ import { SetupComponent } from "./setup/setup.component"; SetupProviderComponent, UserAddEditComponent, ], - providers: [WebProviderService, ProviderGuardService, ProviderTypeGuardService], + providers: [WebProviderService, ProviderGuard, PermissionsGuard], }) export class ProvidersModule { constructor(modalService: ModalService, componentFactoryResolver: ComponentFactoryResolver) { diff --git a/src/app/layouts/navbar.component.html b/src/app/layouts/navbar.component.html index e3ae3d56..3fb1de31 100644 --- a/src/app/layouts/navbar.component.html +++ b/src/app/layouts/navbar.component.html @@ -27,6 +27,11 @@ +