Prechádzať zdrojové kódy

developer permission

walle 6 rokov pred
rodič
commit
8cefbe5c57

+ 0 - 1
walle/model/environment.py

@@ -52,7 +52,6 @@ class EnvironmentModel(Model):
         count = query.count()
         data = query.order_by(EnvironmentModel.id.desc()).offset(int(size) * int(page)).limit(size).all()
 
-        current_app.logger.info(data)
         env_list = []
         for p in data:
             item = p[0].to_json()

+ 12 - 0
walle/model/member.py

@@ -87,6 +87,18 @@ class MemberModel(SurrogatePK, Model):
 
         return projects
 
+    def project_master(self):
+        filters = {
+            MemberModel.status.notin_([self.status_remove]),
+            MemberModel.source_type == self.source_type_project,
+            MemberModel.user_id == current_user.id,
+            MemberModel.access_level == MASTER,
+        }
+        query = self.query.filter(*filters)
+        projects = query.with_entities(MemberModel.source_id).all()
+        current_app.logger.error(projects)
+        return [project[0] for project in projects]
+
     def update_group(self, members, group_name=None):
         SpaceModel = model.space.SpaceModel
 

+ 5 - 4
walle/model/task.py

@@ -189,11 +189,12 @@ class TaskModel(SurrogatePK, Model):
         return item
 
     def enable(self):
+        is_project_master = self.project_id in session['project_master']
         return {
-            'enable_update': (permission.enable_uid(self.user_id) or permission.role_upper_developer()) and (self.status in [self.status_new, self.status_reject]),
-            'enable_delete': (permission.enable_uid(self.user_id) or permission.role_upper_developer()) and (self.status in [self.status_new, self.status_pass, self.status_reject]),
+            'enable_update': (permission.enable_uid(self.user_id) or permission.role_upper_developer() or is_project_master) and (self.status in [self.status_new, self.status_reject]),
+            'enable_delete': (permission.enable_uid(self.user_id) or permission.role_upper_developer() or is_project_master) and (self.status in [self.status_new, self.status_pass, self.status_reject]),
             'enable_create': False,
-            'enable_online': (permission.enable_uid(self.user_id) or permission.role_upper_developer()) and (self.status in [self.status_pass, self.status_fail, self.status_doing]),
-            'enable_audit': permission.role_upper_developer() and (self.status in [self.status_new]),
+            'enable_online': (permission.enable_uid(self.user_id) or permission.role_upper_developer() or is_project_master) and (self.status in [self.status_pass, self.status_fail, self.status_doing]),
+            'enable_audit': (permission.role_upper_developer() or is_project_master) and (self.status in [self.status_new]),
             'enable_block': False,
         }

+ 4 - 2
walle/model/user.py

@@ -189,12 +189,14 @@ class UserModel(UserMixin, SurrogatePK, Model):
         if current_user.last_space and current_user.last_space not in spaces.keys():
             raise WalleError(Code.space_error)
 
+        # 4.项目管理员
+        MemberModel = model.member.MemberModel()
+        session['project_master'] = MemberModel.project_master()
+
         session['space_id'] = current_user.last_space
         session['space_info'] = spaces[current_user.last_space]
         session['space_list'] = spaces.values()
 
-        current_app.logger.info('============ SecurityResource.__init__ ============')
-
     @classmethod
     def avatar_url(cls, avatar):
         avatar = avatar if avatar else 'default.jpg'

+ 3 - 2
walle/service/deployer.py

@@ -368,11 +368,10 @@ class Deployer:
             result = self.local.run(command, wenv=self.config())
 
             # TODO 三种可能: false, error, success
-
             branches = result.stdout.strip().split('\n')
             # 去除 origin/HEAD -> 当前指向
             # 去除远端前缀
-            branches = [branch.strip().lstrip('origin/') for branch in branches if not branch.startswith('origin/HEAD')]
+            branches = [branch.strip().lstrip('origin/') for branch in branches if not branch.strip().startswith('origin/HEAD')]
             return branches
 
         return None
@@ -387,10 +386,12 @@ class Deployer:
             # TODO 10是需要前端传的
             command = 'git log -10 --pretty="%h #_# %an #_# %s"'
             result = self.local.run(command, wenv=self.config())
+            current_app.logger.info(result.stdout.strip())
             commit_list = result.stdout.strip().split('\n')
             commits = []
             for commit in commit_list:
                 commit_dict = commit.split(' #_# ')
+                current_app.logger.info(commit_dict)
                 commits.append({
                     'id': commit_dict[0],
                     'name': commit_dict[1],

+ 5 - 2
walle/service/waller.py

@@ -35,7 +35,9 @@ class Waller(Connection):
             if sudo:
                 result = super(Waller, self).sudo(command, pty=False, **kwargs)
             else:
-                result = super(Waller, self).run(command, pty=True, hide='both', warn=True, **kwargs)
+                result = super(Waller, self).run(command, pty=False, warn=True, **kwargs)
+            # import re
+            # result.stdout = re.sub('\x1B\[[0-9;]*[mGK]', '', result.stdout.strip())
 
             if result.failed:
                 exitcode, stdout, stderr = result.exited, '', result.stdout
@@ -45,7 +47,8 @@ class Waller(Connection):
             message = 'task_id=%s, host:%s command:%s status:%s, success:%s, error:%s' % (
                 wenv['task_id'], self.host, command, exitcode, stdout, stderr
             )
-            current_app.logger.error(result)
+            current_app.logger.error(result.stdout.strip())
+            current_app.logger.error(result.stderr.strip())
             # TODO
             ws_dict = {
                 'user': self.user,