Working with user roles in Django

bgarcial picture bgarcial · Oct 30, 2015 · Viewed 21.9k times · Source

I have some question In a project I have the need of work with users which are of three (may be more) types of them have different roles: physician patient administrator

I have been thinking use of the Django Model Users and extend it creating a userprofile model ... But I ignore how to manage the different roles because, the userprofile model will have fields of the user model, althought I don't know how to address the roles topic.

1 User have Many userprofiles may be? I don't know

Or may be I will should create a Roles Model/Table in where I specify the roles types and create a relation with the Users Model. This is a good possibility.

Another possibility (as a comment more below) is check the Django permissions system, in which I can create user groups, and assign permissions to these groups, althought here I can only edit, create and delete models really?

I am a few confuse about of how to address this subject

Searching I found this app. https://github.com/dabapps/django-user-roles

If somebody can orient me about it, I will be much grateful Best Regards

Answer

sponrad picture sponrad · Oct 30, 2015

You could probably get this to work with django's built in permissions

That may be more than you need though. A simple solution would just be a UserProfile model with a role field with a OneToOneField to your user:

class UserProfile(models.Model):
  user = models.OneToOneField(User, related_name="profile")
  role = models.CharField()

Set the roles and do checks with the roles in your views:

user.profile.role = "physician"
user.profile.save()

if user.profile.role == "physician":
  #do physician case here