3đź‘Ť
âś…
You’re probably going to need to create your own system for this. It shouldn’t be very difficult.
class Setting(models.Model):
name = models.CharField(..)
value = models.CharField(..)
users = models.ManyToManyField(User)
groups = models.ManyToManyField(Group)
@classmethod
def has_setting(cls, name, user):
user_settings = cls.objects.filter(name=name, users__in=[user]).count()
group_settings = cls.objects.filter(name=name, groups__in=user.groups.all()).count()
return user_settings or group_settings
@classmethod
def get_settings(cls, name, user, priority=User):
user_settings = list(cls.objects.filter(name=name, users__in=[user]))
group_settings = list(cls.objects.filter(name=name, groups__in=user.groups.all()))
if user_settings and not group_settings:
return user_settings
elif group_settings and not user_settings:
return group_settings
else:
return (group_settings, user_settings)[priority==User]
Then you can do something like this in your views:
def display_frob(request):
if Setting.has_setting('display_frob', request.user):
settings = Setting.get_setting('display_from', request.user, priority=Group)
values = [setting.value for setting in settings]
# if the User was in many groups, we now have a list of values, for the setting
# `display_frob`, that aligns with each of those groups
You can easy build a decorator which will do the check, and provide a list (or a single item) of values to the view.
👤Josh Smeaton
0đź‘Ť
For permissions for “actions” (where an action is typically implemented by a view) I commonly use decorators.
The user_passes_test decorator is great for this kind of purpose.
You could create user permissions not linked to models.
👤Carles Barrobés
- [Django]-Django comments change success url
- [Django]-Implementing a SOA in Django using celery
- [Django]-Manual Post Save Signal creation makes the application slow, Django
- [Django]-Update the relation to point at settings.AUTH_USER_MODEL
- [Django]-Django – cannot unpack non-iterable ManyRelatedManager object
- [Django]-DRF/Angular: form data with nested objects with dotted/[] notation
- [Django]-How to get rid of spacing in SimpleDocTemplate(). Python. ReportLab
Source:stackexchange.com