utils.py 2.84 KB
Newer Older
1 2
from django_comment_common.models import Role

3 4 5 6 7 8 9

class ThreadContext(object):
    """ An enumeration that represents the context of a thread. Used primarily by the comments service. """
    STANDALONE = 'standalone'
    COURSE = 'course'


10 11 12 13 14 15 16 17
_STUDENT_ROLE_PERMISSIONS = ["vote", "update_thread", "follow_thread", "unfollow_thread",
                             "update_comment", "create_sub_comment", "unvote", "create_thread",
                             "follow_commentable", "unfollow_commentable", "create_comment", ]

_MODERATOR_ROLE_PERMISSIONS = ["edit_content", "delete_thread", "openclose_thread",
                               "endorse_comment", "delete_comment", "see_all_cohorts"]

_ADMINISTRATOR_ROLE_PERMISSIONS = ["manage_moderator"]
18

19

20
def _save_forum_role(course_key, name):
21
    """
22 23
    Save and Update 'course_key' for all roles which are already created to keep course_id same
    as actual passed course key
24
    """
25
    role, created = Role.objects.get_or_create(name=name, course_id=course_key)
26
    if created is False:
27
        role.course_id = course_key
28 29 30 31 32
        role.save()

    return role


33
def seed_permissions_roles(course_key):
34 35 36
    """
    Create and assign permissions for forum roles
    """
37 38 39 40
    administrator_role = _save_forum_role(course_key, "Administrator")
    moderator_role = _save_forum_role(course_key, "Moderator")
    community_ta_role = _save_forum_role(course_key, "Community TA")
    student_role = _save_forum_role(course_key, "Student")
41

42
    for per in _STUDENT_ROLE_PERMISSIONS:
43 44
        student_role.add_permission(per)

45
    for per in _MODERATOR_ROLE_PERMISSIONS:
46 47
        moderator_role.add_permission(per)

48
    for per in _ADMINISTRATOR_ROLE_PERMISSIONS:
49 50 51 52 53 54 55
        administrator_role.add_permission(per)

    moderator_role.inherit_permissions(student_role)

    # For now, Community TA == Moderator, except for the styling.
    community_ta_role.inherit_permissions(moderator_role)

56 57 58 59
    administrator_role.inherit_permissions(moderator_role)


def are_permissions_roles_seeded(course_id):
60 61 62 63
    """
    Returns whether the forums permissions for a course have been provisioned in
    the database
    """
64 65 66 67 68 69 70
    try:
        administrator_role = Role.objects.get(name="Administrator", course_id=course_id)
        moderator_role = Role.objects.get(name="Moderator", course_id=course_id)
        student_role = Role.objects.get(name="Student", course_id=course_id)
    except:
        return False

71
    for per in _STUDENT_ROLE_PERMISSIONS:
72 73 74
        if not student_role.has_permission(per):
            return False

75
    for per in _MODERATOR_ROLE_PERMISSIONS + _STUDENT_ROLE_PERMISSIONS:
76 77 78
        if not moderator_role.has_permission(per):
            return False

79
    for per in _ADMINISTRATOR_ROLE_PERMISSIONS + _MODERATOR_ROLE_PERMISSIONS + _STUDENT_ROLE_PERMISSIONS:
80 81 82
        if not administrator_role.has_permission(per):
            return False

83
    return True