Umfangreicher Berechtigungscheck als Funktion zum Einbinden
Dieses Schript stellt die Funktion "Berechtigungscheck" bereit, die ihr in eure Arbeit einbinden könnt.
Die Hauptroutine dient zur Demo des Aufrufs.
Features:
- Besitzer Zugang (immer)
- (optionale) Personenbezogene Berechtigungen anhand einer Liste mit UUIDs
- (optionaler) Gruppenzugang bei gleicher aktiver Gruppe wie das Prim
- (optionaler) Öffentlicher Zugang
Dieses Schript stellt die Funktion "Berechtigungscheck" bereit, die ihr in eure Arbeit einbinden könnt.
Die Hauptroutine dient zur Demo des Aufrufs.
Features:
- Besitzer Zugang (immer)
- (optionale) Personenbezogene Berechtigungen anhand einer Liste mit UUIDs
- (optionaler) Gruppenzugang bei gleicher aktiver Gruppe wie das Prim
- (optionaler) Öffentlicher Zugang
Code:
// P921 Umfangreicher Berechtigungs Check als Funktion V1.0 10.2021
// Creative Common CC1 bei Tron
// Festlegen wer rein darf:
// Besitzer darf immer.
// Personenbezogene Berechtigung
list zugangsliste = ["b6a520ac-a468-4bc3-9e52-b509e88a8bce","18da7264-3260-4b63-8173-2a6fd7e93e33","798a6b1e-2186-4cf2-b733-460cb7132ae9"]; // UUIDS berechtigter AVAs
// Berechtigung bei gleicher (aktiver) Gruppe
integer groupaccess = FALSE; // TRUE ore FALSE
// Öffentlicher Zugang
integer publicaccess = FALSE; // TRUE ore FALSE
integer berechtigungscheck(string clicker, integer selbegruppe) // Funktion um Zugangsberechtigung auszuwerten
{
integer zugang = FALSE;
integer uuidzugang = llGetListLength(zugangsliste); // Anzahl der persönlich berechtigten AVAs ermitteln
if (publicaccess) { zugang = TRUE;} // Öffentlicher Zugang
else if (selbegruppe && groupaccess) { zugang = TRUE;} // Gruppen Zugang
else if (clicker == llGetOwner()) { zugang = TRUE;} // Besitzer Zugang immer erlaubt
else if (uuidzugang) // Persönlicher Zugang über UUID Liste
{
string personal;
do
{
personal = llList2String(zugangsliste, uuidzugang -1 );
if( clicker == personal) { zugang = TRUE; }
uuidzugang--;
}
while ( personal && (!zugang));
}
return zugang;
}
default
{
state_entry() {}
touch_start(integer dummy)
{
// llDetectedKey(0) ermittelt die UUID des Clickers
// llDetectedGroup(0) ermittelt Gruppengleichheit von Clicker und Prim
integer access = berechtigungscheck(llDetectedKey(0),llDetectedGroup(0)); // Funktion für Berechtigungs Check aufrufen
if(access) {llSay(0, "Zugriff wurde erteilt");}
else {llSay(0, "Kein Zugriff erteilt");}
}
}