From a20894092b0f331163b0138110afb12f98c9dea9 Mon Sep 17 00:00:00 2001 From: Maycon Santos Date: Fri, 1 Dec 2023 16:57:18 +0100 Subject: [PATCH] Add owner role support (#300) Update checks for admin to include owner role Updated role list to include role for users Updated activity with new event type handler --- src/components/Navbar.tsx | 2 +- src/components/UserEdit.tsx | 33 +++++++++++++++++++++++---------- src/views/Activity.tsx | 14 ++++++++++++++ src/views/Peers.tsx | 2 +- src/views/RegularUsers.tsx | 20 ++++++++++++++------ src/views/Users.tsx | 2 +- 6 files changed, 54 insertions(+), 19 deletions(-) diff --git a/src/components/Navbar.tsx b/src/components/Navbar.tsx index d96bf7bd..2c278630 100644 --- a/src/components/Navbar.tsx +++ b/src/components/Navbar.tsx @@ -161,7 +161,7 @@ const Navbar = () => { return false; } - if (user.role?.toLowerCase() === "admin") { + if (user.role?.toLowerCase() === "admin" || user.role?.toLowerCase() === "owner") { return true; } return !adminOnlyTabs.find((t) => t === key); diff --git a/src/components/UserEdit.tsx b/src/components/UserEdit.tsx index f17f4bb5..3c461ac1 100644 --- a/src/components/UserEdit.tsx +++ b/src/components/UserEdit.tsx @@ -79,6 +79,7 @@ const UserEdit = (props: any) => { const [formUser, setFormUser] = useState({} as FormUser); const [form] = Form.useForm(); const [isAdmin, setIsAdmin] = useState(false); + const [isOwner, setIsOwner] = useState(false); const [confirmModal, confirmModalContextHolder] = Modal.useModal(); @@ -94,15 +95,21 @@ const UserEdit = (props: any) => { }; const createUserToSave = (values: any): UserToSave => { - const autoGroups = - groups - ?.filter((g) => values.autoGroupsNames.includes(g.id)) - .map((g) => g.id || "") || []; + let autoGroups:string[] = [] + if (values.autoGroupsNames) { + autoGroups = + groups + ?.filter((g) => values.autoGroupsNames.includes(g.id)) + .map((g) => g.id || "") || []; + } // find groups that do not yet exist (newly added by the user) const allGroupsNames: string[] = groups?.map((g) => g.id || ""); - const groupsToCreate = values.autoGroupsNames.filter( - (s: string) => !allGroupsNames.includes(s) - ); + let groupsToCreate:string[] = [] + if (values.autoGroupsNames) { + groupsToCreate = values.autoGroupsNames.filter( + (s: string) => !allGroupsNames.includes(s) + ); + } let userID = user ? user.id : ""; let isServiceUser = user ? user?.is_service_user : false; return { @@ -120,7 +127,8 @@ const UserEdit = (props: any) => { if (users) { let currentUser = users.find((user) => user?.is_current); if (currentUser) { - setIsAdmin(currentUser.role === "admin"); + setIsAdmin(currentUser.role === "admin" || currentUser.role === "owner"); + setIsOwner(currentUser.role === "owner"); } } }, [users]); @@ -403,7 +411,7 @@ const UserEdit = (props: any) => { > @@ -473,7 +486,7 @@ const UserEdit = (props: any) => { label="Block user" style={{ marginRight: "50px", fontWeight: "500" }} > - + )} diff --git a/src/views/Activity.tsx b/src/views/Activity.tsx index 1ee49544..3fc8af6d 100644 --- a/src/views/Activity.tsx +++ b/src/views/Activity.tsx @@ -362,6 +362,20 @@ export const Activity = () => { ); } return "-"; + case "transferred.owner.role": + if (event.meta.email || event.meta.username || event.target_id) { + return renderMultiRowSpan( + event.meta.username ? event.meta.username : event.target_id, + event.meta.email ? event.meta.email : "User" + ); + } + if (event.meta.user_name) { + return renderMultiRowSpan( + event.meta.user_name, + event.meta.is_service_user ? "Service User" : "User" + ); + } + return "-"; case "setupkey.group.add": case "setupkey.group.delete": return renderMultiRowSpan(event.meta.setupkey, "Setup Key"); diff --git a/src/views/Peers.tsx b/src/views/Peers.tsx index 7225929d..b6ca5980 100644 --- a/src/views/Peers.tsx +++ b/src/views/Peers.tsx @@ -126,7 +126,7 @@ export const Peers = () => { if (users) { let currentUser = users.find((user) => user.is_current); if (currentUser) { - setIsAdmin(currentUser.role === "admin"); + setIsAdmin(currentUser.role === "admin" || currentUser.role === "owner"); } } }, [users]); diff --git a/src/views/RegularUsers.tsx b/src/views/RegularUsers.tsx index ff8a2db5..f511fba3 100644 --- a/src/views/RegularUsers.tsx +++ b/src/views/RegularUsers.tsx @@ -262,7 +262,7 @@ export const RegularUsers = () => { if (users) { let currentUser = users.find((user) => user.is_current); if (currentUser) { - setIsAdmin(currentUser.role === "admin"); + setIsAdmin(currentUser.role === "admin" || currentUser.role === "owner"); } } }, [users]); @@ -758,16 +758,20 @@ export const RegularUsers = () => { { handleBlockUser(active, record); }} /> ); - if (record.is_current) { + if (record.is_current || record.role === "owner") { + let title = "You can't block or unblock yourself" + if(record.role === "owner") { + title = "You can't block or unblock owners" + } return ( - + { ); - if (record.is_current) { + if (record.is_current || record.role === "owner") { + let title = "You can't delete yourself" + if(record.role === "owner") { + title = "You can't delete owners" + } return ( - + { if(users) { let currentUser = users.find((user) => user.is_current) if(currentUser) { - setIsAdmin(currentUser.role === 'admin'); + setIsAdmin(currentUser.role === 'admin' || currentUser.role === 'owner'); } } }, [users])