diff --git a/rest_framework/permissions.py b/rest_framework/permissions.py index 3a8c580646..f880fcc254 100644 --- a/rest_framework/permissions.py +++ b/rest_framework/permissions.py @@ -48,39 +48,37 @@ def __call__(self, *args, **kwargs): class AND: - def __init__(self, op1, op2): - self.op1 = op1 - self.op2 = op2 + def __init__(self, *args): + self.permissions = args def has_permission(self, request, view): - return ( - self.op1.has_permission(request, view) and - self.op2.has_permission(request, view) - ) + for permission in self.permissions: + if not permission.has_permission(request, view): + return False + return True def has_object_permission(self, request, view, obj): - return ( - self.op1.has_object_permission(request, view, obj) and - self.op2.has_object_permission(request, view, obj) - ) + for permission in self.permissions: + if not permission.has_object_permission(request, view, obj): + return False + return True class OR: - def __init__(self, op1, op2): - self.op1 = op1 - self.op2 = op2 + def __init__(self, *args): + self.permissions = args def has_permission(self, request, view): - return ( - self.op1.has_permission(request, view) or - self.op2.has_permission(request, view) - ) + for permission in self.permissions: + if permission.has_permission(request, view): + return True + return False def has_object_permission(self, request, view, obj): - return ( - self.op1.has_object_permission(request, view, obj) or - self.op2.has_object_permission(request, view, obj) - ) + for permission in self.permissions: + if permission.has_object_permission(request, view, obj): + return True + return False class NOT: