2017-03-05 19:59:21 +03:00
|
|
|
from django.core.exceptions import PermissionDenied
|
|
|
|
|
|
|
|
|
|
|
|
class AuthNodeMixin():
|
|
|
|
_permission = ''
|
|
|
|
|
|
|
|
@classmethod
|
|
|
|
def get_node(cls, id, context, info):
|
|
|
|
|
|
|
|
def has_perm(object_instance):
|
|
|
|
if context is None:
|
2017-03-07 06:11:49 +03:00
|
|
|
return False
|
2017-03-05 19:59:21 +03:00
|
|
|
if type(context) is dict:
|
|
|
|
user = context.get('user', None)
|
|
|
|
if user is None:
|
2017-03-07 06:11:49 +03:00
|
|
|
return False
|
2017-03-05 19:59:21 +03:00
|
|
|
else:
|
|
|
|
user = context.user
|
|
|
|
if user.is_authenticated() is False:
|
2017-03-07 06:11:49 +03:00
|
|
|
return False
|
2017-03-05 19:59:21 +03:00
|
|
|
|
|
|
|
if type(cls._permission) is tuple:
|
|
|
|
for permission in cls._permission:
|
|
|
|
if not user.has_perm(permission):
|
|
|
|
return False
|
|
|
|
if type(cls._permission) is str:
|
|
|
|
if not user.has_perm(cls._permission):
|
|
|
|
return False
|
|
|
|
return True
|
|
|
|
|
|
|
|
try:
|
|
|
|
object_instance = cls._meta.model.objects.get(id=id)
|
|
|
|
except cls._meta.model.DoesNotExist:
|
|
|
|
return None
|
|
|
|
|
|
|
|
if has_perm(object_instance):
|
|
|
|
return object_instance
|
|
|
|
return PermissionDenied('Permission Denied')
|
|
|
|
|
|
|
|
|
|
|
|
class AuthMutationMixin():
|
|
|
|
_permission = ''
|
|
|
|
|
|
|
|
@classmethod
|
|
|
|
def has_permision(cls, context):
|
2017-03-08 05:09:34 +03:00
|
|
|
if context is None:
|
|
|
|
return PermissionDenied('Permission Denied')
|
2017-03-05 19:59:21 +03:00
|
|
|
if type(context) is dict:
|
|
|
|
user = context.get('user', None)
|
|
|
|
if user is None:
|
|
|
|
return PermissionDenied('Permission Denied')
|
|
|
|
else:
|
|
|
|
user = context.user
|
|
|
|
if user.is_authenticated() is False:
|
|
|
|
return PermissionDenied('Permission Denied')
|
|
|
|
|
|
|
|
if type(cls._permission) is tuple:
|
|
|
|
for permission in cls._permission:
|
|
|
|
if not user.has_perm(permission):
|
|
|
|
return PermissionDenied('Permission Denied')
|
|
|
|
return True
|
|
|
|
if type(cls._permission) is str:
|
|
|
|
if user.has_perm(cls._permission):
|
|
|
|
return True
|
|
|
|
return PermissionDenied('Permission Denied')
|