123456789101112131415161718192021222324252627282930313233343536373839 |
- # pylint: disable=protected-access
- from copy import deepcopy
- from hashlib import md5
- from misago.core import threadstore
- from .forms import get_permissions_forms
- def fake_post_data(target, data_dict):
- """
- In order for form to don't fail submission, all permission fields need
- to receive values. This function populates data dict with default values
- for permissions, making form validation pass
- """
- for form in get_permissions_forms(target):
- for field in form:
- if field.value() is True:
- data_dict[field.html_name] = 1
- elif field.value() is False:
- data_dict[field.html_name] = 0
- else:
- data_dict[field.html_name] = field.value()
- return data_dict
- def override_acl(user, new_acl):
- """overrides user permissions with specified ones"""
- final_cache = deepcopy(user.acl_cache)
- final_cache.update(new_acl)
- if user.is_authenticated:
- user._acl_cache = final_cache
- user.acl_key = md5(str(user.pk).encode()).hexdigest()[:8]
- user.save(update_fields=['acl_key'])
- threadstore.set('acl_%s' % user.acl_key, final_cache)
- else:
- threadstore.set('acl_%s' % user.acl_key, final_cache)
|