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

fix: update schema of Permission

This commit is contained in:
2022-08-01 21:33:10 +05:00
parent b7dff341f0
commit 5d5a9d3788
14 changed files with 488 additions and 366 deletions

View File

@@ -40,10 +40,11 @@ const AddPermissionModal = ({
handleOpen,
addPermission
}: AddPermissionModalProps) => {
const [URIs, setURIs] = useState<string[]>([])
const [loadingURIs, setLoadingURIs] = useState(false)
const [uri, setUri] = useState<string>()
const [principalType, setPrincipalType] = useState('user')
const [paths, setPaths] = useState<string[]>([])
const [loadingPaths, setLoadingPaths] = useState(false)
const [path, setPath] = useState<string>()
const [permissionType, setPermissionType] = useState('Route')
const [principalType, setPrincipalType] = useState('group')
const [userPrincipal, setUserPrincipal] = useState<UserResponse>()
const [groupPrincipal, setGroupPrincipal] = useState<GroupResponse>()
const [permissionSetting, setPermissionSetting] = useState('Grant')
@@ -52,19 +53,19 @@ const AddPermissionModal = ({
const [groupPrincipals, setGroupPrincipals] = useState<GroupResponse[]>([])
useEffect(() => {
setLoadingURIs(true)
setLoadingPaths(true)
axios
.get('/SASjsApi/info/authorizedRoutes')
.then((res: any) => {
if (res.data) {
setURIs(res.data.URIs)
setPaths(res.data.paths)
}
})
.catch((err) => {
console.log(err)
})
.finally(() => {
setLoadingURIs(false)
setLoadingPaths(false)
})
}, [])
@@ -93,7 +94,8 @@ const AddPermissionModal = ({
const handleAddPermission = () => {
const addPermissionPayload: any = {
uri,
path,
type: permissionType,
setting: permissionSetting,
principalType
}
@@ -106,7 +108,7 @@ const AddPermissionModal = ({
}
const addButtonDisabled =
!uri || (principalType === 'user' ? !userPrincipal : !groupPrincipal)
!path || (principalType === 'user' ? !userPrincipal : !groupPrincipal)
return (
<BootstrapDialog onClose={() => handleOpen(false)} open={open}>
@@ -120,22 +122,40 @@ const AddPermissionModal = ({
<Grid container spacing={2}>
<Grid item xs={12}>
<Autocomplete
options={URIs}
options={paths}
disableClearable
value={uri}
onChange={(event: any, newValue: string) => setUri(newValue)}
value={path}
onChange={(event: any, newValue: string) => setPath(newValue)}
renderInput={(params) =>
loadingURIs ? (
loadingPaths ? (
<CircularProgress />
) : (
<TextField {...params} label="Principal" />
<TextField {...params} autoFocus label="URI" />
)
}
/>
</Grid>
<Grid item xs={12}>
<Autocomplete
options={['user', 'group']}
options={['Route']}
disableClearable
value={permissionType}
onChange={(event: any, newValue: string) =>
setPermissionType(newValue)
}
renderInput={(params) =>
loadingPaths ? (
<CircularProgress />
) : (
<TextField {...params} label="Permission Type" />
)
}
/>
</Grid>
<Grid item xs={12}>
<Autocomplete
options={['group', 'user']}
getOptionLabel={(option) => option.toUpperCase()}
disableClearable
value={principalType}
onChange={(event: any, newValue: string) =>

View File

@@ -68,7 +68,7 @@ const Permission = () => {
const [selectedPermission, setSelectedPermission] =
useState<PermissionResponse>()
const [filterModalOpen, setFilterModalOpen] = useState(false)
const [uriFilter, setUriFilter] = useState<string[]>([])
const [pathFilter, setPathFilter] = useState<string[]>([])
const [principalFilter, setPrincipalFilter] = useState<string[]>([])
const [principalTypeFilter, setPrincipalTypeFilter] = useState<
PrincipalType[]
@@ -111,8 +111,10 @@ const Permission = () => {
setFilterModalOpen(false)
const uriFilteredPermissions =
uriFilter.length > 0
? permissions.filter((permission) => uriFilter.includes(permission.uri))
pathFilter.length > 0
? permissions.filter((permission) =>
pathFilter.includes(permission.path)
)
: permissions
const principalFilteredPermissions =
@@ -172,7 +174,7 @@ const Permission = () => {
const resetFilter = () => {
setFilterModalOpen(false)
setUriFilter([])
setPathFilter([])
setPrincipalFilter([])
setSettingFilter([])
setFilteredPermissions([])
@@ -322,8 +324,8 @@ const Permission = () => {
open={filterModalOpen}
handleOpen={setFilterModalOpen}
permissions={permissions}
uriFilter={uriFilter}
setUriFilter={setUriFilter}
pathFilter={pathFilter}
setPathFilter={setPathFilter}
principalFilter={principalFilter}
setPrincipalFilter={setPrincipalFilter}
principalTypeFilter={principalTypeFilter}
@@ -374,9 +376,10 @@ const PermissionTable = ({
<Table sx={{ minWidth: 650 }}>
<TableHead sx={{ background: 'rgb(0,0,0, 0.3)' }}>
<TableRow>
<BootstrapTableCell>Uri</BootstrapTableCell>
<BootstrapTableCell>Path</BootstrapTableCell>
<BootstrapTableCell>Permission Type</BootstrapTableCell>
<BootstrapTableCell>Principal</BootstrapTableCell>
<BootstrapTableCell>Type</BootstrapTableCell>
<BootstrapTableCell>Principal Type</BootstrapTableCell>
<BootstrapTableCell>Setting</BootstrapTableCell>
{appContext.isAdmin && (
<BootstrapTableCell>Action</BootstrapTableCell>
@@ -386,7 +389,8 @@ const PermissionTable = ({
<TableBody>
{permissions.map((permission) => (
<TableRow key={permission.permissionId}>
<BootstrapTableCell>{permission.uri}</BootstrapTableCell>
<BootstrapTableCell>{permission.path}</BootstrapTableCell>
<BootstrapTableCell>{permission.type}</BootstrapTableCell>
<BootstrapTableCell>
{displayPrincipal(permission)}
</BootstrapTableCell>

View File

@@ -27,8 +27,8 @@ type FilterModalProps = {
open: boolean
handleOpen: Dispatch<SetStateAction<boolean>>
permissions: PermissionResponse[]
uriFilter: string[]
setUriFilter: Dispatch<SetStateAction<string[]>>
pathFilter: string[]
setPathFilter: Dispatch<SetStateAction<string[]>>
principalFilter: string[]
setPrincipalFilter: Dispatch<SetStateAction<string[]>>
principalTypeFilter: PrincipalType[]
@@ -43,8 +43,8 @@ const PermissionFilterModal = ({
open,
handleOpen,
permissions,
uriFilter,
setUriFilter,
pathFilter,
setPathFilter,
principalFilter,
setPrincipalFilter,
principalTypeFilter,
@@ -54,8 +54,8 @@ const PermissionFilterModal = ({
applyFilter,
resetFilter
}: FilterModalProps) => {
const URIs = permissions
.map((permission) => permission.uri)
const paths = permissions
.map((permission) => permission.path)
.filter((uri, index, array) => array.indexOf(uri) === index)
// fetch all the principals from permissions array
@@ -86,11 +86,11 @@ const PermissionFilterModal = ({
<Grid item xs={12}>
<Autocomplete
multiple
options={URIs}
options={paths}
filterSelectedOptions
value={uriFilter}
value={pathFilter}
onChange={(event: any, newValue: string[]) => {
setUriFilter(newValue)
setPathFilter(newValue)
}}
renderInput={(params) => <TextField {...params} label="URIs" />}
/>

View File

@@ -18,14 +18,16 @@ export interface GroupDetailsResponse extends GroupResponse {
export interface PermissionResponse {
permissionId: number
uri: string
path: string
type: string
setting: string
user?: UserResponse
group?: GroupDetailsResponse
}
export interface RegisterPermissionPayload {
uri: string
path: string
type: string
setting: string
principalType: string
principalId: number