Skip to content

Commit ed7a3b2

Browse files
committed
Get action permissions from flag db
1 parent adffbd1 commit ed7a3b2

1 file changed

Lines changed: 12 additions & 8 deletions

File tree

src/Ui/UiWebsocket.py

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
from Translate import translate as _
1919
from util import helper
2020
from util import SafeRe
21+
from util.Flag import flag
2122
from Content.ContentManager import VerifyError, SignError
2223

2324

@@ -117,9 +118,8 @@ def hasPlugin(self, name):
117118

118119
# Has permission to run the command
119120
def hasCmdPermission(self, cmd):
120-
cmd = cmd[0].lower() + cmd[1:]
121-
122-
if cmd in self.admin_commands and "ADMIN" not in self.permissions:
121+
flags = flag.db.get(self.getCmdFuncName(cmd), ())
122+
if "admin" in flags and "ADMIN" not in self.permissions:
123123
return False
124124
else:
125125
return True
@@ -205,6 +205,10 @@ def wrapper(*args, **kwargs):
205205
gevent.spawn(asyncErrorWatcher, func, *args, **kwargs)
206206
return wrapper
207207

208+
def getCmdFuncName(self, cmd):
209+
func_name = "action" + cmd[0].upper() + cmd[1:]
210+
return func_name
211+
208212
# Handle incoming messages
209213
def handleRequest(self, req):
210214

@@ -214,14 +218,14 @@ def handleRequest(self, req):
214218

215219
if cmd == "response": # It's a response to a command
216220
return self.actionResponse(req["to"], req["result"])
217-
elif not self.hasCmdPermission(cmd): # Admin commands
218-
return self.response(req["id"], {"error": "You don't have permission to run %s" % cmd})
219221
else: # Normal command
220-
func_name = "action" + cmd[0].upper() + cmd[1:]
222+
func_name = self.getCmdFuncName(cmd)
221223
func = getattr(self, func_name, None)
222224
if not func: # Unknown command
223-
self.response(req["id"], {"error": "Unknown command: %s" % cmd})
224-
return
225+
return self.response(req["id"], {"error": "Unknown command: %s" % cmd})
226+
227+
if not self.hasCmdPermission(cmd): # Admin commands
228+
return self.response(req["id"], {"error": "You don't have permission to run %s" % cmd})
225229

226230
# Execute in parallel
227231
if cmd in self.async_commands:

0 commit comments

Comments
 (0)