Further refactoring towards #1176.

This commit is contained in:
Griatch 2017-02-02 00:02:58 +01:00
parent 09245589f5
commit a9f08760cc
4 changed files with 14 additions and 11 deletions

View file

@ -92,7 +92,7 @@ from __future__ import print_function
from django.conf import settings
from evennia.utils import utils
_PERMISSION_HIERARCHY = [p.lower() for p in settings.PERMISSION_HIERARCHY]
_PERMISSION_HIERARCHY = [pe.lower() for pe in settings.PERMISSION_HIERARCHY]
def _to_player(accessing_obj):
@ -161,7 +161,7 @@ def perm(accessing_obj, accessed_obj, *args, **kwargs):
gtmode = kwargs.pop("_greater_than", False)
try:
perm = args[0].lower()
permission = args[0].lower()
perms_object = [p.lower() for p in accessing_obj.permissions.all()]
except (AttributeError, IndexError):
return False
@ -171,9 +171,9 @@ def perm(accessing_obj, accessed_obj, *args, **kwargs):
perms_player = [p.lower() for p in player.permissions.all()]
is_quell = player.attributes.get("_quell")
if perm in _PERMISSION_HIERARCHY:
if permission in _PERMISSION_HIERARCHY:
# check hierarchy without allowing escalation obj->player
hpos_target = _PERMISSION_HIERARCHY.index(perm)
hpos_target = _PERMISSION_HIERARCHY.index(permission)
hpos_player = [hpos for hpos, hperm in enumerate(_PERMISSION_HIERARCHY) if hperm in perms_player]
hpos_player = hpos_player and hpos_player[-1] or -1
if is_quell:
@ -187,17 +187,17 @@ def perm(accessing_obj, accessed_obj, *args, **kwargs):
return hpos_target < hpos_player
else:
return hpos_target <= hpos_player
elif not is_quell and perm in perms_player:
elif not is_quell and permission in perms_player:
# if we get here, check player perms first, otherwise
# continue as normal
return True
if perm in perms_object:
if permission in perms_object:
# simplest case - we have direct match
return True
if perm in _PERMISSION_HIERARCHY:
if permission in _PERMISSION_HIERARCHY:
# check if we have a higher hierarchy position
hpos_target = _PERMISSION_HIERARCHY.index(perm)
hpos_target = _PERMISSION_HIERARCHY.index(permission)
return any(1 for hpos, hperm in enumerate(_PERMISSION_HIERARCHY)
if hperm in perms_object and hpos_target < hpos)
return False
@ -252,11 +252,11 @@ def dbref(accessing_obj, accessed_obj, *args, **kwargs):
if not args:
return False
try:
dbref = int(args[0].strip().strip('#'))
dbr = int(args[0].strip().strip('#'))
except ValueError:
return False
if hasattr(accessing_obj, 'dbid'):
return dbref == accessing_obj.dbid
return dbr == accessing_obj.dbid
return False