1
0
mirror of https://github.com/sasjs/server.git synced 2026-01-08 23:10:05 +00:00

feat: add multiple permission for same combination of type and principal at once

This commit is contained in:
2022-08-03 23:26:31 +05:00
parent 78bea7c154
commit 754704bca8
4 changed files with 171 additions and 53 deletions

View File

@@ -32,7 +32,7 @@ const BootstrapDialog = styled(Dialog)(({ theme }) => ({
type AddPermissionModalProps = {
open: boolean
handleOpen: Dispatch<SetStateAction<boolean>>
addPermission: (addPermissionPayload: RegisterPermissionPayload) => void
addPermission: (permissions: RegisterPermissionPayload[]) => void
}
const AddPermissionModal = ({
@@ -42,9 +42,9 @@ const AddPermissionModal = ({
}: AddPermissionModalProps) => {
const [paths, setPaths] = useState<string[]>([])
const [loadingPaths, setLoadingPaths] = useState(false)
const [path, setPath] = useState<string>()
const [selectedPaths, setSelectedPaths] = useState<string[]>([])
const [permissionType, setPermissionType] = useState('Route')
const [principalType, setPrincipalType] = useState('group')
const [principalType, setPrincipalType] = useState('Group')
const [userPrincipal, setUserPrincipal] = useState<UserResponse>()
const [groupPrincipal, setGroupPrincipal] = useState<GroupResponse>()
const [permissionSetting, setPermissionSetting] = useState('Grant')
@@ -72,10 +72,10 @@ const AddPermissionModal = ({
useEffect(() => {
setLoadingPrincipals(true)
axios
.get(`/SASjsApi/${principalType}`)
.get(`/SASjsApi/${principalType.toLowerCase()}`)
.then((res: any) => {
if (res.data) {
if (principalType === 'user') {
if (principalType.toLowerCase() === 'user') {
const users: UserResponse[] = res.data
const nonAdminUsers = users.filter((user) => !user.isAdmin)
setUserPrincipals(nonAdminUsers)
@@ -93,22 +93,29 @@ const AddPermissionModal = ({
}, [principalType])
const handleAddPermission = () => {
const addPermissionPayload: any = {
path,
type: permissionType,
setting: permissionSetting,
principalType
}
if (principalType === 'user' && userPrincipal) {
addPermissionPayload.principalId = userPrincipal.id
} else if (principalType === 'group' && groupPrincipal) {
addPermissionPayload.principalId = groupPrincipal.groupId
}
addPermission(addPermissionPayload)
const permissions: RegisterPermissionPayload[] = []
selectedPaths.forEach((path) => {
const addPermissionPayload: any = {
path,
type: permissionType,
setting: permissionSetting,
principalType: principalType.toLowerCase(),
principalId:
principalType.toLowerCase() === 'user'
? userPrincipal?.id
: groupPrincipal?.groupId
}
permissions.push(addPermissionPayload)
})
addPermission(permissions)
}
const addButtonDisabled =
!path || (principalType === 'user' ? !userPrincipal : !groupPrincipal)
!selectedPaths.length ||
(principalType.toLowerCase() === 'user' ? !userPrincipal : !groupPrincipal)
return (
<BootstrapDialog onClose={() => handleOpen(false)} open={open}>
@@ -122,17 +129,14 @@ const AddPermissionModal = ({
<Grid container spacing={2}>
<Grid item xs={12}>
<Autocomplete
multiple
options={paths}
disableClearable
value={path}
onChange={(event: any, newValue: string) => setPath(newValue)}
renderInput={(params) =>
loadingPaths ? (
<CircularProgress />
) : (
<TextField {...params} autoFocus label="Path" />
)
}
filterSelectedOptions
value={selectedPaths}
onChange={(event: any, newValue: string[]) => {
setSelectedPaths(newValue)
}}
renderInput={(params) => <TextField {...params} label="Paths" />}
/>
</Grid>
<Grid item xs={12}>
@@ -154,8 +158,7 @@ const AddPermissionModal = ({
</Grid>
<Grid item xs={12}>
<Autocomplete
options={['group', 'user']}
getOptionLabel={(option) => option.toUpperCase()}
options={['Group', 'User']}
disableClearable
value={principalType}
onChange={(event: any, newValue: string) =>
@@ -167,7 +170,7 @@ const AddPermissionModal = ({
/>
</Grid>
<Grid item xs={12}>
{principalType === 'user' ? (
{principalType.toLowerCase() === 'user' ? (
<Autocomplete
options={userPrincipals}
getOptionLabel={(option) => option.displayName}