Я нашел 3 разрешения на уровне строк для Django 1.2 +
Может ли кто-нибудь сказать, есть ли какие-либо рекомендации больше, чем другие, каковы их основные различия и т.д.?
Я нашел 3 разрешения на уровне строк для Django 1.2 +
Может ли кто-нибудь сказать, есть ли какие-либо рекомендации больше, чем другие, каковы их основные различия и т.д.?
Я начну с этого, сказав, что мы не используем ни одного из них для разрешения уровня объекта - мы используем наш собственный метод, и я действительно этого не хотел. Если вы вообще можете избежать разрешений на уровне объектов, сделайте это, это боль для организации.
Вот как я оцениваю 3 приложения, которые вы упомянули.
Активное развитие:
API
Вышеуказанные находятся в порядке, кстати.
Я бы рекомендовал опекуна исключительно по API, но тот факт, что он все еще разрабатывается там, где другие обычно не означает большую победу.
Что касается августа '13, django-object-permissions был заменен на django-permission. 3 проекта находятся в активном развитии.
Лично я предпочитаю полномочия или разрешение, которое использует методы проверки разрешений (runtime), а не django-guardian, который использует базу данных для хранения разрешений (прикрепленных к созданию объекта, f.e.).
- EDIT -
Примеры из документов.
joe = User.objects.create(username='joe')
task = Task.objects.create(summary='Some job', content='', reported_by=boss)
joe.has_perm('view_task', task)
>> False
assign_perm('view_task', joe, task)
joe.has_perm('view_task', task)
>> True
Вы назначаете разрешение и храните его в базе данных.
Декларация:
class FlatpagePermission(permissions.BasePermission):
label = 'flatpage_permission'
checks = ('morning_flatpage_check',)
def morning_flatpage_check(self, flatpage):
hour = int(datetime.datetime.now().strftime("%H"))
if hour >= 8 and hour <= 12 and flatpage.url == '/about/':
return True
return False
authority.register(Flatpage, FlatpagePermission)
Использование:
def my_view(request):
check = FlatPagePermission(request.user)
flatpage_object = Flatpage.objects.get(url='/homepage/')
if check.morning_flatpage_check(flatpage=flatpage_object):
print "Yay, you can change *this* flatpage!"
Он также обматывает стандартные разрешения django, но вы можете видеть гибкость в вышеупомянутом пользовательском разрешении, которое -AFAIK- вы не можете сделать в опекуне.
Студент может принадлежать классу (классам).
опекун:
'attend_classroom'
к объекту Student over Classroom.'attend_classroom'
для объекта Студент по классу.'attend_classroom'
разрешение.авторитет:
ClassroomPermission.can_attend_classroom()
, которое будет запрашивать, если Student принадлежит классу.ClassroomPermission.can_attend_classroom()
Власть хранит логику проверки в отдельном файле. Guardian нуждается в разрешениях на подключение/отсоединение, хотя остальная часть кода.