2015-01-28 13:26 GMT+01:00 Russell Keith-Magee <[email protected]>:
> > On Wed, Jan 28, 2015 at 3:00 PM, 詹上潁 <[email protected]> wrote: > >> My project need an admin for staff and a normal website for normal user. >> Staff can only login to staffsite and normal user can only login to >> website. Staff will login to admin to do some management. They can >> view normal user list and detail and create or delete normal user >> admin. The two type of user is very different, so I want to write a model >> for each of them, instead of using is_staff flag. But in a project, I can >> only have a USER_AUTH_MODEL. Is there a good way to implement these >> requirements? >> >> Since a project can only have a USER_AUTH_MODEL, I separate the two type >> of user in two project (staffsite and website). >> My currently design and implementation is as follow: >> >> I wrote a standalone django app called member, and implement Member model >> >> class Member(AbstractBaseUser): >> #member related fields >> >> then I create two project “staffsite" and “website". “staffsite" is for >> internal use, “website" is open for normal user. “staffsite" just use the >> django built in auth.User. Member model in “staffsite" is just a normal >> model. “website" use Member model as USER_AUTH_MODEL. >> I have two database, one for “staffsite" and one for “website". Since >> “staffsite" need to access Member’s data, so I implement a db router for >> “staffsite". Whenever I need to access Member’s data in >> “staffsite", router will route me to the correct db (You can say that I >> use db to link “staffsite” and “website” together.) >> member app need to install in both “staffsite" and “website", so I will >> have two copy of member app. This is not good for maintenance. Whenever I >> change the code in member app, I need to copy and paste to another one. I >> extract member app and create a standalone app, and after that I can use >> pip install -e to install member app for both project and I only have to >> keep one copy of code. >> >> This design is work, but I want to know whether there is a better way to >> meet the requirements. >> > > Yes, this approach will work. It might be the best approach if you really > do have 2 completely different sites (even different URLs) that share a > little bit of data. > > However, if you've got a single site that just has 2 different types of > users, an approach that might be easier to manage is write a common "user" > model, and then have different profiles for Admin and Normal users. > > This captures the idea that a User isn't something that contains > specialised information - it's purely a container to hold a username and > password. Once a user has logged in, if there is specialist information > needed, then you put that information onto a profile model that has a > foreign key to the user model. > > Think of it this way - regardless of whether someone is an staff member or > a normal user, they're still a person. The User model should be capturing > the fact that they're a person; then, you build other data models to store > information about their other roles. > > The added advantage of this approach is that a single User can be both an > Staff member and a Regular user, as needed - because they have a single > User, but 2 different profiles. > > I hope this helps. > > Yours > Russ Magee %-) > > -- > You received this message because you are subscribed to the Google Groups > "Django users" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To post to this group, send email to [email protected]. > Visit this group at http://groups.google.com/group/django-users. > To view this discussion on the web visit > https://groups.google.com/d/msgid/django-users/CAJxq848vK8wqX6viT2mdkz4chcP3MfjOq7mceH%2Bss_9S3dWmXA%40mail.gmail.com > <https://groups.google.com/d/msgid/django-users/CAJxq848vK8wqX6viT2mdkz4chcP3MfjOq7mceH%2Bss_9S3dWmXA%40mail.gmail.com?utm_medium=email&utm_source=footer> > . > > For more options, visit https://groups.google.com/d/optout. > I'll be facing the exact same problems with a site I am developing at the moment. Russ, your solution isn't that for the old user profile way of thinking, that is deprecated today (user.get_profile())? Or are you using the same idea in a different way? Regards, Andréas -- You received this message because you are subscribed to the Google Groups "Django users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/django-users. To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/CALXYUb%3DOaCOD3aDsvM8PepY3mukejZu9TmMAGvYAii3wbKZmbw%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.

