Zum Inhalt springen
SharePoint EntwicklungSharePoint 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.

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

  • Berechtigungen
  • Excel
  • JavaScript
  • SharePoint
  • SharePoint Ordnerberechtigungen

Fragen zu diesem Thema?

Wir unterstützen Sie gerne bei der Umsetzung in Ihrer Umgebung.