def _user_has_permission(self, target_obj, permission_level): slave_db = get_slave_db() return any([ permission_level.id <= x.get_aclid() for x in self.permissions.using(slave_db).all() if target_obj.id == x.get_objid() ])
def is_permitted(self, target_obj, permission_level, groups=[]): if not groups: slave_db = get_slave_db() groups = self.groups.using(slave_db).all() return (self._user_has_permission(target_obj, permission_level) or self._group_has_permission(target_obj, permission_level, groups))
def _group_has_permission(self, target_obj, permission_level, groups): slave_db = get_slave_db() return any( sum([[ permission_level.id <= x.get_aclid() for x in g.permissions.using(slave_db).all() if target_obj.id == x.get_objid() ] for g in groups], []))
def get(self, request): # set each request parameters to description variables param_entity = request.query_params.get('entity') param_entry = request.query_params.get('entry') param_target_entity = request.query_params.get('target_entity') param_quiet = request.query_params.get('quiet') # validate input parameter if not param_entry: return Response({'result': 'Parameter "entry" is mandatory'}, status=status.HTTP_400_BAD_REQUEST) # declare query to send DB according to input parameters query = Q(name=param_entry, is_active=True) if param_entity: query &= Q(schema__name=param_entity) ret_data = [] slave_db = get_slave_db() for entry in Entry.objects.using(slave_db).filter(query): ret_data.append({ 'id': entry.id, 'entity': { 'id': entry.schema.id, 'name': entry.schema.name }, 'referral': [{ 'id': x.id, 'name': x.name, 'entity': {} if param_quiet else { 'id': x.schema.id, 'name': x.schema.name }, } for x in entry.get_referred_objects( entity_name=param_target_entity)] }) return Response({'result': ret_data}, content_type='application/json; charset=UTF-8')
def test_get_slave_db(self): self.assertIn(get_slave_db(), settings.AIRONE['DB_SLAVES'])