Commit a3703fbf by Greg Price

Refactor a small amount of forum permission code

parent c23a27ba
...@@ -37,16 +37,16 @@ def has_permission(user, permission, course_id=None): ...@@ -37,16 +37,16 @@ def has_permission(user, permission, course_id=None):
CONDITIONS = ['is_open', 'is_author'] CONDITIONS = ['is_open', 'is_author']
def _check_condition(user, condition, course_id, data): def _check_condition(user, condition, content):
def check_open(user, condition, course_id, data): def check_open(user, content):
try: try:
return data and not data['content']['closed'] return content and not content['closed']
except KeyError: except KeyError:
return False return False
def check_author(user, condition, course_id, data): def check_author(user, content):
try: try:
return data and data['content']['user_id'] == str(user.id) return content and content['user_id'] == str(user.id)
except KeyError: except KeyError:
return False return False
...@@ -55,10 +55,10 @@ def _check_condition(user, condition, course_id, data): ...@@ -55,10 +55,10 @@ def _check_condition(user, condition, course_id, data):
'is_author': check_author, 'is_author': check_author,
} }
return handlers[condition](user, condition, course_id, data) return handlers[condition](user, content)
def _check_conditions_permissions(user, permissions, course_id, **kwargs): def _check_conditions_permissions(user, permissions, course_id, content):
""" """
Accepts a list of permissions and proceed if any of the permission is valid. Accepts a list of permissions and proceed if any of the permission is valid.
Note that ["can_view", "can_edit"] will proceed if the user has either Note that ["can_view", "can_edit"] will proceed if the user has either
...@@ -69,7 +69,7 @@ def _check_conditions_permissions(user, permissions, course_id, **kwargs): ...@@ -69,7 +69,7 @@ def _check_conditions_permissions(user, permissions, course_id, **kwargs):
def test(user, per, operator="or"): def test(user, per, operator="or"):
if isinstance(per, basestring): if isinstance(per, basestring):
if per in CONDITIONS: if per in CONDITIONS:
return _check_condition(user, per, course_id, kwargs) return _check_condition(user, per, content)
return cached_has_permission(user, per, course_id=course_id) return cached_has_permission(user, per, course_id=course_id)
elif isinstance(per, list) and operator in ["and", "or"]: elif isinstance(per, list) and operator in ["and", "or"]:
results = [test(user, x, operator="and") for x in per] results = [test(user, x, operator="and") for x in per]
...@@ -115,4 +115,4 @@ def check_permissions_by_view(user, course_id, content, name): ...@@ -115,4 +115,4 @@ def check_permissions_by_view(user, course_id, content, name):
p = VIEW_PERMISSIONS[name] p = VIEW_PERMISSIONS[name]
except KeyError: except KeyError:
logging.warning("Permission for view named %s does not exist in permissions.py" % name) logging.warning("Permission for view named %s does not exist in permissions.py" % name)
return _check_conditions_permissions(user, p, course_id, content=content) return _check_conditions_permissions(user, p, course_id, content)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment