Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 15 additions & 6 deletions src/reports/permissions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -18,6 +19,7 @@ interface IPermissionItem {
IsLimitedAccess: boolean;
LoginName: string;
Name: string;
Overshared?: boolean;
Roles?: string[];
RoleInfo?: string[];
SiteMembers?: Types.SP.User[];
Expand Down Expand Up @@ -214,6 +216,7 @@ export class Permissions {
IsLimitedAccess: false,
LoginName: role.Member.LoginName,
Name: role.Member.Title,
Overshared: false,
Roles: [],
RoleInfo: [],
SiteMembers: [],
Expand All @@ -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 : [],
Expand All @@ -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 : [],
Expand Down Expand Up @@ -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";
Expand Down Expand Up @@ -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
});

Expand Down Expand Up @@ -545,6 +550,10 @@ export class Permissions {
name: "EEEU",
title: "Has<br/>EEEU?"
},
{
name: "Overshared",
title: "Contains<br/>Overshared Group?"
},
{
name: "IsLimitedAccess",
title: "Is<br/>Limited Access?"
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -707,7 +716,7 @@ export class Permissions {
this._elSubNav.innerHTML = `<div class="h6"></div><div></div>`;

// Hide the limited access items by default
this._dashboard.filter(3, "false");
this._dashboard.filter(4, "false");
}

// Runs the report
Expand Down
26 changes: 15 additions & 11 deletions src/reports/viewPermissions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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) {
Expand All @@ -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;
Expand All @@ -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;
Expand Down
Loading