Smarter Business Solutions Logo
SMARTER Business Solutions
SharePoint Entwicklung SharePoint Lösungen & Produkte

Management 4 SharePoint: Lösung für viele Berechtigungen

Wir zeigen, warum unser Excel-Add-in bei vielen SharePoint-Berechtigungen in Timeouts lief und wie eine Berechtigungsmatrix die Verwaltung wieder beschleunigt.

5 Min Read

Wir haben euch in einem vorigen Blogbeitrag SharePoint Berechtigungskonzept vereinfacht darstellen und verwalten gezeigt, wie wir Berechtigungen eines SharePoint-Projekts in unserem Excel Add-in „Management 4 SharePoint“ abbilden. Sobald wir allerdings große Projektstrukturen mit vielen Listen- und Ordnerberechtigungen verwalten mussten, lief unser Excel Add-in in ein Timeout. In diesem Beitrag teilen wir die Ursachen und unsere Lösung.

Ursachen des Timeout-Problems

Früher haben wir die Berechtigungen für alle Listen, Ordner und Rollen in einer flachen Liste in unserem Redux-State gespeichert. Im Permission-Objekt hielten wir die ID der Liste oder des Ordners (itemId), die ID der Rolle (groupId) sowie den Berechtigungswert (value) fest.

Datenmodell im Redux-State

export interface IPermission {
  id: string;
  value: PermissionType;
  itemId: string;
  groupId: string;
}

Wir speicherten die Berechtigungen in einem NormalizedObject-Format. Das Property byId enthielt alle Objekte, allIds listete deren IDs.

const initialState: INormalizedObject<IPermission> = {
  byId: {},
  allIds: [],
};

Performance-Kosten beim Schreiben

Mussten wir neue Berechtigungen im State speichern, erzeugten wir jedes Mal ein neues State-Objekt mit den hinzugefügten Einträgen:

function reduceAddPermissions(
  state: INormalizedObject<IPermission>,
  action: IAddPermissionsAction
): INormalizedObject<IPermission> {
  const newPermissions: { [id: string]: IPermission } = {};
  const newPermissionIds: string[] = [];

  action.payload.forEach(permission => {
    newPermissions[permission.id] = permission;
    newPermissionIds.push(permission.id);
  });

  return {
    byId: {
      ...state.byId,
      ...newPermissions,
    },
    allIds: [...state.allIds, ...newPermissionIds],
  };
}

Ab etwa 6.000 Berechtigungen lief unser Excel Add-in aufgrund des immer größer werdenden States in ein Timeout. Für große SharePoint-Projektstrukturen war der Ansatz daher ungeeignet. Zusätzlich erforderten Anfragen eine ineffiziente Filterung über alle Berechtigungen hinweg:

const allPermissions: IPermission[] = Object.values(
  (state.entities.permissions as INormalizedObject<IPermission>).byId
);

const permission = allPermissions.find(
  entry => entry.itemId === list.id && entry.groupId === group.id
);

Lösung für viele Listen- und Ordnerberechtigungen

Um das Timeout-Problem zu lösen, haben wir die Speicherung komplett umgebaut und anstelle der flachen Liste eine Berechtigungsmatrix eingeführt. Diese besteht aus einem Array von Integer-Arrays. Für jede Liste oder jeden Ordner fügen wir ein Integer-Array hinzu, das die Berechtigungswerte pro Rolle enthält:

  • 1 = Read
  • 2 = Write
  • 3 = Read + Write
  • 4 = Delete
  • 5 = Read + Delete
  • 6 = Write + Delete
  • 7 = Read + Write + Delete

Berechtigungsmatrix im Excel-Add-in Management 4 SharePoint

Dadurch können wir Berechtigungen indiziert auslesen und sparen uns Filteroperationen über große Arrays.

export function getPermission(
  list: IList,
  groupIndex: number,
  permissionMatrix: number[][],
  appState: AppState
): number {
  const globalListIndex = getGlobalListIndex(list.id, appState);
  return permissionMatrix[globalListIndex][groupIndex];
}

Wir müssen lediglich die Position der abgefragten Liste berechnen und können anschließend mit einem Indexer die Berechtigung der gewünschten Gruppe auslesen. Die Berechtigungsmatrix löst nicht nur das Timeout-Problem für große SharePoint-Strukturen, sondern erhöht die Performance der gesamten Berechtigungsverwaltung in unserem Excel Add-in deutlich.

Hast du noch Fragen zu unserem Excel Add-in? Dann kontaktiere uns gern!

Kontakt aufnehmen

Schlagwörter

#Berechtigungen #Excel #JavaScript #SharePoint #SharePoint Ordnerberechtigungen

Bereit, Ihr SharePoint zu transformieren?

Lassen Sie unsere Experten Ihnen helfen, die in diesem Artikel besprochenen Lösungen umzusetzen.