diff --git a/src/reports/permissions.ts b/src/reports/permissions.ts index af402a9..1ab05fa 100644 --- a/src/reports/permissions.ts +++ b/src/reports/permissions.ts @@ -3,6 +3,7 @@ import { Components, ContextInfo, Helper, SPTypes, Types, Web } from "gd-sprest- import { DataSource } from "../ds"; import { IM365Result, M365Groups } from "../m365Groups"; import { ExportCSV } from "./exportCSV"; +import { ViewPermissions } from "./viewPermissions"; interface IPermissionItem { EEEU?: boolean; @@ -18,6 +19,7 @@ interface IPermissionItem { IsLimitedAccess: boolean; LoginName: string; Name: string; + Overshared?: boolean; Roles?: string[]; RoleInfo?: string[]; SiteMembers?: Types.SP.User[]; @@ -214,6 +216,7 @@ export class Permissions { IsLimitedAccess: false, LoginName: role.Member.LoginName, Name: role.Member.Title, + Overshared: false, Roles: [], RoleInfo: [], SiteMembers: [], @@ -234,6 +237,7 @@ export class Permissions { IsLimitedAccess: false, LoginName: role.Member.LoginName, Name: role.Member.Title, + Overshared: ViewPermissions.isOvershared([role], true), Roles: [], RoleInfo: [], SiteMembers: role.Member["Users"] ? role.Member["Users"].results : [], @@ -255,6 +259,7 @@ export class Permissions { IsLimitedAccess: false, LoginName: role.Member.LoginName, Name: role.Member.Title, + Overshared: ViewPermissions.isOvershared([role], true), Roles: [], RoleInfo: [], SiteMembers: role.Member["Users"] ? role.Member["Users"].results : [], @@ -460,13 +465,13 @@ export class Permissions { // See if we are currently hiding limited access items if (btn.textContent == "Show Limited Access") { // Remove the filter - this._dashboard.filter(3); + this._dashboard.filter(4); // Update the button text btn.innerHTML = "Hide Limited Access"; } else { // Apply the filter - this._dashboard.filter(3, "false"); + this._dashboard.filter(4, "false"); // Update the button text btn.innerHTML = "Show Limited Access"; @@ -507,14 +512,14 @@ export class Permissions { onRendering: dtProps => { // Remove the order/sort option for the action column dtProps.columnDefs.push({ - "targets": 9, + "targets": 10, "orderable": false, "searchable": false }); // Hide the limited access column dtProps.columnDefs.push({ - "targets": 3, + "targets": 4, "visible": false }); @@ -545,6 +550,10 @@ export class Permissions { name: "EEEU", title: "Has
EEEU?" }, + { + name: "Overshared", + title: "Contains
Overshared Group?" + }, { name: "IsLimitedAccess", title: "Is
Limited Access?" @@ -644,7 +653,7 @@ export class Permissions { let tooltips: Components.ITooltipProps[] = [{ content: "Click to view the group/user information in another tab.", btnProps: { - text: item.Name, + text: "View " + (item.Type == "User" ? "User" : "Group"), type: Components.ButtonTypes.OutlinePrimary, onClick: () => { let url: string = null; @@ -707,7 +716,7 @@ export class Permissions { this._elSubNav.innerHTML = `
`; // Hide the limited access items by default - this._dashboard.filter(3, "false"); + this._dashboard.filter(4, "false"); } // Runs the report diff --git a/src/reports/viewPermissions.ts b/src/reports/viewPermissions.ts index f852f23..92ff11f 100644 --- a/src/reports/viewPermissions.ts +++ b/src/reports/viewPermissions.ts @@ -62,7 +62,7 @@ export class ViewPermissions { } // Determines if a file is overshared - static isOvershared(roles: Types.SP.RoleAssignmentOData[]): boolean { + static isOvershared(roles: Types.SP.RoleAssignmentOData[], checkGroupOnly: boolean = false): boolean { let isOvershared = false; // Check if any role assignment matches the overshared groups @@ -71,14 +71,7 @@ export class ViewPermissions { // Parse the role definitions let roleDefs = role.RoleDefinitionBindings?.results || []; - let isLimitedAccess = false; - for (let j = 0; j < roleDefs.length; j++) { - if (roleDefs[j].Name === "Limited Access") { - // Skip this role - isLimitedAccess = true; - break; - } - } + let isLimitedAccess = roleDefs.length === 1 && roleDefs[0].Name === "Limited Access"; // Skip permissions that are "Limited Access System Group" if (isLimitedAccess || role.Member.Title.indexOf("Limited Access System Group") === 0) { @@ -87,7 +80,13 @@ export class ViewPermissions { } // See if this is the eeeu or everyone - if (role.Member.Title == "Everyone except external users" || role.Member.Title == "Everyone" || this.OversharedGroups.indexOf(role.Member.Title) >= 0) { + if (!checkGroupOnly && (role.Member.Title == "Everyone except external users" || role.Member.Title == "Everyone")) { + // Set the flag + isOvershared = true; + break; + } + // Else, see if it contains the custom group + else if (this.OversharedGroups.indexOf(role.Member.Title) >= 0) { // Set the flag isOvershared = true; break; @@ -100,7 +99,12 @@ export class ViewPermissions { let user = users[j]; // See if this is the eeeu or everyone - if (user.Title == "Everyone except external users" || user.Title == "Everyone" || this.OversharedGroups.indexOf(user.Title) >= 0) { + if (!checkGroupOnly && (user.Title == "Everyone except external users" || user.Title == "Everyone")) { + // Set the flag + isOvershared = true; + break; + } + else if (this.OversharedGroups.indexOf(user.Title) >= 0) { // Set the flag isOvershared = true; break;