-
Notifications
You must be signed in to change notification settings - Fork 10
/
acl.lua
75 lines (52 loc) · 2.16 KB
/
acl.lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
-- WolfAdmin module for Wolfenstein: Enemy Territory servers.
-- Copyright (C) 2015-2017 Timo 'Timothy' Smit
-- This program is free software: you can redistribute it and/or modify
-- it under the terms of the GNU General Public License as published by
-- the Free Software Foundation, either version 3 of the License, or
-- at your option any later version.
-- This program is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-- GNU General Public License for more details.
-- You should have received a copy of the GNU General Public License
-- along with this program. If not, see <http://www.gnu.org/licenses/>.
local auth = require "luascripts.wolfadmin.auth.auth"
local db = require "luascripts.wolfadmin.db.db"
local players = require "luascripts.wolfadmin.players.players"
local events = require "luascripts.wolfadmin.util.events"
local files = require "luascripts.wolfadmin.util.files"
local tables = require "luascripts.wolfadmin.util.tables"
local acl = {}
local data = {}
function acl.readPermissions()
-- read level permissions into a cache file (can be loaded at mod start)
-- should probably cache current players' permissions as well, then
-- read in new players' permissions as they join the server
local roles = db.getLevelRoles()
for _, role in ipairs(roles) do
if not data[role["level_id"]] then
data[role["level_id"]] = {}
end
table.insert(data[role["level_id"]], role["role"])
end
end
events.handle("onGameInit", acl.readPermissions)
function acl.clearCache()
-- clear cache whenever database is updated, or do this manually
end
function acl.isallowed(clientId, permission)
local level = acl.getlevel(clientId)
if data[level] ~= nil and tables.contains(data[level], permission) then
return 1
end
return 0
end
function acl.getlevel(clientId)
local player = db.getplayer(players.getGUID(clientId))
return player["level_id"]
end
function acl.getlevelname(levelId)
local level = db.getLevel(levelId)
return level["name"]
end
return acl