# User model and administrators in SaaS

**URL:** <https://forum.djangoproject.com/t/user-model-and-administrators-in-saas/5173>\
**Category:** Using Django\
**Created:** [November 11, 2020, 6:16pm UTC](https://forum.djangoproject.com/t/user-model-and-administrators-in-saas/5173 "2020-11-11T18:16:22Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![marcoburato](https://avatars.discourse-cdn.com/v4/letter/m/e274bd/32.png) [@marcoburato](https://forum.djangoproject.com/u/marcoburato)\
**Post date:** [November 11, 2020, 6:16pm UTC](https://forum.djangoproject.com/t/user-model-and-administrators-in-saas/5173/1 "2020-11-11T18:16:22Z")

</div>

Hello everyone, I’m undecided regarding how I should approach user management, so I thought I’d check if anyone with more experience can recommend a best practice.

I’m making a SaaS and I determined there can be 3 types of users accessing it:

1. Regular users, who will have different permissions so they are allowed to perform specific operations or not. These are people within the customer company.
2. Admin users, who will be able to configure the software, which means managing regular users, creating custom fields, etc. These are also people within the customer company.
3. Service user(s), who will have full access to the software, to provide support. In practice, this is me.

I don’t want Admin users to access Django’s Admin app. There will be UI within my app to perform their tasks. But it’d be nice to have it for Service users, for maintenance.

I could do this in many different ways:

- Use the standard User model, where _Admin_ is a permission and _Service_ is `is_staff`
- Use the standard User model, where _Admin_ is `is_staff` (but AFAIK this would give access to the Admin app, which I don’t want) and _Service_ is `is_superuser`
- Use the standard User model, where _Service_ is `is_staff` and _Admin_ is the `is_admin` field in a separate model with a one-to-one link
- Use a custom User model, where _Service_ is `is_staff` and _Admin_ is the extra field `is_admin`

I’m inclined towards the last option, so I don’t need any extra query and I can easily add more data to my user in the future.

By the way, the documentation is a a bit confusing as it says creating a custom User model is best practice but also says to think twice about it.

I’d like to hear your thoughts.

---

<div class="post-metadata">

**Author:** ![KenWhitesell](https://sea2.discourse-cdn.com/flex026/user_avatar/forum.djangoproject.com/kenwhitesell/32/280_2.png) [@KenWhitesell](https://forum.djangoproject.com/u/KenWhitesell)\
**Post date:** [November 12, 2020, 2:31am UTC](https://forum.djangoproject.com/t/user-model-and-administrators-in-saas/5173/2 "2020-11-12T02:31:13Z")

</div>

If you don’t want to modify the User object, you could also use the Django Group facility and create an Admin Group, and then apply group membership restrictions to your custom admin. (Yes, service would be `is_staff`.)
