diff --git a/apps/authentication/urls/view_urls.py b/apps/authentication/urls/view_urls.py index 2d0749470..9abd61e3b 100644 --- a/apps/authentication/urls/view_urls.py +++ b/apps/authentication/urls/view_urls.py @@ -55,7 +55,6 @@ urlpatterns = [ path('profile/otp/enable/bind/', users_view.UserOtpEnableBindView.as_view(), name='user-otp-enable-bind'), path('profile/otp/disable/', users_view.UserOtpDisableView.as_view(), name='user-otp-disable'), - path('first-login/', users_view.UserFirstLoginView.as_view(), name='user-first-login'), # openid path('cas/', include(('authentication.backends.cas.urls', 'authentication'), namespace='cas')), diff --git a/apps/jumpserver/views/index.py b/apps/jumpserver/views/index.py index 8f974a483..639f6d683 100644 --- a/apps/jumpserver/views/index.py +++ b/apps/jumpserver/views/index.py @@ -1,4 +1,4 @@ -from django.views.generic import TemplateView +from django.views.generic import View from django.shortcuts import redirect from common.permissions import IsValidUser from common.mixins.views import PermissionsMixin @@ -6,8 +6,7 @@ from common.mixins.views import PermissionsMixin __all__ = ['IndexView'] -class IndexView(PermissionsMixin, TemplateView): - template_name = 'index.html' +class IndexView(PermissionsMixin, View): permission_classes = [IsValidUser] def get(self, request, *args, **kwargs): diff --git a/apps/locale/ja/LC_MESSAGES/django.mo b/apps/locale/ja/LC_MESSAGES/django.mo index 663dad9e1..080e2ab5e 100644 --- a/apps/locale/ja/LC_MESSAGES/django.mo +++ b/apps/locale/ja/LC_MESSAGES/django.mo @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:17e378f009274c169039e815158ea9072ee89811bb27a5b17a628f2066fcfb86 +oid sha256:097c6d06ed8dcf2e1807560b6eb52d98cba31f25fe8d67ce4315668c150ca6b8 size 129989 diff --git a/apps/locale/ja/LC_MESSAGES/django.po b/apps/locale/ja/LC_MESSAGES/django.po index cc8a3b317..757d1e463 100644 --- a/apps/locale/ja/LC_MESSAGES/django.po +++ b/apps/locale/ja/LC_MESSAGES/django.po @@ -3188,7 +3188,7 @@ msgid "Can view audit view" msgstr "監査ビューを表示できます" #: rbac/models/menu.py:17 -msgid "Can view workspace view" +msgid "Can view workbench view" msgstr "ワークスペースビューを表示できます" #: rbac/models/menu.py:18 @@ -3271,7 +3271,7 @@ msgid "Console view" msgstr "コンソールビュー" #: rbac/tree.py:27 -msgid "Workspace view" +msgid "Workbench view" msgstr "ワークスペースビュー" #: rbac/tree.py:28 diff --git a/apps/locale/zh/LC_MESSAGES/django.mo b/apps/locale/zh/LC_MESSAGES/django.mo index 944990cc4..88f701b6b 100644 --- a/apps/locale/zh/LC_MESSAGES/django.mo +++ b/apps/locale/zh/LC_MESSAGES/django.mo @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:51c19db490e2e3a7cc3c3fce33b2e4422239d8c64d591208cadaf062c5ccb0c9 +oid sha256:3d6a0d40534209f3ffab0b0ecfab7ec82f137156fc8e7b19ce1711036d14aeca size 107709 diff --git a/apps/locale/zh/LC_MESSAGES/django.po b/apps/locale/zh/LC_MESSAGES/django.po index 68b8a566c..fb29c7d9c 100644 --- a/apps/locale/zh/LC_MESSAGES/django.po +++ b/apps/locale/zh/LC_MESSAGES/django.po @@ -3151,7 +3151,7 @@ msgid "Can view audit view" msgstr "可以显示审计台" #: rbac/models/menu.py:17 -msgid "Can view workspace view" +msgid "Can view workbench view" msgstr "可以显示工作台" #: rbac/models/menu.py:18 @@ -3233,7 +3233,7 @@ msgid "Console view" msgstr "控制台" #: rbac/tree.py:27 -msgid "Workspace view" +msgid "Workbench view" msgstr "工作台" #: rbac/tree.py:28 diff --git a/apps/perms/api/application/user_permission/mixin.py b/apps/perms/api/application/user_permission/mixin.py index b66788c31..6e8f91090 100644 --- a/apps/perms/api/application/user_permission/mixin.py +++ b/apps/perms/api/application/user_permission/mixin.py @@ -22,7 +22,3 @@ class AppRoleUserMixin(_RoleUserMixin): ('get_tree', 'perms.view_myapps'), ('GET', 'perms.view_myapps'), ) - - def dispatch(self, *args, **kwargs): - with tmp_to_root_org(): - return super().dispatch(*args, **kwargs) \ No newline at end of file diff --git a/apps/perms/api/asset/user_permission/mixin.py b/apps/perms/api/asset/user_permission/mixin.py index e06ec9787..c28da6c2d 100644 --- a/apps/perms/api/asset/user_permission/mixin.py +++ b/apps/perms/api/asset/user_permission/mixin.py @@ -36,7 +36,3 @@ class AssetRoleUserMixin(PermBaseMixin, _RoleUserMixin): ('get_tree', 'perms.view_myassets'), ('GET', 'perms.view_myassets'), ) - - def dispatch(self, *args, **kwargs): - with tmp_to_root_org(): - return super().dispatch(*args, **kwargs) diff --git a/apps/perms/utils/asset/user_permission.py b/apps/perms/utils/asset/user_permission.py index 1ea189230..5baa93d01 100644 --- a/apps/perms/utils/asset/user_permission.py +++ b/apps/perms/utils/asset/user_permission.py @@ -202,7 +202,9 @@ class UserGrantedTreeRefreshController: user = self.user with tmp_to_root_org(): - UserAssetGrantedTreeNodeRelation.objects.filter(user=user).exclude(org_id__in=self.org_ids).delete() + UserAssetGrantedTreeNodeRelation.objects.filter(user=user)\ + .exclude(org_id__in=self.org_ids)\ + .delete() if force or self.have_need_refresh_orgs(): with UserGrantedTreeRebuildLock(user_id=user.id): @@ -219,7 +221,9 @@ class UserGrantedTreeRefreshController: utils = UserGrantedTreeBuildUtils(user) utils.rebuild_user_granted_tree() logger.info( - f'Rebuild user tree ok: cost={time.time() - t_start} user={self.user} org={current_org}') + f'Rebuild user tree ok: cost={time.time() - t_start} ' + f'user={self.user} org={current_org}' + ) class UserGrantedUtilsBase: diff --git a/apps/rbac/builtin.py b/apps/rbac/builtin.py index ce735ce8f..4ce706a46 100644 --- a/apps/rbac/builtin.py +++ b/apps/rbac/builtin.py @@ -5,7 +5,7 @@ from .const import Scope, system_exclude_permissions, org_exclude_permissions # Todo: 获取应该区分 系统用户,和组织用户的权限 # 工作台也区分组织后再考虑 user_perms = ( - ('rbac', 'menupermission', 'view', 'workspace'), + ('rbac', 'menupermission', 'view', 'workbench'), ('rbac', 'menupermission', 'view', 'webterminal'), ('rbac', 'menupermission', 'view', 'filemanager'), ('perms', 'permedasset', 'view,connect', 'myassets'), @@ -17,6 +17,7 @@ user_perms = ( ('ops', 'commandexecution', 'add', 'commandexecution'), ('authentication', 'connectiontoken', 'add', 'connectiontoken'), ('tickets', 'ticket', 'view', 'ticket'), + ('orgs', 'organization', 'view', 'rootorg'), ) auditor_perms = user_perms + ( diff --git a/apps/rbac/migrations/0001_initial.py b/apps/rbac/migrations/0001_initial.py index 5687bf574..d3f94f6f2 100644 --- a/apps/rbac/migrations/0001_initial.py +++ b/apps/rbac/migrations/0001_initial.py @@ -27,7 +27,7 @@ class Migration(migrations.Migration): ], options={ 'verbose_name': 'Menu permission', - 'permissions': [('view_console', 'Can view console view'), ('view_audit', 'Can view audit view'), ('view_workspace', 'Can view workspace view')], + 'permissions': [('view_console', 'Can view console view'), ('view_audit', 'Can view audit view'), ('view_workspace', 'Can view workbench view')], 'default_permissions': [], }, ), diff --git a/apps/rbac/migrations/0005_auto_20220307_1524.py b/apps/rbac/migrations/0005_auto_20220307_1524.py index afc8ea8ba..ba4427709 100644 --- a/apps/rbac/migrations/0005_auto_20220307_1524.py +++ b/apps/rbac/migrations/0005_auto_20220307_1524.py @@ -12,6 +12,6 @@ class Migration(migrations.Migration): operations = [ migrations.AlterModelOptions( name='menupermission', - options={'default_permissions': [], 'permissions': [('view_console', 'Can view console view'), ('view_audit', 'Can view audit view'), ('view_workspace', 'Can view workspace view'), ('view_webterminal', 'Can view web terminal'), ('view_filemanager', 'Can view file manager')], 'verbose_name': 'Menu permission'}, + options={'default_permissions': [], 'permissions': [('view_console', 'Can view console view'), ('view_audit', 'Can view audit view'), ('view_workspace', 'Can view workbench view'), ('view_webterminal', 'Can view web terminal'), ('view_filemanager', 'Can view file manager')], 'verbose_name': 'Menu permission'}, ), ] diff --git a/apps/rbac/migrations/0006_auto_20220310_0616.py b/apps/rbac/migrations/0006_auto_20220310_0616.py index 395b73f03..7e3ba72de 100644 --- a/apps/rbac/migrations/0006_auto_20220310_0616.py +++ b/apps/rbac/migrations/0006_auto_20220310_0616.py @@ -12,6 +12,6 @@ class Migration(migrations.Migration): operations = [ migrations.AlterModelOptions( name='menupermission', - options={'default_permissions': [], 'permissions': [('view_console', 'Can view console view'), ('view_audit', 'Can view audit view'), ('view_workspace', 'Can view workspace view'), ('view_webterminal', 'Can view web terminal'), ('view_filemanager', 'Can view file manager') ], 'verbose_name': 'Menu permission'}, + options={'default_permissions': [], 'permissions': [('view_console', 'Can view console view'), ('view_audit', 'Can view audit view'), ('view_workspace', 'Can view workbench view'), ('view_webterminal', 'Can view web terminal'), ('view_filemanager', 'Can view file manager') ], 'verbose_name': 'Menu permission'}, ), ] diff --git a/apps/rbac/migrations/0008_auto_20220411_1709.py b/apps/rbac/migrations/0008_auto_20220411_1709.py new file mode 100644 index 000000000..319fa5a37 --- /dev/null +++ b/apps/rbac/migrations/0008_auto_20220411_1709.py @@ -0,0 +1,22 @@ +# Generated by Django 3.1.14 on 2022-04-11 09:09 + +from django.db import migrations + + +def migrate_workspace_to_workbench(apps, *args): + model = apps.get_model('auth', 'Permission') + model.objects.filter(codename='view_workspace').delete() + + +class Migration(migrations.Migration): + + dependencies = [ + ('rbac', '0007_auto_20220314_1525'), + ] + + operations = [ + migrations.AlterModelOptions( + name='menupermission', + options={'default_permissions': [], 'permissions': [('view_console', 'Can view console view'), ('view_audit', 'Can view audit view'), ('view_workbench', 'Can view workbench view'), ('view_webterminal', 'Can view web terminal'), ('view_filemanager', 'Can view file manager')], 'verbose_name': 'Menu permission'}, + ), + ] diff --git a/apps/rbac/migrations/0009_auto_20220411_1724.py b/apps/rbac/migrations/0009_auto_20220411_1724.py new file mode 100644 index 000000000..4ffb51068 --- /dev/null +++ b/apps/rbac/migrations/0009_auto_20220411_1724.py @@ -0,0 +1,19 @@ +# Generated by Django 3.1.14 on 2022-04-11 09:24 + +from django.db import migrations + + +def migrate_workspace_to_workbench(apps, *args): + model = apps.get_model('auth', 'Permission') + model.objects.filter(codename='view_workspace').delete() + + +class Migration(migrations.Migration): + + dependencies = [ + ('rbac', '0008_auto_20220411_1709'), + ] + + operations = [ + migrations.RunPython(migrate_workspace_to_workbench) + ] diff --git a/apps/rbac/models/menu.py b/apps/rbac/models/menu.py index 524894664..48538199b 100644 --- a/apps/rbac/models/menu.py +++ b/apps/rbac/models/menu.py @@ -14,7 +14,7 @@ class MenuPermission(models.Model): permissions = [ ('view_console', _('Can view console view')), ('view_audit', _('Can view audit view')), - ('view_workspace', _('Can view workspace view')), + ('view_workbench', _('Can view workbench view')), ('view_webterminal', _('Can view web terminal')), ('view_filemanager', _('Can view file manager')), ] diff --git a/apps/rbac/tree.py b/apps/rbac/tree.py index 5ea43e5ee..dfccafa8f 100644 --- a/apps/rbac/tree.py +++ b/apps/rbac/tree.py @@ -1,7 +1,7 @@ #!/usr/bin/python +import os from collections import defaultdict from typing import Callable -import os from django.utils.translation import gettext_lazy as _, gettext, get_language from django.conf import settings @@ -24,7 +24,7 @@ root_node_data = { # 第二层 view 节点,手动创建的 view_nodes_data = [ {'id': 'view_console', 'name': _('Console view')}, - {'id': 'view_workspace', 'name': _('Workspace view')}, + {'id': 'view_workbench', 'name': _('Workbench view')}, {'id': 'view_audit', 'name': _('Audit view')}, {'id': 'view_setting', 'name': _('System setting')}, {'id': 'view_other', 'name': _('Other')}, @@ -55,8 +55,8 @@ extra_nodes_data = [ {"id": "app_change_plan_node", "name": _("App change auth"), "pId": "accounts"}, {"id": "asset_change_plan_node", "name": _("Asset change auth"), "pId": "accounts"}, {"id": "terminal_node", "name": _("Terminal setting"), "pId": "view_setting"}, - {'id': "my_assets", "name": _("My assets"), "pId": "view_workspace"}, - {'id': "my_apps", "name": _("My apps"), "pId": "view_workspace"}, + {'id': "my_assets", "name": _("My assets"), "pId": "view_workbench"}, + {'id': "my_apps", "name": _("My apps"), "pId": "view_workbench"}, ] # 将 model 放到其它节点下,而不是本来的 app 中 @@ -89,7 +89,7 @@ special_pid_mapper = { 'audits.ftplog': 'terminal', 'perms.view_myassets': 'my_assets', 'perms.view_myapps': 'my_apps', - 'ops.add_commandexecution': 'view_workspace', + 'ops.add_commandexecution': 'view_workbench', 'ops.view_commandexecution': 'audits', "perms.view_mykubernetsapp": "my_apps", "perms.connect_mykubernetsapp": "my_apps", @@ -102,9 +102,9 @@ special_pid_mapper = { "settings.view_setting": "view_setting", "rbac.view_console": "view_console", "rbac.view_audit": "view_audit", - "rbac.view_workspace": "view_workspace", - "rbac.view_webterminal": "view_workspace", - "rbac.view_filemanager": "view_workspace", + "rbac.view_workbench": "view_workbench", + "rbac.view_webterminal": "view_workbench", + "rbac.view_filemanager": "view_workbench", 'tickets.view_ticket': 'tickets' } diff --git a/apps/templates/_base_asset_tree_list.html b/apps/templates/_base_asset_tree_list.html deleted file mode 100644 index a989a4da1..000000000 --- a/apps/templates/_base_asset_tree_list.html +++ /dev/null @@ -1,54 +0,0 @@ -{% extends 'base.html' %} -{% load static %} -{% load i18n %} - -{% block help_message %} -{% endblock %} - -{% block content %} -
- {% trans 'The following graphs describe the percentage of active users per month and assets per user host per month, respectively.' %} -
-- | {% trans 'Hostname' %} | -{% trans 'IP' %} | -{% trans 'System user' %} | - {% if show_actions %} -{% trans 'Action' %} | - {% endif %} -
---|
- - | -{% trans 'Name' %} | -{% trans 'Username' %} | -{% trans 'Role' %} | -{% trans 'User group' %} | -{% trans 'Asset num' %} | -{% trans 'Active' %} | -
---|