1. Hi everyone!
    Some time ago I wrote a small plugin 'Permissions' just for me and for the tests.
    But soon this plugin would be useless (oxide has its own system)...
    So I decided to put a plug here, maybe it will help someone.
    • perm.give <steamid\name> <permission>
    • perm.take <steamid\name> <permission>
    • perm.list <steamid>
    • perm.list
    Code:
    -- Get API func
    local API = GetPermissionsAPI() -- it's global function-- Get UserData
    local userdata = API.GetUserDataFromPlayer(player) -- if userdata not found it will return nil
    local userdata = API.GetUserDataFromPlayer(player, true) -- if userdata not found it will create new and return new userdata
    local userdata = API.GetUserData(steamid, do_create_new)-- userdata func
    userdata:GivePerm(permission) -- give permission (if given -> return true, if already have -> return nil)
    userdata:TakePerm(permission) -- take permission(if taken -> return true, if have not -> return nil)
    userdata:HasPerm(permission)  -- check permission(if found -> return Position, else nil)-- Get all permissions
    for i=1, #userdata do
           print(userdata[i])
    end
    Code:
    PLUGIN.Name = "Permissions"
    PLUGIN.Title = "Permissions"
    PLUGIN.Version = V(1, 0, 0)
    PLUGIN.Description = "Adds Permissions System."
    PLUGIN.Author = "Bombardir"
    PLUGIN.HasConfig   = truelocal USERS = {}
    -- ********** API ********** --
    local API = {}
    local base_userdata = {}function GetPermissionsAPI()
        return API
    endfunction base_userdata:GivePerm(perm)
        if not self:HasPerm(perm) then
            table.insert(self, perm)
            datafile.SaveDataTable( "Permissions" )
            return true
        end
    endfunction base_userdata:TakePerm(perm)
        local pos = self:HasPerm(perm)
        if pos then
            table.remove(self, pos)
            datafile.SaveDataTable( "Permissions" )
            return true
        end
    endfunction base_userdata:HasPerm(perm)
        for i=1, #self do
            if self[i] == perm then
                return i
            end
        end
    endfunction API.GetUserDataFromPlayer(player, do_create_new)
        return API.GetUserData(rust.UserIDFromPlayer( player ), do_create_new)
    endfunction API.GetUserData(steamid, do_create_new)
        local data = USERS[steamid]
        if not data then
            if do_create_new then
                data = {}
                setmetatable(data, {__index = base_userdata})
                USERS[steamid] = data
            else
                return nil
            end
        end
        return data
    end-- ********** API ********** --function PLUGIN:Init()
        USERS = datafile.GetDataTable( "Permissions" ) or {}
        for k, v in pairs(USERS) do
            if v[1] then
                setmetatable(USERS[k], {__index = base_userdata})
            else
                USERS[k] = nil
            end
            datafile.SaveDataTable( "Permissions" )
        end
        command.AddConsoleCommand( "perm.give", self.Object, "CC_Perm_Give" )
        command.AddConsoleCommand( "perm.take", self.Object, "CC_Perm_Take" )
        command.AddConsoleCommand( "perm.list", self.Object, "CC_Perm_List" )
        self.Config.ChatName = self.Config.ChatName or "[Permissions]"
        self.Config.No_Permission_Message = self.Config.No_Permission_Message or "You don't have permission for this command!"
        self:SaveConfig()
    endlocal function Check_Perm(arg, permission)
        local player
        if arg.connection then
            player = arg.connection.player
        end
        if player then
            local data = API.GetUserData(rust.UserIDFromPlayer( player ))
            if (data and data:HasPerm(permission)) or player:GetComponent("BaseNetworkable").net.connection.authLevel >= 2 then
                return true
            else
                player:SendConsoleCommand( "chat.add \"" .. self.Config.ChatName .. "\""  .. self.Config.No_Permission_Message )
            end
        else
            return true
        end
    endfunction PLUGIN:CC_Perm_Give(arg)
        local reply = ""
        if Check_Perm(arg, "Perm_Give") then
            local steam = arg:GetString( 0, false )
            local perm = arg:GetString( 1, false )
            if steam and perm then
                local target   = global.BasePlayer.Find(steam)
                local userdata
                if target then
                    userdata = API.GetUserDataFromPlayer( target, true)
                    steam = target.displayName
                else
                    userdata = API.GetUserData(steam, true)
                end
                if userdata:GivePerm(perm) then
                    reply = "Permission " .. perm .. " given to '" .. steam .. "' !"
                else
                    reply =  "'" .. steam .. "' already have this permission!"
                end
            else
                reply = "Syntax Error! (perm.give <steam> <permission>)"
            end
        else
            reply = "No permission!"
        end
        arg:ReplyWith(reply)
        return true
    endfunction PLUGIN:CC_Perm_Take(arg)
        local reply = ""
        if Check_Perm(arg, "Perm_Take") then
            local steam = arg:GetString( 0, false )
            local perm = arg:GetString( 1, false )
            if steam and perm then
                local target   = global.BasePlayer.Find(steam)
                local userdata
                if target then
                    userdata = API.GetUserDataFromPlayer( target )
                    steam = target.displayName
                else
                    userdata = API.GetUserData(steam)
                end
                if userdata then
                    if userdata:TakePerm(perm) then
                        reply = "Permission " .. perm .. " was taken from '" .. steam .. "' !"
                    else
                        reply =  "'" .. steam .. "' haven't this permission! (" .. perm .. ")"
                    end
                else
                    reply =  "'" .. steam .. "' haven't permissions!"
                end
            else
                reply = "Syntax Error! (perm.take <steam> <permission>)"
            end
        else
            reply = "No permission!"
        end
        arg:ReplyWith(reply)
        return true
    endfunction PLUGIN:CC_Perm_List(arg)
        local reply = ""
        if Check_Perm(arg, "Perm_List") then
            local steam = arg:GetString( 0, "all" )
            if steam == "all" then
                reply = reply .. "------------- PERMISSIONS LIST -------------\n"
                for steam, data in pairs(USERS) do
                    reply = reply .. steam .. ": " .. table.concat(data, ", ") .. "\n"
                end
                reply = reply .. "--------------------------------------------"
            else
                local data = USERS[steam]
                if data then
                    reply = reply .. steam .. ": " .. table.concat(data, ", ")
                else
                    reply = "No user with steam: '" .. steam .. "' !"
                end
            end
        else
            reply = "No permission!"
        end
        arg:ReplyWith(reply)
        return true
    end
    
     
    Last edited by a moderator: Nov 9, 2014