1
0
mirror of https://github.com/sasjs/server.git synced 2026-01-15 09:50:06 +00:00

chore: add filter based on principal type

This commit is contained in:
2022-06-24 16:28:41 +05:00
parent 54d4bf835d
commit 9cb9e2dd33
2 changed files with 52 additions and 5 deletions

View File

@@ -38,7 +38,7 @@ const BootstrapTableCell = styled(TableCell)({
textAlign: 'left' textAlign: 'left'
}) })
enum PrincipalType { export enum PrincipalType {
User = 'User', User = 'User',
Group = 'Group' Group = 'Group'
} }
@@ -58,6 +58,9 @@ const Permission = () => {
const [filterModalOpen, setFilterModalOpen] = useState(false) const [filterModalOpen, setFilterModalOpen] = useState(false)
const [uriFilter, setUriFilter] = useState<string[]>([]) const [uriFilter, setUriFilter] = useState<string[]>([])
const [principalFilter, setPrincipalFilter] = useState<string[]>([]) const [principalFilter, setPrincipalFilter] = useState<string[]>([])
const [principalTypeFilter, setPrincipalTypeFilter] = useState<
PrincipalType[]
>([])
const [settingFilter, setSettingFilter] = useState<string[]>([]) const [settingFilter, setSettingFilter] = useState<string[]>([])
const [permissions, setPermissions] = useState<PermissionResponse[]>([]) const [permissions, setPermissions] = useState<PermissionResponse[]>([])
const [filteredPermissions, setFilteredPermissions] = useState< const [filteredPermissions, setFilteredPermissions] = useState<
@@ -93,17 +96,33 @@ const Permission = () => {
uriFilter.length > 0 uriFilter.length > 0
? permissions.filter((permission) => uriFilter.includes(permission.uri)) ? permissions.filter((permission) => uriFilter.includes(permission.uri))
: permissions : permissions
const principalFilteredPermissions = const principalFilteredPermissions =
principalFilter.length > 0 principalFilter.length > 0
? permissions.filter((permission) => { ? permissions.filter((permission) => {
if (permission.user) { if (permission.user) {
return principalFilter.includes(permission.user.displayName) return principalFilter.includes(permission.user.username)
} else if (permission.group) { }
if (permission.group) {
return principalFilter.includes(permission.group.name) return principalFilter.includes(permission.group.name)
} }
return false return false
}) })
: permissions : permissions
const principalTypeFilteredPermissions =
principalTypeFilter.length > 0
? permissions.filter((permission) => {
if (permission.user) {
return principalTypeFilter.includes(PrincipalType.User)
}
if (permission.group) {
return principalTypeFilter.includes(PrincipalType.Group)
}
return false
})
: permissions
const settingFilteredPermissions = const settingFilteredPermissions =
settingFilter.length > 0 settingFilter.length > 0
? permissions.filter((permission) => ? permissions.filter((permission) =>
@@ -117,6 +136,12 @@ const Permission = () => {
) )
) )
filteredArray = filteredArray.filter((permission) =>
principalTypeFilteredPermissions.some(
(item) => item.permissionId === permission.permissionId
)
)
filteredArray = filteredArray.filter((permission) => filteredArray = filteredArray.filter((permission) =>
settingFilteredPermissions.some( settingFilteredPermissions.some(
(item) => item.permissionId === permission.permissionId (item) => item.permissionId === permission.permissionId
@@ -261,6 +286,8 @@ const Permission = () => {
setUriFilter={setUriFilter} setUriFilter={setUriFilter}
principalFilter={principalFilter} principalFilter={principalFilter}
setPrincipalFilter={setPrincipalFilter} setPrincipalFilter={setPrincipalFilter}
principalTypeFilter={principalTypeFilter}
setPrincipalTypeFilter={setPrincipalTypeFilter}
settingFilter={settingFilter} settingFilter={settingFilter}
setSettingFilter={setSettingFilter} setSettingFilter={setSettingFilter}
applyFilter={applyFilter} applyFilter={applyFilter}
@@ -355,7 +382,7 @@ const PermissionTable = ({
} }
const displayPrincipal = (permission: PermissionResponse) => { const displayPrincipal = (permission: PermissionResponse) => {
if (permission.user) return permission.user?.displayName if (permission.user) return permission.user?.username
if (permission.group) return permission.group?.name if (permission.group) return permission.group?.name
} }

View File

@@ -12,6 +12,8 @@ import Autocomplete from '@mui/material/Autocomplete'
import { PermissionResponse } from '../../utils/types' import { PermissionResponse } from '../../utils/types'
import { BootstrapDialogTitle } from '../../components/dialogTitle' import { BootstrapDialogTitle } from '../../components/dialogTitle'
import { PrincipalType } from './permission'
const BootstrapDialog = styled(Dialog)(({ theme }) => ({ const BootstrapDialog = styled(Dialog)(({ theme }) => ({
'& .MuiDialogContent-root': { '& .MuiDialogContent-root': {
padding: theme.spacing(2) padding: theme.spacing(2)
@@ -29,6 +31,8 @@ type FilterModalProps = {
setUriFilter: Dispatch<SetStateAction<string[]>> setUriFilter: Dispatch<SetStateAction<string[]>>
principalFilter: string[] principalFilter: string[]
setPrincipalFilter: Dispatch<SetStateAction<string[]>> setPrincipalFilter: Dispatch<SetStateAction<string[]>>
principalTypeFilter: PrincipalType[]
setPrincipalTypeFilter: Dispatch<SetStateAction<PrincipalType[]>>
settingFilter: string[] settingFilter: string[]
setSettingFilter: Dispatch<SetStateAction<string[]>> setSettingFilter: Dispatch<SetStateAction<string[]>>
applyFilter: () => void applyFilter: () => void
@@ -43,6 +47,8 @@ const PermissionFilterModal = ({
setUriFilter, setUriFilter,
principalFilter, principalFilter,
setPrincipalFilter, setPrincipalFilter,
principalTypeFilter,
setPrincipalTypeFilter,
settingFilter, settingFilter,
setSettingFilter, setSettingFilter,
applyFilter, applyFilter,
@@ -54,7 +60,7 @@ const PermissionFilterModal = ({
// fetch all the principals from permissions array // fetch all the principals from permissions array
let principals = permissions.map((permission) => { let principals = permissions.map((permission) => {
if (permission.user) return permission.user.displayName if (permission.user) return permission.user.username
if (permission.group) return permission.group.name if (permission.group) return permission.group.name
return '' return ''
}) })
@@ -103,6 +109,20 @@ const PermissionFilterModal = ({
)} )}
/> />
</Grid> </Grid>
<Grid item xs={12}>
<Autocomplete
multiple
options={Object.values(PrincipalType)}
filterSelectedOptions
value={principalTypeFilter}
onChange={(event: any, newValue: PrincipalType[]) => {
setPrincipalTypeFilter(newValue)
}}
renderInput={(params) => (
<TextField {...params} label="Principal Type" />
)}
/>
</Grid>
<Grid item xs={12}> <Grid item xs={12}>
<Autocomplete <Autocomplete
multiple multiple