Ich arbeite an einer Funktion, die eine Reihe von Berechtigungszeichenfolgen mit weniger als 255 Zeichen aufnimmt und sie einer Entität zuweist. Jede zugewiesene Zeichenkette ist eindeutig, aber es gibt so viele, dass das Ablegen in ein Array, das Serialisieren von ihnen und das Schieben in eine Datenbank und das spätere Herausziehen und De-Serialisieren von ihnen oder das Neuberechnen aus einer Abfrage jedes Mal, wenn es eine Last gibt, Verzögerungsprobleme verursacht hat. Insbesondere bei vererbten Berechtigungen.
Also dachte ich an die Zeichenfolge zu nehmen, eine Maske von ihm dann OR'ing in die Berechtigungen glob generieren. Wie mehr Berechtigungen hinzugefügt werden, weiterhin ODER sie an die Glob. Dann, wenn Sie benötigen, um die Berechtigung UND die Zeichenfolge gegen die Glob zu überprüfen.
Die Frage ist, wie man die Maske erzeugt. Zuerst dachte ich daran, die Zeichenfolge für eine eindeutige Maske zu hashen, aber es ist denkbar, aber ich weiß nicht, wie wahrscheinlich, dass, wenn mehr Hash-Werte auf den Glob ODER'ed das Potenzial für das Füllen der Glob in einer Weise, dass und AND-Test mit einer Berechtigung, die sie nicht haben, noch einen wahren Wert zurückgeben.
if($glob&&$test == $test)
Die andere Möglichkeit wäre, die Erlaubniszeichenfolgen automatisch zu nummerieren und ihre Maske auf 2^Autonummer einzustellen. Aber das würde die Anzahl der Erlaubniszeichenfolgen auf etwa 64 begrenzen.
Was ich wirklich will, ist ein glob einer Art, die ich aus einer Datenbank einmal ziehen kann und assoziieren Sie es mit dem Benutzer. Dann testen Sie diesen Glob gegen eine Zeichenfolge oder einen assoziierten Wert, der einen Berechtigungssatz darstellt.