diff --git a/samples/react-securitygrid/src/webparts/SPSecurityService.ts b/samples/react-securitygrid/src/webparts/SPSecurityService.ts index 0a9dc6a67..4939fd061 100644 --- a/samples/react-securitygrid/src/webparts/SPSecurityService.ts +++ b/samples/react-securitygrid/src/webparts/SPSecurityService.ts @@ -37,7 +37,7 @@ export class SPSiteUser { public userId: SPExternalUser; public upn: string; public isSelected: boolean; //should user be shown in UI - public principalType:number; //4=Security group, 1 = user, 2=DL, 8=SP Group + public principalType: number; //4=Security group, 1 = user, 2=DL, 8=SP Group } export class SPRoleDefinition { @@ -105,15 +105,13 @@ export class SPExternalUser { } export class SPRoleAssignment { public roleDefinitionIds: number[] = []; - public users: number[] = []; - public groups: number[] = []; - public userId: SPExternalUser; + public principalId: number; } export class Helpers { public static doesUserHavePermission(securableObject, user, requestedpermission: SPPermission, roles, siteGroups) { - const permissions: SPBasePermissions[] = Helpers.getUserPermissionsForObject(securableObject, user, roles, siteGroups); + const permissions: SPBasePermissions[] = Helpers.getUserPermissionsForObject(securableObject, user, roles, siteGroups); for (const permission of permissions) { if ( ((permission.low & requestedpermission.value.Low) === (requestedpermission.value.Low)) @@ -176,33 +174,29 @@ export class Helpers { } public static GetRoleAssignmentsForUser(securableObject: ISPSecurableObject, user: SPSiteUser, groups: SPSiteGroup[]): SPRoleAssignment[] { + try { + let selectedRoleAssignments: SPRoleAssignment[] = []; - let selectedRoleAssignments: SPRoleAssignment[] = []; - - for (const roleAssignment of securableObject.roleAssignments) { - - for (const assignedUser of roleAssignment.users) { - if (assignedUser === user.id) { - selectedRoleAssignments.push(roleAssignment); + for (const roleAssignment of securableObject.roleAssignments) { + let group: SPSiteGroup = find(groups, (g) => { return g.id === roleAssignment.principalId }); + if (group) { + if (this.userIsInGroup(user.id, group.id, groups)) { + selectedRoleAssignments.push(roleAssignment); + } + } + else { + // it must be a user + if (user.id === roleAssignment.principalId) { + selectedRoleAssignments.push(roleAssignment); + } } } - - for (const groupId of roleAssignment.groups) { - // if the user is in the group add the assignment - if (this.userIsInGroup(user.id, groupId, groups)) { - selectedRoleAssignments.push(roleAssignment); - } - } - if (roleAssignment.userId - && user.userId - && roleAssignment.userId.nameId - && roleAssignment.userId.nameIdIssuer - && roleAssignment.userId.nameId === user.userId.nameId - && roleAssignment.userId.nameIdIssuer === user.userId.nameIdIssuer) { - selectedRoleAssignments.push(roleAssignment); - } + return selectedRoleAssignments; + } catch (exception) { + debugger; + console.error(exception); } - return selectedRoleAssignments; + } } export default class SPSecurityService { @@ -217,22 +211,22 @@ export default class SPSecurityService { // pnp.sp.web.lists.getByTitle("Config3").getItemsByCAMLQuery(caml, "RoleAssignments").then(show); let caml: any = { ViewXml: "" + - " " + - "" + - " " + - " " + - " " + - folderServerRelativeUrl + - " " + - " " + - " " + - " " + - // " "+ - // "" + - // "FolderUrls"+ + " " + + "" + + " " + + " " + + " " + + folderServerRelativeUrl + + " " + + " " + + " " + + " " + + // " "+ + // "" + + // "FolderUrls"+ - // ""+ - " " + // ""+ + " " }; return pnp.sp.web.lists.getByTitle(listTitle).getItemsByCAMLQuery(caml, "ContentType", "Folder", "Folder/ParentFolder", "File", @@ -268,30 +262,28 @@ export default class SPSecurityService { for (let roleAssignmentObject of listItem.RoleAssignments) { let roleAssignment: SPRoleAssignment = { - roleDefinitionIds: [], - users: [], - groups: [], - userId: null // external user + roleDefinitionIds: roleAssignmentObject.RoleDefinitionBindings.map((rdb) => { return rdb.Id }), + principalId: roleAssignmentObject.PrincipalId }; - if (roleAssignmentObject.Member.UserId) { - roleAssignment.userId = new SPExternalUser(); - roleAssignment.userId.nameId = roleAssignmentObject.Member.UserId.NameId; - roleAssignment.userId.nameIdIssuer = roleAssignmentObject.Member.UserId.NameIdIssuer; - // roleAssignment.userId = roleAssignmentObject.Member.UserId; - } - if (roleAssignmentObject.Member.Users) { - for (let roleAssignmentMemberUser of roleAssignmentObject.Member.Users) { - roleAssignment.users.push(roleAssignmentMemberUser.Id); - } - } - if (roleAssignmentObject.Member.Groups) { - for (let roleAssignmentMemberGroup of roleAssignmentObject.Member.Groups) { - roleAssignment.groups.push(roleAssignmentMemberGroup.Id); - } - } - for (let roleDefinitionBinding of roleAssignmentObject.RoleDefinitionBindings) { - roleAssignment.roleDefinitionIds.push(roleDefinitionBinding.Id); - } + // if (roleAssignmentObject.Member.UserId) { + // roleAssignment.userId = new SPExternalUser(); + // roleAssignment.userId.nameId = roleAssignmentObject.Member.UserId.NameId; + // roleAssignment.userId.nameIdIssuer = roleAssignmentObject.Member.UserId.NameIdIssuer; + // // roleAssignment.userId = roleAssignmentObject.Member.UserId; + // } + // if (roleAssignmentObject.Member.Users) { + // for (let roleAssignmentMemberUser of roleAssignmentObject.Member.Users) { + // roleAssignment.users.push(roleAssignmentMemberUser.Id); + // } + // } + // if (roleAssignmentObject.Member.Groups) { + // for (let roleAssignmentMemberGroup of roleAssignmentObject.Member.Groups) { + // roleAssignment.groups.push(roleAssignmentMemberGroup.Id); + // } + // } + // for (let roleDefinitionBinding of roleAssignmentObject.RoleDefinitionBindings) { + // roleAssignment.roleDefinitionIds.push(roleDefinitionBinding.Id); + // } itemToAdd.roleAssignments.push(roleAssignment); } itemsToAdd.push(itemToAdd); @@ -316,13 +308,14 @@ export default class SPSecurityService { pnp.sp.web.siteUsers .inBatch(batch).get().then((response) => { + console.table(response); securityInfo.siteUsers = response.map((u) => { let user: SPSiteUser = new SPSiteUser(); user.isSelected = true; user.id = u.Id; user.name = u.Title; - user.principalType=u.PrincipalType; + user.principalType = u.PrincipalType; user.upn = u.LoginName.split('|')[2]; if (u.UserId) { user.userId = new SPExternalUser(); @@ -415,26 +408,11 @@ export default class SPSecurityService { mylist.isExpanded = false; mylist.hasBeenRetrieved = false; mylist.roleAssignments = listObject.RoleAssignments.map((roleAssignmentObject) => { - let roleAssignment: SPRoleAssignment = new SPRoleAssignment(); - if (roleAssignmentObject.Member.UserId) { - roleAssignment.userId = new SPExternalUser(); - roleAssignment.userId.nameId = roleAssignmentObject.Member.UserId.NameId; - roleAssignment.userId.nameIdIssuer = roleAssignmentObject.Member.UserId.NameIdIssuer; - } - if (roleAssignmentObject.Member.Users) { - roleAssignment.users = roleAssignmentObject.Member.Users.map((user) => { - return user.Id; - }); - } - if (roleAssignmentObject.Member.Groips) { - roleAssignment.groups = roleAssignmentObject.Member.Groups.map((group) => { - return group.Id; - }); - } - mylist.roleAssignments = roleAssignmentObject.RoleDefinitionBindings.map((roleDefinitionBinding) => { - roleAssignment.roleDefinitionIds.push(roleDefinitionBinding.Id as number); - }); + let roleAssignment: SPRoleAssignment = { + roleDefinitionIds: roleAssignmentObject.RoleDefinitionBindings.map((rdb) => { return rdb.Id }), + principalId: roleAssignmentObject.PrincipalId + }; return roleAssignment; }); return mylist; diff --git a/samples/react-securitygrid/src/webparts/spSecurity/SpSecurityWebPart.ts b/samples/react-securitygrid/src/webparts/spSecurity/SpSecurityWebPart.ts index cfae469fd..f8af843df 100644 --- a/samples/react-securitygrid/src/webparts/spSecurity/SpSecurityWebPart.ts +++ b/samples/react-securitygrid/src/webparts/spSecurity/SpSecurityWebPart.ts @@ -48,7 +48,8 @@ export default class SpSecurityWebPart extends BaseClientSideWebPart = React.createElement( diff --git a/samples/react-securitygrid/src/webparts/spSecurity/components/ISpSecurityProps.ts b/samples/react-securitygrid/src/webparts/spSecurity/components/ISpSecurityProps.ts index 95425090f..4ae3f8edc 100644 --- a/samples/react-securitygrid/src/webparts/spSecurity/components/ISpSecurityProps.ts +++ b/samples/react-securitygrid/src/webparts/spSecurity/components/ISpSecurityProps.ts @@ -18,6 +18,7 @@ export interface ISpSecurityProps { showEmail:boolean; //0 show name, 1 show email showSecurityGroups:boolean; // show PrincipalType=4 showUsers:boolean; // show PrincipalType=1 + domElement:any; // needed to disable button postback after render on classic pages } diff --git a/samples/react-securitygrid/src/webparts/spSecurity/components/SpSecurity.tsx b/samples/react-securitygrid/src/webparts/spSecurity/components/SpSecurity.tsx index e52d57027..860bc8881 100644 --- a/samples/react-securitygrid/src/webparts/spSecurity/components/SpSecurity.tsx +++ b/samples/react-securitygrid/src/webparts/spSecurity/components/SpSecurity.tsx @@ -16,7 +16,10 @@ import { IContextualMenuItem, ContextualMenuItemType } from "office-ui-fabric-re import { Panel, PanelType } from "office-ui-fabric-react/lib/Panel"; import { right } from "glamor"; - +import { + Environment, + EnvironmentType +} from '@microsoft/sp-core-library'; /* tslint:disable */ require('./spSecurity.css'); // loads the SpSecurity,css with unmodified names export default class SpSecurity extends React.Component { @@ -47,7 +50,20 @@ export default class SpSecurity extends React.Component = this.props.domElement.getElementsByTagName('button'); + for (let i: number = 0; i < buttons.length; i++) { + if (buttons[i]) { + // Disable the button onclick postback + buttons[i].onclick = function () { + return false; + }; + } + } + } + } public componentWillMount(): void { this.svc.loadData(this.props.showHiddenLists, this.props.showCatalogs, this.props.graphHttpClient, false).then((response) => { @@ -126,8 +142,6 @@ export default class SpSecurity extends React.Component { return otheritem instanceof SPListItem && otheritem.parentId === itemId; }); @@ -355,9 +369,9 @@ export default class SpSecurity extends React.Component - + - ); + ); } debugger; let userPanelCommands: IContextualMenuItem[] = [];