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.

Reply via email to