From 6259613353535674057b219fc54d3b40c6a0f3c3 Mon Sep 17 00:00:00 2001 From: Nathan Figueroa Date: Thu, 29 Aug 2024 14:32:55 -0400 Subject: [PATCH 1/2] feat: Add more discrete roles for cruise/lowering/event access --- src/components/cruise_menu.js | 23 ++++++++++++++++++----- src/standard_user_role_options.js | 6 +++++- 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/src/components/cruise_menu.js b/src/components/cruise_menu.js index 2889b50..247b8ad 100644 --- a/src/components/cruise_menu.js +++ b/src/components/cruise_menu.js @@ -178,6 +178,11 @@ class CruiseMenu extends Component { }); } + isReplayAuthorized() { + const authorizedRoles = ['event_watcher', 'event_manager', 'event_logger', 'cruise_manager', 'template_manager', 'admin']; + return this.props.roles.some(role => authorizedRoles.includes(role)); + } + renderCruiseFiles(files) { let output = files.map((file, index) => { return
this.handleCruiseFileDownload(file)}>{file}
@@ -192,6 +197,14 @@ class CruiseMenu extends Component { return
{output}
; } + renderLoweringReplayButtons() { + return + + + + + } + renderLoweringCard() { if(this.state.activeLowering){ @@ -244,11 +257,11 @@ class CruiseMenu extends Component { {loweringBoundingBox} {loweringFiles}
- - - - - + {this.isReplayAuthorized() ? + this.renderLoweringReplayButtons() : + "Not authorized to replay dive events, contact admin for access." + } + ); diff --git a/src/standard_user_role_options.js b/src/standard_user_role_options.js index 60b5758..146f33a 100644 --- a/src/standard_user_role_options.js +++ b/src/standard_user_role_options.js @@ -3,7 +3,9 @@ export const standardUserRoleOptions = [ { value: 'template_manager', label: 'Template Manager', description: 'Ability to edit event templates.' }, { value: 'event_manager', label: 'Event Manager', description: 'Ability to review events independent of lowerings.' }, { value: 'event_logger', label: 'Event Logger', description: 'Abiltiy to submit new events.' }, - { value: 'event_watcher', label: 'Event Watcher', description: 'Abilty to view events.' } + { value: 'event_watcher', label: 'Event Watcher', description: 'Abilty to view events (includes cruises and lowerings).' }, + { value: 'lowering_watcher', label: 'Event Watcher', description: 'Abilty to view lowerings (includes cruises).' }, + { value: 'cruise_watcher', label: 'Event Watcher', description: 'Abilty to view cruises.' } ]; export const CRUISE_MANAGER = 'cruise_manager'; @@ -11,3 +13,5 @@ export const TEMPLATE_MANAGER = 'template_manager'; export const EVENT_MANAGER = 'event_manager'; export const EVENT_LOGGER = 'event_logger'; export const EVENT_WATCHER = 'event_watcher'; +export const LOWERING_WATCHER = 'lowering_watcher'; +export const CRUISE_WATCHER = 'cruise_watcher'; From d9ca5f7891873b3dc052310a87ce4d46d8c26858 Mon Sep 17 00:00:00 2001 From: Nathan Figueroa Date: Fri, 20 Sep 2024 15:51:33 -0400 Subject: [PATCH 2/2] feat: Add email address to access warning --- src/components/cruise_menu.js | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/components/cruise_menu.js b/src/components/cruise_menu.js index 247b8ad..41e568e 100644 --- a/src/components/cruise_menu.js +++ b/src/components/cruise_menu.js @@ -205,6 +205,18 @@ class CruiseMenu extends Component { } + renderContactAdmin() { + // Require JS to construct email address to reduce spam + const addr1 = 'ndsf'; + const addr2 = '_info@'; + const addr3 = 'whoi.edu'; + const addr = addr1 + addr2 + addr3; + const email_link = {addr}; + return
+

Not authorized to replay dive events, contact admin for access: {email_link}

+
+ } + renderLoweringCard() { if(this.state.activeLowering){ @@ -239,6 +251,8 @@ class CruiseMenu extends Component { let loweringFiles = (this.state.activeLowering.lowering_additional_meta.lowering_files && this.state.activeLowering.lowering_additional_meta.lowering_files.length > 0)?
Files:{this.renderLoweringFiles(this.state.activeLowering.lowering_additional_meta.lowering_files)}
: null; + + return ( {_Lowering_}: {this.state.activeLowering.lowering_id} @@ -257,11 +271,7 @@ class CruiseMenu extends Component { {loweringBoundingBox} {loweringFiles}
- {this.isReplayAuthorized() ? - this.renderLoweringReplayButtons() : - "Not authorized to replay dive events, contact admin for access." - } - + {this.isReplayAuthorized() ? this.renderLoweringReplayButtons() : this.renderContactAdmin()}
);