• 1401/05/05

طراحی مدل برای چند کاربر :

با سلام و عرض ادب

چطور میتونم برای پروژه ام چند مدل کاربر با حراز هویت های مختلف طراحی کنم ؟

مدل خود جنگو فقط از یک یوزر پشتیبانی میکنه، میخوام بدونم راهی برای طراحی چندین مدل کاربر هست ؟

(به طور مثال برای سایت یک مدرسه ، یک دانش اموز ، یک معلم، یک مدیر)

دسترسی این ها رو چطور میشه تنظیم کرد ؟

با پرمیشن و گروه ، سفارشی سازی نمیشه کرد ؟

پوزش بابت طولانی شدن سوالم

  • 1401/05/05
  • ساعت 18:27

با سلام.

 

نیازی به طراحی چندین مدل کاربر نیست. می توان هم بر اساس group, permissions این موارد را پیاده سازی کرد و هم اینکه با استفاده از تعریف یک فیلد خاص (مثلا access_level) که دارای مقادیر مختلف هست، سطح دسترسی را تعیین و بر حسب مقدار آن، و با استفاده از پیاده سازی  conditional content ، اجازه انجام عملیات مختلف را به کاربر اعطا یا سلب کرد.

 

موفق باشید.


  • 1401/05/06
  • ساعت 10:48

ببخشید من متوجه نشدم.

یعنی نیازی به اینکه چند مدل کاربر داشته باشیم نیست ؟

با توجه به اینکه یکسری صفحات عمومی هست(یعنی هر سه گروه میتونن ببینن) و بعضی صفحات مخصوص یک گروه خاص

سطح دسترسی رو چطور میتونم محدود کنم ؟

و جسارتا اگر پروژه مشابهی (جهت تفهیم موضوع برای بنده) مد نظر دارید ممنون میشم معرفی بفرمایید


  • 1401/05/06
  • ساعت 12:00

یعنی نیازی به اینکه چند مدل کاربر داشته باشیم نیست ؟

خیر.

 

البته این یک راه برای این کار است و ممکن است استاد و یا سایر دوستان و شما روش بهتری داشته باشید.

 

در هر قسمت از برنامه می توانید از طریق request object به prop های مختلف user دسترسی داشته باشید. با فرض اینکه فیلد access_level برای کاربر تعریف شده باشد و مقادیری مثل: 1 برای مدیران، 2 برای کارمندان و ... داشته باشد:

if request.user.access_level == 1:
	# this is an Admin User ...

حالا می توانید مقدار آنرا از طریق context به template ها انتقال و بر حسب مقدار آن، بخش های مربوطه را در template ها قابل دسترس کنید.

 

و این کنترل، چیزی علاوه بر شرطهایی نظیر:

if request.user.is_superuser or request.user.is_authenticated

خواهد بود و با ترکیب با شرطهای فوق، می توان مساله را حل کرد.

 

 

برای کنترل کاربر، بوسیله گروه ها این نمونه را ببینید:

from django.contrib.auth.models import User, Group

...
...
user = User.objects.get(username="User1")
# or 
# user = request.user.username

# check if user belongs to specified group
if user.groups.filter(name="Admins):
# Allow user access
else:
# Redirect user to somewhere else

 


  • 1401/05/07
  • ساعت 08:45

سلام دوست من

پاسخ دوستمون weby صحیح هستش