Step 1
@@ -111,39 +193,66 @@ const GDAPInviteWizard = () => {
-
- CIPP will create a single relationship with all roles you've selected for the maximum
- duration of 730 days using a GUID as a random name for the relationship.
-
It is recommend to put CIPP user in the correct GDAP Role Groups to manage your
- environment secure after deployment of GDAP.
-
-
-
-
+
+
+
+
+ CIPP will create 12 new groups in your Azure AD environment if they do not exist,
+ and add the CIPP user to these 12 groups. The CIPP user will be added to the
+ following groups:
+
+
+ - M365 GDAP Application Administrator
+ - M365 GDAP Authentication Policy Administrator
+ - M365 GDAP Cloud App Security Administrator
+ - M365 GDAP Cloud Device Administrator
+ - M365 GDAP Exchange Administrator
+ - M365 GDAP Intune Administrator
+ - M365 GDAP Privileged Authentication Administrator
+ - M365 GDAP Privileged Role Administrator
+ - M365 GDAP Security Administrator
+ - M365 GDAP SharePoint Administrator
+ - M365 GDAP Teams Administrator
+ - M365 GDAP User Administrator
+
+ Any other user that needs to gain access to your Microsoft CSP Tenants will need to be
+ manually added to these groups.
+
+
+
+
+ CIPP will create a single relationship with all roles you've selected for the maximum
+ duration of 730 days using a GUID as a random name for the relationship.
+
+
+
+
+
-
- {(props) => (
- row['RoleName'],
- sortable: true,
- exportselector: 'Name',
- },
- {
- name: 'Group',
- selector: (row) => row['GroupName'],
- sortable: true,
- },
- ]}
- fieldProps={props}
- />
- )}
-
+
+ {(props) => (
+ row['RoleName'],
+ sortable: true,
+ exportselector: 'Name',
+ },
+ {
+ name: 'Group',
+ selector: (row) => row['GroupName'],
+ sortable: true,
+ },
+ ]}
+ fieldProps={props}
+ />
+ )}
+
+
@@ -190,25 +299,57 @@ const GDAPInviteWizard = () => {
- Roles and group names
- {props.values.gdapRoles.map((role, idx) => (
+ {props.values.easyMode === false && (
+ <>
+ Roles and group names
+ {props.values.gdapRoles.map((role, idx) => (
+
+ {role.RoleName === 'Company Administrator' && (
+
+ WARNING: The Company Administrator role will prevent GDAP
+ relationships from automatically extending. We recommend against
+ using this in any GDAP relationship.
+
+ )}
+
+ ))}
+
+
+ {props.values.gdapRoles.map((role, idx) => (
+ -
+ {role.RoleName} - {role.GroupName}
+
+ ))}
+
+
+ >
+ )}
+ {props.values.easyMode === true && (
<>
- {role.RoleName === 'Company Administrator' && (
-
- WARNING: The Company Administrator role will prevent GDAP
- relationships from automatically extending. We recommend against using
- this in any GDAP relationship.
-
- )}
+
+
+ You have selected CIPP to manage your roles and groups. Invites will
+ contain the following roles and groups
+
+
+ - M365 GDAP Application Administrator
+ - M365 GDAP Authentication Policy Administrator
+ - M365 GDAP Cloud App Security Administrator
+ - M365 GDAP Cloud Device Administrator
+ - M365 GDAP Exchange Administrator
+ - M365 GDAP Intune Administrator
+ - M365 GDAP Privileged Authentication Administrator
+ - M365 GDAP Privileged Role Administrator
+ - M365 GDAP Security Administrator
+ - M365 GDAP SharePoint Administrator
+ - M365 GDAP Teams Administrator
+ - M365 GDAP User Administrator
+
+
>
- ))}
-
- {props.values.gdapRoles.map((role, idx) => (
-
- {role.RoleName} - {role.GroupName}
-
- ))}
-
+ )}
+ {easyModeProgress && {easyModeProgress}}
+ {getResults.isFetching && }
>
@@ -218,6 +359,14 @@ const GDAPInviteWizard = () => {
)}
{(massResults.length >= 1 || loopRunning) && (
<>
+
+
+ The invites have been generated. You can view the results below. The
+ invite link is to be used by a Global Administrator
+ of your clients Tenant. Theonboardinglink is to be
+ used by a CIPP administrator to finish the process inside of CIPP.
+
+
{loopRunning ? (
diff --git a/src/views/tenant/conditional/DeployVacation.jsx b/src/views/tenant/conditional/DeployVacation.jsx
index 572aee8bb83d..6f43e2ddda30 100644
--- a/src/views/tenant/conditional/DeployVacation.jsx
+++ b/src/views/tenant/conditional/DeployVacation.jsx
@@ -50,7 +50,17 @@ const ListClassicAlerts = () => {
data: users = [],
isFetching: usersIsFetching,
error: usersError,
- } = useListUsersQuery({ tenantDomain })
+ } = useGenericGetRequestQuery({
+ path: '/api/ListGraphRequest',
+ params: {
+ TenantFilter: tenantDomain,
+ Endpoint: 'users',
+ $select: 'id,displayName,userPrincipalName,accountEnabled',
+ $count: true,
+ $top: 999,
+ $orderby: 'displayName',
+ },
+ })
const {
data: caPolicies = [],
@@ -90,12 +100,13 @@ const ListClassicAlerts = () => {
({
+ values={users?.Results?.map((user) => ({
value: user.id,
name: `${user.displayName} <${user.userPrincipalName}>`,
}))}
placeholder={!usersIsFetching ? 'Select user' : 'Loading...'}
name="UserId"
+ isLoading={usersIsFetching}
/>
@@ -109,6 +120,7 @@ const ListClassicAlerts = () => {
}))}
placeholder={!caIsFetching ? 'Select policy' : 'Loading...'}
name="PolicyId"
+ isLoading={caIsFetching}
/>
diff --git a/src/views/tenant/standards/BPAReportBuilder.jsx b/src/views/tenant/standards/BPAReportBuilder.jsx
index 584958f9ec40..eabe4d1bdc63 100644
--- a/src/views/tenant/standards/BPAReportBuilder.jsx
+++ b/src/views/tenant/standards/BPAReportBuilder.jsx
@@ -157,6 +157,12 @@ const BPAReportBuilder = () => {
newBPATemplate({ path: '/api/AddBPATemplate', values: data })
}
+ const handleDelete = async (event) => {
+ event.preventDefault()
+ const data = formData.name
+ newBPATemplate({ path: `/api/RemoveBPATemplate?TemplateName=${data}` })
+ }
+
const options = {
wordWrap: true,
}
@@ -228,17 +234,21 @@ const BPAReportBuilder = () => {
-
-
-
+
+
+
Publish
-
-
+
+ handleDelete(e)}>
+
+ Delete
+
+
{newTemplateResult.isFetching && }
{newTemplateResult.isSuccess && (
diff --git a/src/views/tenant/standards/BestPracticeAnalyser.jsx b/src/views/tenant/standards/BestPracticeAnalyser.jsx
index 801cd1eb6838..a0e1cb00b101 100644
--- a/src/views/tenant/standards/BestPracticeAnalyser.jsx
+++ b/src/views/tenant/standards/BestPracticeAnalyser.jsx
@@ -179,9 +179,12 @@ const BestPracticeAnalyser = () => {
if (graphrequest.data.length === 0) {
graphrequest.data = [{ data: 'No Data Found' }]
}
- const flatObj = graphrequest.data.Columns ? graphrequest.data.Columns : []
+ const flatObj = graphrequest.data.Columns.length >= 0 ? graphrequest.data.Columns : []
flatObj.map((col) => {
+ if (col === null) {
+ return
+ }
// Determine the cell selector based on the 'formatter' property
let cellSelector
if (col.formatter) {
diff --git a/src/views/tenant/standards/ListAppliedStandards.jsx b/src/views/tenant/standards/ListAppliedStandards.jsx
index 6548ebb25848..f60370975ee6 100644
--- a/src/views/tenant/standards/ListAppliedStandards.jsx
+++ b/src/views/tenant/standards/ListAppliedStandards.jsx
@@ -548,7 +548,7 @@ const ApplyNewStandard = () => {
/>
- Optional Input
+ Settings
@@ -647,7 +647,7 @@ const ApplyNewStandard = () => {
/>
- Optional Input
+ Settings
{obj.addedComponent &&
obj.addedComponent.map((component) => (
<>
@@ -768,7 +768,7 @@ const ApplyNewStandard = () => {
- Optional Input
+ Settings
{template.templates.isSuccess && (
{
- Optional Input
+ Settings
{
- Optional Input
+ Settings