def generate_readable_permission_json(self, group=None): permission_dict = {} for perm in PROJECT_PERMISSIONS: if Role.testBit(group.map, PROJECT_PERMISSIONS.index(perm)): permission_dict[perm] = 1 else: permission_dict[perm] = 0 return permission_dict
def generate_readable_permission_json(self, role=None): permission_dict = {} for perm in PROJECT_PERMISSIONS: if Role.testBit(role.map, PROJECT_PERMISSIONS.index(perm)): permission_dict[perm] = 1 else: permission_dict[perm] = 0 return permission_dict
def generate_readable_permission_json(self, permission=None): permission_dict = {} for perm in PROJECT_PERMISSIONS: if ProjectPermission.testBit(permission.map, PROJECT_PERMISSIONS.index(perm)): permission_dict[perm] = 1 else: permission_dict[perm] = 0 return permission_dict
def post(self, *args, **kwargs): ''' { projectId : 1, permissions: {'can_edit_story': 1, 'can_delete_story'; 0 ..}, role: admin project_permalink: somesh/clearsoup } ''' project_id = self.get_argument('projectId', None) owner = self.get_argument('owner', None) project_name = self.get_argument('project_name', None) project_permalink = self.get_argument('project_pemalink', None) role = self.get_argument('role') project = None response = {} if project_id: project = self.get_valid_project(project_id) elif owner and project_name: permalink = owner + '/' + project_name project = self.get_valid_project(project_id, permalink) elif project_permalink: project = self.get_valid_project(project_id=None, permalink=project_permalink) else: self.send_error(400) if self.current_user not in project.members: raise HTTPError(404, **{'reason': 'Project not found'}) if role == 'admin': self.send_error(400) else: try: role = Role.objects.get(role=role, project=project) self.data['permissions'] = ast.literal_eval(self.data['permissions']) for key, value in self.data['permissions'].iteritems(): position = PROJECT_PERMISSIONS.index(key) test_bit = Role.testBit(role.map, position) if value == 1: if not test_bit: new_map = Role.toggleBit(role.map, position) role.update(set__map=new_map) elif value == 0: if test_bit: new_map = Role.toggleBit(role.map, position) role.update(set__map=new_map) permission_dict = self.generate_readable_permission_json(role) response = {'permission_dict' : permission_dict, 'permission_object': role.to_json()} self.write(response) except Role.DoesNotExist, error: raise HTTPError(404, **{'reason': self.error_message(error)})
def check_permission(self, project, value): team = None try: team = Team.objects.get(project=project, user=self.current_user) permission_flag = False if Role.testBit(team.role.map, PROJECT_PERMISSIONS.index(value)): permission_flag = True return permission_flag except Team.DoesNotExist: msg = 'Not authorized to perform this action' raise HTTPError(500, **{'reason': msg})
def post(self, *args, **kwargs): ''' Modify a group. { projectId : 1, permissions: {'can_edit_story': 1, 'can_delete_story'; 0 ..}, name: group name, project_permalink: project.permalink, roles: [a, b, c] send this set of roles always, even if there is no change in the role list. It will help in not checking for a difference. } ''' project_id = self.get_argument('projectId', None) owner = self.get_argument('owner', None) project_name = self.get_argument('project_name', None) project_permalink = self.get_argument('project_pemalink', None) name = self.get_argument('name') roles = self.get_argument('roles') permission_dict = ast.literal_eval(self.get_argument('permissions')) self.data.update({'permissions':permission_dict}) project = None if project_id: project = self.get_valid_project(project_id) elif owner and project_name: permalink = owner + '/' + project_name project = self.get_valid_project(project_id, permalink) elif project_permalink: project = self.get_valid_project(project_id=None, permalink=project_permalink) else: self.send_error(400) try: group = Group.objects.get(name=name, project=project) if roles: roles = ast.literal_eval(roles) group.update(set__roles=list(roles)) for key, value in self.data['permissions'].iteritems(): position = PROJECT_PERMISSIONS.index(key) test_bit = Group.testBit(group.map, position) if value == 1: if not test_bit: new_map = Group.toggleBit(group.map, position) group.update(set__map=new_map) elif value == 0: if test_bit: new_map = Group.toggleBit(group.map, position) group.update(set__map=new_map) permission_dict = self.generate_readable_permission_json(group) response = {'permission_dict' : permission_dict, 'group': group.to_json()} except Group.DoesNotExist, error: raise HTTPError(404, **{'reason': self.error_message(error)})
def check_permission(self, project, value): team = None try: team = Team.objects.get(project=project, user=self.current_user) permission_flag = False if Role.testBit(team.role.map, PROJECT_PERMISSIONS.index(value)): permission_flag = True return permission_flag except Team.DoesNotExist: msg = 'Not permitted to perform this action' raise HTTPError(500, **{'reason':msg})
def put(self, *args, **kwargs): ''' create a group { projectId : 1, permissions: {'can_edit_story': 1, 'can_delete_story'; 0 ..}, name: group name, project_permalink: project.permalink } ''' project_id = self.get_argument('projectId', None) owner = self.get_argument('owner', None) project_name = self.get_argument('project_name', None) project_permalink = self.get_argument('project_pemalink', None) name = self.get_argument('name') permission_dict = ast.literal_eval(self.get_argument('permissions')) self.data['permissions'] = permission_dict project = None if project_id: project = self.get_valid_project(project_id) elif owner and project_name: permalink = owner + '/' + project_name project = self.get_valid_project(project_id, permalink) elif project_permalink: project = self.get_valid_project(project_id=None, permalink=project_permalink) else: self.send_error(400) try: group = Group.objects.get(name=name, project=project) raise HTTPError(404, **{'reason': 'Another group with this name already exists'}) except Group.DoesNotExist: group = Group(name=name, project=project, created_by=self.current_user, updated_by=self.current_user) group.save() map_str = ['0'] * len(PROJECT_PERMISSIONS) for key, value in self.data['permissions'].iteritems(): position = PROJECT_PERMISSIONS.index(key) map_str[position] = str(value) map_str = "".join(map_str) group.update(set__map=int(map_str, 2)) permission_dict = self.generate_readable_permission_json(group) response = {'permission_dict' : permission_dict, 'group': group.to_json()} self.write(response) except Group.DoesNotExist, error: raise HTTPError(404, **{'reason': self.error_message(error)})
def post(self, *args, **kwargs): ''' { projectId : 1, permissions: {'can_edit_story': 1, 'can_delete_story'; 0 ..}, username: somesh } ''' organization = kwargs.get('organization', None) org = self.validate_request(organization) project_id = self.data.get('projectId', None) username = self.data.get('username', None) if not username or not project_id: self.send_error(404) user = self.get_user_object(username) if org not in user.belongs_to: self.send_error(404) project = self.get_project_object(project_id, org) try: permission = ProjectPermission.objects.get(user=user, project=project) for key, value in self.data['permissions'].iteritems(): position = PROJECT_PERMISSIONS.index(key) test_bit = ProjectPermission.testBit(permission.map, position) if value == 1: if not test_bit: new_map = ProjectPermission.toggleBit( permission.map, position) permission.update(set__map=new_map) elif value == 0: if test_bit: new_map = ProjectPermission.toggleBit( permission.map, position) permission.update(set__map=new_map) permission_dict = self.generate_readable_permission_json( permission) response = { 'permission_dict': permission_dict, 'permission_object': permission.to_json() } self.write(response) except ProjectPermission.DoesNotExist, error: raise HTTPError(404, **{'reason': self.error_message(error)})
def post(self, *args, **kwargs): ''' { projectId : 1, permissions: {'can_edit_story': 1, 'can_delete_story'; 0 ..}, username: somesh } ''' organization = kwargs.get('organization', None) org = self.validate_request(organization) project_id = self.data.get('projectId', None) username = self.data.get('username', None) if not username or not project_id: self.send_error(404) user = self.get_user_object(username) if org not in user.belongs_to: self.send_error(404) project = self.get_project_object(project_id, org) try: permission = ProjectPermission.objects.get(user=user, project=project) for key, value in self.data['permissions'].iteritems(): position = PROJECT_PERMISSIONS.index(key) test_bit = ProjectPermission.testBit(permission.map, position) if value == 1: if not test_bit: new_map = ProjectPermission.toggleBit(permission.map, position) permission.update(set__map=new_map) elif value == 0: if test_bit: new_map = ProjectPermission.toggleBit(permission.map, position) permission.update(set__map=new_map) permission_dict = self.generate_readable_permission_json(permission) response = {'permission_dict' : permission_dict, 'permission_object': permission.to_json()} self.write(response) except ProjectPermission.DoesNotExist, error: raise HTTPError(404, **{'reason': self.error_message(error)})
def check_permission(self, permission): permission_flag = False if Role.testBit(permission.map, PROJECT_PERMISSIONS.index('can_delete_task')): permission_flag = True return permission_flag