示例#1
0
 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
示例#2
0
 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
示例#3
0
 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
示例#4
0
 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
示例#5
0
    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)})
示例#6
0
 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})
示例#7
0
 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)})
示例#8
0
 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})
示例#9
0
 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)})
示例#10
0
 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)})
示例#11
0
 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)})
示例#12
0
 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
示例#13
0
 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