Table of Contents

LSL: Authorization

List of Users / Same Group

// Allow matching groups
integer ALLOW_GROUP = TRUE;
 
// A list of avatar keys (UUID) or usernames
list AUTHORIZED_USERS = [
    "6c8ff91f-d74b-4842-b38b-81bb08f6efde",     // tomjs
    "bobka Resident",   // fails
    "bobka.Resident",   // fails
    "ernest.cone",      // OK (angelus coen)
    "rebozuelo"         // OK
];
 
// authorized(ID)
// Return TRUE if:
// * owner
// * group matches object group
// * key in AUTHORIZED_USERS
// * name(key) in AUTHORIZED_USERS
integer authorized(key id) {
    if (id == NULL_KEY || id == "") {
        // If no key given, fail auth
        return FALSE;
    }
 
    string username = llGetUsername(id);
    log("key->username: " + username);
    if (username == "") {
        // id is a prim
        id = llGetOwnerKey(id);
        log("new id: " + (string)id);
    }
    return (
        id == llGetOwnerKey(llGetKey()) ||
        (ALLOW_GROUP && llSameGroup(id)) ||
        llListFindList(AUTHORIZED_USERS, [(string)id]) >= 0 ||
        llListFindList(AUTHORIZED_USERS, [username]) >= 0
    );
}
 
log(string msg) {
    llOwnerSay(msg);
}
 
default {
    touch_start(integer total_number) {
        if (authorized(llDetectedKey(0))) {
            // do something authorized here
            log("allowed");
        } else {
            log("DENIED!!");
        }
    }
 
    listen(integer channel, string name, key id, string msg) {
        log("listen("+(string)channel+", "+name+", "+(string)id+", "+msg+")");
        if (authorized(id)) {
            // Process our commands
            //command(msg, id);
            log("allowed");
        } else {
            log("DENIED!!");
        }
    }
}

Touch and DetectedGroup

    touch_start(integer num) {
        group = llDetectedGroup(0);     // Is the Agent in the objectowner's group?
        agent = llDetectedKey(0);       // Agent's key
        objectowner = llGetOwner();     // objowners key
 
        // is the Agent = the owner OR is the agent in the owners group
        if ((objectowner == agent) || (group && ingroup))  {
            // ...
        }
    }