Django-guardian: рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдПрдХреАрдХрд░рдг: рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде

рдХреЛ рдирд┐рд░реНрдорд┐рдд 16 рдордИ 2017  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: django-guardian/django-guardian

рдХреНрдпрд╛ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдПрдХреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЧреЛрдЪрд╛ рд╣реИ? рдореИрдВ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдореЗрдВ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП .has_perm рдЪреЗрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реВрдВ, рд▓реЗрдХрд┐рди рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рд╕рд╛рдЗрдЯ 403 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдордирд╛ рдХрд░ рджреЗрддреА рд╣реИред рдореИрдВрдиреЗ рдбреЙрдХреНрд╕ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЕрдкрдиреЗ admin.py рдкреЗрдЬ рдореЗрдВ GuardedModelAdmin рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЛрдб: (рдореИрдВ рдкреНрд░рддреНрдпреЗрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреА рд▓реВрдкрд┐рдВрдЧ рдорд╛рди рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдирд┐рдпрдо рдХреИрд╕реЗ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ; рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗрд╡рд▓ рдЗрд╕реЗ рдПрдХрд▓ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдХрд░рддреЗ рд╣реБрдП рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ)

for user in User.objects.all():
    for person in Person.objects.all():
        # Only allow view/change/edit/add for people in the same section as the user.
        if person.section == user.person.section:
            UserObjectPersmission.objects.assign('change_person', user, obj=person)
            UserObjectPersmission.objects.assign('add_person', user, obj=person)
            UserObjectPersmission.objects.assign('delete_person', user, obj=person)

# These checks work as intended, but the admin page doesn't provide links to view/edit Person objects, 
and manually going to the url results in 403: Forbidden.
section_a_user.has_perm('myapp.add_person', section_a_person)  # True
section_a_user.has_perm('myapp.add_person', section_b_person)  # False

рд╕рднреА 6 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдореБрдЭреЗ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдкреИрдирд▓ рдореЗрдВ рд╕рдореВрд╣реЛрдВ рдФрд░ рд╕рджрд╕реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХрд╛рдзрд┐рдХ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

screen shot 2017-11-28 at 09 40 20

рдмреЗрд╣рддрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдиреБрднрд╡ рдмрдирд╛рдПрдВ

рдЕрдЧрд░ рдореИрдВ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╕рдореВрд╣ рдФрд░ рд╕рджрд╕реНрдп рдЬреЛрдбрд╝рддрд╛ рд╣реВрдВ рддреЛ рдпрд╣ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ
screen shot 2017-11-28 at 09 57 16

рд╕рдорд░реНрдерди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж

@ рдПрд▓рди-рдирд╛рд╡рд╛, рдЖрдкрдХреА рд╕рдорд╕реНрдпрд╛ рдЗрд╕ рдореБрджреНрджреЗ рдХреА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдЕрд▓рдЧ рд╕рдорд╕реНрдпрд╛ рд╣реИред

рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдХреИрд╕реЗ рдкреНрд░рдмрдВрдзрд┐рдд рдФрд░ рдкреНрд░рд╢рд╛рд╕рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ?

рд╕рдорд░реНрдерди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж

2017-11-28 16:13 рдЬреАрдПрдордЯреА+01:00 рдПрдбрдо рдбреЛрдмреНрд░рд╛рд╡реА рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com :

@ рдПрд▓рди-рдирд╡рд╛ https://github.com/allan-nava , рдЖрдкрдХреА рд╕рдорд╕реНрдпрд╛ рдПрдХ рдЕрд▓рдЧ рд╣реИ
рдЗрд╕ рдореБрджреНрджреЗ рдореЗрдВ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕рдорд╕реНрдпрд╛ рд╕реЗ рд╕рдорд╕реНрдпрд╛ред

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/django-guardian/django-guardian/issues/506#issuecomment-347554200 ,
рдпрд╛ рдереНрд░реЗрдб рдХреЛ рдореНрдпреВрдЯ рдХрд░реЗрдВ
https://github.com/notifications/unsubscribe-auth/AVdMg8NrGik7wcSewjluFyZtu3qPVyE5ks5s7CL-gaJpZM4NcH1s
.

@ рдПрд▓рди-рдирд╡рд╛, рдЕрдиреНрдп рдореБрджреНрджреЛрдВ рдХреЛ рдЕрд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдЕрд▓рдЧ рдореБрджреНрджрд╛ рдмрдирд╛рдПрдВ рдЬреЛ рдЖрдкрдХреА рд╕рдорд╕реНрдпрд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИрдВред

рдХреНрд╖рдорд╛ рдХрд░реЗрдВ @ рд╡рд┐рдЬреНрдЮрд╛рдкрди-рдПрдо,
рдореИрдВрдиреЗ #536 рдПрдХ рдореБрджреНрджрд╛ рдмрдирд╛рдпрд╛ рд╣реИред
рдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рдХрд┐ рдЬрдм рдмреНрд░реЗрдбрдХреНрд░рдВрдм рд╕рдореВрд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ рддреЛ рдЙрд╕реЗ рдСрдмреНрдЬреЗрдХреНрдЯ (рд╕рдореВрд╣) рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реЛрддреА рд╣реИред рдореИрдВ рдЙрджрд╛рд╣рд░рдг рд╕рдВрд▓рдЧреНрди рдХрд░рддрд╛ рд╣реВрдВ
screen shot 2017-11-28 at 16 46 42

рдирдорд╕реНрддреЗ, рдХреНрдпрд╛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдореБрджреНрджреЗ рдкрд░ рдХреЛрдИ рдЕрдкрдбреЗрдЯ рд╣реИ? рдореБрдЭреЗ рдпрд╣ рднреА рдХрд╛рдо рдирд╣реАрдВ рдорд┐рд▓ рд░рд╣рд╛ рд╣реИред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕