Skip to content

Commit a208940

Browse files
authored
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
1 parent f4d6ce5 commit a208940

File tree

6 files changed

+54
-19
lines changed

6 files changed

+54
-19
lines changed

src/components/Navbar.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@ const Navbar = () => {
161161
return false;
162162
}
163163

164-
if (user.role?.toLowerCase() === "admin") {
164+
if (user.role?.toLowerCase() === "admin" || user.role?.toLowerCase() === "owner") {
165165
return true;
166166
}
167167
return !adminOnlyTabs.find((t) => t === key);

src/components/UserEdit.tsx

Lines changed: 23 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ const UserEdit = (props: any) => {
7979
const [formUser, setFormUser] = useState({} as FormUser);
8080
const [form] = Form.useForm();
8181
const [isAdmin, setIsAdmin] = useState(false);
82+
const [isOwner, setIsOwner] = useState(false);
8283

8384
const [confirmModal, confirmModalContextHolder] = Modal.useModal();
8485

@@ -94,15 +95,21 @@ const UserEdit = (props: any) => {
9495
};
9596

9697
const createUserToSave = (values: any): UserToSave => {
97-
const autoGroups =
98-
groups
99-
?.filter((g) => values.autoGroupsNames.includes(g.id))
100-
.map((g) => g.id || "") || [];
98+
let autoGroups:string[] = []
99+
if (values.autoGroupsNames) {
100+
autoGroups =
101+
groups
102+
?.filter((g) => values.autoGroupsNames.includes(g.id))
103+
.map((g) => g.id || "") || [];
104+
}
101105
// find groups that do not yet exist (newly added by the user)
102106
const allGroupsNames: string[] = groups?.map((g) => g.id || "");
103-
const groupsToCreate = values.autoGroupsNames.filter(
104-
(s: string) => !allGroupsNames.includes(s)
105-
);
107+
let groupsToCreate:string[] = []
108+
if (values.autoGroupsNames) {
109+
groupsToCreate = values.autoGroupsNames.filter(
110+
(s: string) => !allGroupsNames.includes(s)
111+
);
112+
}
106113
let userID = user ? user.id : "";
107114
let isServiceUser = user ? user?.is_service_user : false;
108115
return {
@@ -120,7 +127,8 @@ const UserEdit = (props: any) => {
120127
if (users) {
121128
let currentUser = users.find((user) => user?.is_current);
122129
if (currentUser) {
123-
setIsAdmin(currentUser.role === "admin");
130+
setIsAdmin(currentUser.role === "admin" || currentUser.role === "owner");
131+
setIsOwner(currentUser.role === "owner");
124132
}
125133
}
126134
}, [users]);
@@ -403,14 +411,19 @@ const UserEdit = (props: any) => {
403411
>
404412
<Select
405413
style={{ width: "100%" }}
406-
disabled={user?.is_current}
414+
disabled={user?.is_current || user?.role === "owner"}
407415
>
408416
<Option value="admin">
409417
<Text type={"secondary"}>admin</Text>
410418
</Option>
411419
<Option value="user">
412420
<Text type={"secondary"}>user</Text>
413421
</Option>
422+
{!user?.is_service_user && isOwner && (
423+
<Option value="owner">
424+
<Text type={"secondary"}>owner</Text>
425+
</Option>
426+
)}
414427
</Select>
415428
</Form.Item>
416429
</Col>
@@ -473,7 +486,7 @@ const UserEdit = (props: any) => {
473486
label="Block user"
474487
style={{ marginRight: "50px", fontWeight: "500" }}
475488
>
476-
<Switch />
489+
<Switch disabled={user?.role == "owner"} />
477490
</Form.Item>
478491
</Col>
479492
)}

src/views/Activity.tsx

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -362,6 +362,20 @@ export const Activity = () => {
362362
);
363363
}
364364
return "-";
365+
case "transferred.owner.role":
366+
if (event.meta.email || event.meta.username || event.target_id) {
367+
return renderMultiRowSpan(
368+
event.meta.username ? event.meta.username : event.target_id,
369+
event.meta.email ? event.meta.email : "User"
370+
);
371+
}
372+
if (event.meta.user_name) {
373+
return renderMultiRowSpan(
374+
event.meta.user_name,
375+
event.meta.is_service_user ? "Service User" : "User"
376+
);
377+
}
378+
return "-";
365379
case "setupkey.group.add":
366380
case "setupkey.group.delete":
367381
return renderMultiRowSpan(event.meta.setupkey, "Setup Key");

src/views/Peers.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ export const Peers = () => {
126126
if (users) {
127127
let currentUser = users.find((user) => user.is_current);
128128
if (currentUser) {
129-
setIsAdmin(currentUser.role === "admin");
129+
setIsAdmin(currentUser.role === "admin" || currentUser.role === "owner");
130130
}
131131
}
132132
}, [users]);

src/views/RegularUsers.tsx

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -262,7 +262,7 @@ export const RegularUsers = () => {
262262
if (users) {
263263
let currentUser = users.find((user) => user.is_current);
264264
if (currentUser) {
265-
setIsAdmin(currentUser.role === "admin");
265+
setIsAdmin(currentUser.role === "admin" || currentUser.role === "owner");
266266
}
267267
}
268268
}, [users]);
@@ -758,16 +758,20 @@ export const RegularUsers = () => {
758758
<Switch
759759
size={"small"}
760760
checked={e}
761-
disabled={record.is_current}
761+
disabled={record.is_current || record.role === "owner"}
762762
onClick={(active: boolean) => {
763763
handleBlockUser(active, record);
764764
}}
765765
/>
766766
);
767767

768-
if (record.is_current) {
768+
if (record.is_current || record.role === "owner") {
769+
let title = "You can't block or unblock yourself"
770+
if(record.role === "owner") {
771+
title = "You can't block or unblock owners"
772+
}
769773
return (
770-
<Tooltip title="You can't block or unblock yourself">
774+
<Tooltip title={title}>
771775
<Empty
772776
image={""}
773777
description={""}
@@ -803,9 +807,13 @@ export const RegularUsers = () => {
803807
</Button>
804808
);
805809

806-
if (record.is_current) {
810+
if (record.is_current || record.role === "owner") {
811+
let title = "You can't delete yourself"
812+
if(record.role === "owner") {
813+
title = "You can't delete owners"
814+
}
807815
return (
808-
<Tooltip title="You can't delete yourself">
816+
<Tooltip title={title}>
809817
<Empty
810818
image={""}
811819
description={""}

src/views/Users.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ export const Users = () => {
5252
if(users) {
5353
let currentUser = users.find((user) => user.is_current)
5454
if(currentUser) {
55-
setIsAdmin(currentUser.role === 'admin');
55+
setIsAdmin(currentUser.role === 'admin' || currentUser.role === 'owner');
5656
}
5757
}
5858
}, [users])

0 commit comments

Comments
 (0)