mirror of https://github.com/jumpserver/jumpserver
				
				
				
			perf: 修改 rbac tree (#7743)
* perf: 修改 rbac tree * perf: 修改verbose name * fix: 修复系统用户 * fix: 还原 xpack Co-authored-by: ibuler <ibuler@qq.com>pull/7746/head
							parent
							
								
									eb6bddc599
								
							
						
					
					
						commit
						a20884e2ad
					
				| 
						 | 
				
			
			@ -401,7 +401,12 @@ class UserConnectionTokenViewSet(
 | 
			
		|||
 | 
			
		||||
        asset, application, system_user, user = self.get_request_resource(serializer)
 | 
			
		||||
        token, secret = self.create_token(user, asset, application, system_user)
 | 
			
		||||
        return Response({"id": token, 'secret': secret}, status=201)
 | 
			
		||||
        tp = 'app' if application else 'asset'
 | 
			
		||||
        data = {
 | 
			
		||||
            "id": token, 'secret': secret,
 | 
			
		||||
            'type': tp, 'protocol': system_user.protocol
 | 
			
		||||
        }
 | 
			
		||||
        return Response(data, status=201)
 | 
			
		||||
 | 
			
		||||
    def valid_token(self, token):
 | 
			
		||||
        from users.models import User
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -19,6 +19,7 @@ class Migration(migrations.Migration):
 | 
			
		|||
            ],
 | 
			
		||||
            options={
 | 
			
		||||
                'permissions': [('view_resourcestatistics', 'Can view resource statistics')],
 | 
			
		||||
                'verbose_name': 'Common permission'
 | 
			
		||||
            },
 | 
			
		||||
        ),
 | 
			
		||||
    ]
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,6 +4,7 @@ from django.utils.translation import gettext_lazy as _
 | 
			
		|||
 | 
			
		||||
class Permission(models.Model):
 | 
			
		||||
    class Meta:
 | 
			
		||||
        verbose_name = _("Common permission")
 | 
			
		||||
        permissions = [
 | 
			
		||||
            ('view_resourcestatistics', _('Can view resource statistics'))
 | 
			
		||||
        ]
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,3 +1,3 @@
 | 
			
		|||
version https://git-lfs.github.com/spec/v1
 | 
			
		||||
oid sha256:8bd2394fc5d9bb9254965db4273a09d4ddabd8051b4855b9642476ff9cab836b
 | 
			
		||||
size 101898
 | 
			
		||||
oid sha256:8f6c99abd272924bb5008bc55960af43af3b50ee1312c6aeaec48dbe5a31aa5c
 | 
			
		||||
size 102226
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -7,7 +7,7 @@ msgid ""
 | 
			
		|||
msgstr ""
 | 
			
		||||
"Project-Id-Version: JumpServer 0.3.3\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: \n"
 | 
			
		||||
"POT-Creation-Date: 2022-03-02 19:46+0800\n"
 | 
			
		||||
"POT-Creation-Date: 2022-03-07 10:31+0800\n"
 | 
			
		||||
"PO-Revision-Date: 2021-05-20 10:54+0800\n"
 | 
			
		||||
"Last-Translator: ibuler <ibuler@qq.com>\n"
 | 
			
		||||
"Language-Team: JumpServer team<ibuler@qq.com>\n"
 | 
			
		||||
| 
						 | 
				
			
			@ -90,7 +90,7 @@ msgstr "登录复核"
 | 
			
		|||
#: assets/models/cmd_filter.py:30 assets/models/label.py:15 audits/models.py:37
 | 
			
		||||
#: audits/models.py:60 audits/models.py:85 audits/serializers.py:100
 | 
			
		||||
#: authentication/models.py:50 orgs/models.py:196 perms/models/base.py:84
 | 
			
		||||
#: rbac/builtin.py:89 rbac/models/rolebinding.py:33 templates/index.html:78
 | 
			
		||||
#: rbac/builtin.py:99 rbac/models/rolebinding.py:35 templates/index.html:78
 | 
			
		||||
#: terminal/backends/command/models.py:19
 | 
			
		||||
#: terminal/backends/command/serializers.py:12 terminal/models/session.py:42
 | 
			
		||||
#: terminal/notifications.py:88 terminal/notifications.py:136
 | 
			
		||||
| 
						 | 
				
			
			@ -481,15 +481,15 @@ msgstr "Vmware 密码"
 | 
			
		|||
msgid "Number required"
 | 
			
		||||
msgstr "需要为数字"
 | 
			
		||||
 | 
			
		||||
#: assets/api/node.py:58
 | 
			
		||||
#: assets/api/node.py:61
 | 
			
		||||
msgid "You can't update the root node name"
 | 
			
		||||
msgstr "不能修改根节点名称"
 | 
			
		||||
 | 
			
		||||
#: assets/api/node.py:65
 | 
			
		||||
#: assets/api/node.py:68
 | 
			
		||||
msgid "You can't delete the root node ({})"
 | 
			
		||||
msgstr "不能删除根节点 ({})"
 | 
			
		||||
 | 
			
		||||
#: assets/api/node.py:68
 | 
			
		||||
#: assets/api/node.py:71
 | 
			
		||||
msgid "Deletion failed and the node contains assets"
 | 
			
		||||
msgstr "删除失败,节点包含资产"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -595,7 +595,7 @@ msgid "Is active"
 | 
			
		|||
msgstr "激活"
 | 
			
		||||
 | 
			
		||||
#: assets/models/asset.py:222 assets/models/cluster.py:19
 | 
			
		||||
#: assets/models/user.py:222 assets/models/user.py:374
 | 
			
		||||
#: assets/models/user.py:222 assets/models/user.py:377
 | 
			
		||||
msgid "Admin user"
 | 
			
		||||
msgstr "特权用户"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -630,6 +630,10 @@ msgstr "可以测试资产连接性"
 | 
			
		|||
msgid "Can push system user to asset"
 | 
			
		||||
msgstr "可以推送系统用户到资产"
 | 
			
		||||
 | 
			
		||||
#: assets/models/asset.py:360
 | 
			
		||||
msgid "Can match asset"
 | 
			
		||||
msgstr "可以匹配资产"
 | 
			
		||||
 | 
			
		||||
#: assets/models/authbook.py:27
 | 
			
		||||
msgid "AuthBook"
 | 
			
		||||
msgstr "资产账号"
 | 
			
		||||
| 
						 | 
				
			
			@ -744,7 +748,7 @@ msgstr "校验日期"
 | 
			
		|||
 | 
			
		||||
#: assets/models/base.py:177 audits/signal_handlers.py:68
 | 
			
		||||
#: authentication/forms.py:22
 | 
			
		||||
#: authentication/templates/authentication/login.html:151
 | 
			
		||||
#: authentication/templates/authentication/login.html:178
 | 
			
		||||
#: settings/serializers/auth/ldap.py:44 users/forms/profile.py:21
 | 
			
		||||
#: users/templates/users/_msg_user_created.html:13
 | 
			
		||||
#: users/templates/users/user_password_update.html:43
 | 
			
		||||
| 
						 | 
				
			
			@ -933,7 +937,7 @@ msgstr "空"
 | 
			
		|||
msgid "Key"
 | 
			
		||||
msgstr "键"
 | 
			
		||||
 | 
			
		||||
#: assets/models/node.py:547 assets/serializers/node.py:21
 | 
			
		||||
#: assets/models/node.py:547 assets/serializers/node.py:20
 | 
			
		||||
msgid "Full value"
 | 
			
		||||
msgstr "全称"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -949,6 +953,10 @@ msgstr "ssh私钥"
 | 
			
		|||
msgid "Node"
 | 
			
		||||
msgstr "节点"
 | 
			
		||||
 | 
			
		||||
#: assets/models/node.py:562
 | 
			
		||||
msgid "Can match node"
 | 
			
		||||
msgstr "可以匹配节点"
 | 
			
		||||
 | 
			
		||||
#: assets/models/user.py:216
 | 
			
		||||
msgid "Automatic managed"
 | 
			
		||||
msgstr "托管密码"
 | 
			
		||||
| 
						 | 
				
			
			@ -1019,6 +1027,10 @@ msgstr "用户切换"
 | 
			
		|||
msgid "Switch from"
 | 
			
		||||
msgstr "切换自"
 | 
			
		||||
 | 
			
		||||
#: assets/models/user.py:327
 | 
			
		||||
msgid "Can match system user"
 | 
			
		||||
msgstr "可以匹配系统用户"
 | 
			
		||||
 | 
			
		||||
#: assets/models/utils.py:35
 | 
			
		||||
#, python-format
 | 
			
		||||
msgid "%(value)s is not an even number"
 | 
			
		||||
| 
						 | 
				
			
			@ -1120,15 +1132,15 @@ msgstr "应用数量"
 | 
			
		|||
msgid "Gateways count"
 | 
			
		||||
msgstr "网关数量"
 | 
			
		||||
 | 
			
		||||
#: assets/serializers/node.py:18
 | 
			
		||||
#: assets/serializers/node.py:17
 | 
			
		||||
msgid "value"
 | 
			
		||||
msgstr "值"
 | 
			
		||||
 | 
			
		||||
#: assets/serializers/node.py:32
 | 
			
		||||
#: assets/serializers/node.py:31
 | 
			
		||||
msgid "Can't contains: /"
 | 
			
		||||
msgstr "不能包含: /"
 | 
			
		||||
 | 
			
		||||
#: assets/serializers/node.py:42
 | 
			
		||||
#: assets/serializers/node.py:41
 | 
			
		||||
msgid "The same level node name cannot be the same"
 | 
			
		||||
msgstr "同级别节点名字不能重复"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1327,7 +1339,7 @@ msgstr "日志审计"
 | 
			
		|||
 | 
			
		||||
#: audits/models.py:27 audits/models.py:57
 | 
			
		||||
#: authentication/templates/authentication/_access_key_modal.html:65
 | 
			
		||||
#: rbac/tree.py:254 users/templates/users/user_asset_permission.html:128
 | 
			
		||||
#: rbac/tree.py:301 users/templates/users/user_asset_permission.html:128
 | 
			
		||||
#: users/templates/users/user_database_app_permission.html:111
 | 
			
		||||
msgid "Delete"
 | 
			
		||||
msgstr "删除"
 | 
			
		||||
| 
						 | 
				
			
			@ -1381,11 +1393,11 @@ msgstr "文件管理"
 | 
			
		|||
 | 
			
		||||
#: audits/models.py:55
 | 
			
		||||
#: authentication/templates/authentication/_access_key_modal.html:22
 | 
			
		||||
#: rbac/tree.py:251
 | 
			
		||||
#: rbac/tree.py:298
 | 
			
		||||
msgid "Create"
 | 
			
		||||
msgstr "创建"
 | 
			
		||||
 | 
			
		||||
#: audits/models.py:56 rbac/tree.py:253 templates/_csv_import_export.html:18
 | 
			
		||||
#: audits/models.py:56 rbac/tree.py:300 templates/_csv_import_export.html:18
 | 
			
		||||
#: templates/_csv_update_modal.html:6
 | 
			
		||||
#: users/templates/users/user_asset_permission.html:127
 | 
			
		||||
#: users/templates/users/user_database_app_permission.html:110
 | 
			
		||||
| 
						 | 
				
			
			@ -2013,15 +2025,11 @@ msgstr ""
 | 
			
		|||
 | 
			
		||||
#: authentication/models.py:61
 | 
			
		||||
msgid "Connection token"
 | 
			
		||||
msgstr ""
 | 
			
		||||
msgstr "连接Token"
 | 
			
		||||
 | 
			
		||||
#: authentication/models.py:63
 | 
			
		||||
msgid "Can add super connection token"
 | 
			
		||||
msgstr "可以添加 超级连接Token"
 | 
			
		||||
 | 
			
		||||
#: authentication/models.py:64
 | 
			
		||||
msgid "Can view connect token secret"
 | 
			
		||||
msgstr "可以查看 连接Token 密文"
 | 
			
		||||
#: authentication/models.py:67
 | 
			
		||||
msgid "Super connection token"
 | 
			
		||||
msgstr "超级连接Token"
 | 
			
		||||
 | 
			
		||||
#: authentication/notifications.py:19
 | 
			
		||||
msgid "Different city login reminder"
 | 
			
		||||
| 
						 | 
				
			
			@ -2201,22 +2209,22 @@ msgid ""
 | 
			
		|||
"security issues"
 | 
			
		||||
msgstr "如果这次公钥更新不是由你发起的,那么你的账号可能存在安全问题"
 | 
			
		||||
 | 
			
		||||
#: authentication/templates/authentication/login.html:143
 | 
			
		||||
#: authentication/templates/authentication/login.html:170
 | 
			
		||||
msgid "Welcome back, please enter username and password to login"
 | 
			
		||||
msgstr "欢迎回来,请输入用户名和密码登录"
 | 
			
		||||
 | 
			
		||||
#: authentication/templates/authentication/login.html:179
 | 
			
		||||
#: authentication/templates/authentication/login.html:206
 | 
			
		||||
#: users/templates/users/forgot_password.html:15
 | 
			
		||||
#: users/templates/users/forgot_password.html:16
 | 
			
		||||
msgid "Forgot password"
 | 
			
		||||
msgstr "忘记密码"
 | 
			
		||||
 | 
			
		||||
#: authentication/templates/authentication/login.html:186
 | 
			
		||||
#: authentication/templates/authentication/login.html:213
 | 
			
		||||
#: templates/_header_bar.html:83
 | 
			
		||||
msgid "Login"
 | 
			
		||||
msgstr "登录"
 | 
			
		||||
 | 
			
		||||
#: authentication/templates/authentication/login.html:193
 | 
			
		||||
#: authentication/templates/authentication/login.html:220
 | 
			
		||||
msgid "More login options"
 | 
			
		||||
msgstr "更多登录方式"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -2507,7 +2515,11 @@ msgstr "忽略的"
 | 
			
		|||
msgid "discard time"
 | 
			
		||||
msgstr "忽略时间"
 | 
			
		||||
 | 
			
		||||
#: common/models.py:8
 | 
			
		||||
#: common/models.py:7
 | 
			
		||||
msgid "Common permission"
 | 
			
		||||
msgstr "通用权限"
 | 
			
		||||
 | 
			
		||||
#: common/models.py:9
 | 
			
		||||
msgid "Can view resource statistics"
 | 
			
		||||
msgstr "可以查看资源统计"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -2826,12 +2838,12 @@ msgstr "当前组织 ({}) 不能被删除"
 | 
			
		|||
msgid "The organization have resource ({}) cannot be deleted"
 | 
			
		||||
msgstr "组织存在资源 ({}) 不能被删除"
 | 
			
		||||
 | 
			
		||||
#: orgs/apps.py:7
 | 
			
		||||
#: orgs/apps.py:7 rbac/tree.py:170
 | 
			
		||||
msgid "App organizations"
 | 
			
		||||
msgstr "组织管理"
 | 
			
		||||
 | 
			
		||||
#: orgs/mixins/models.py:46 orgs/mixins/serializers.py:25 orgs/models.py:27
 | 
			
		||||
#: orgs/models.py:193 rbac/const.py:7 rbac/models/rolebinding.py:40
 | 
			
		||||
#: orgs/models.py:193 rbac/const.py:7 rbac/models/rolebinding.py:42
 | 
			
		||||
#: rbac/serializers/rolebinding.py:40 tickets/serializers/ticket/ticket.py:77
 | 
			
		||||
msgid "Organization"
 | 
			
		||||
msgstr "组织"
 | 
			
		||||
| 
						 | 
				
			
			@ -2844,7 +2856,7 @@ msgstr "全局组织"
 | 
			
		|||
msgid "Can view root org"
 | 
			
		||||
msgstr "可以查看全局组织"
 | 
			
		||||
 | 
			
		||||
#: orgs/models.py:198 rbac/models/role.py:46 rbac/models/rolebinding.py:36
 | 
			
		||||
#: orgs/models.py:198 rbac/models/role.py:46 rbac/models/rolebinding.py:38
 | 
			
		||||
#: users/models/user.py:560 users/templates/users/_select_user_modal.html:15
 | 
			
		||||
msgid "Role"
 | 
			
		||||
msgstr "角色"
 | 
			
		||||
| 
						 | 
				
			
			@ -3061,27 +3073,27 @@ msgstr "{} 至少有一个系统角色"
 | 
			
		|||
msgid "RBAC"
 | 
			
		||||
msgstr "RBAC"
 | 
			
		||||
 | 
			
		||||
#: rbac/builtin.py:80
 | 
			
		||||
#: rbac/builtin.py:90
 | 
			
		||||
msgid "SystemAdmin"
 | 
			
		||||
msgstr "系统管理员"
 | 
			
		||||
 | 
			
		||||
#: rbac/builtin.py:83
 | 
			
		||||
#: rbac/builtin.py:93
 | 
			
		||||
msgid "SystemAuditor"
 | 
			
		||||
msgstr "系统审计员"
 | 
			
		||||
 | 
			
		||||
#: rbac/builtin.py:86
 | 
			
		||||
#: rbac/builtin.py:96
 | 
			
		||||
msgid "SystemComponent"
 | 
			
		||||
msgstr "系统组件"
 | 
			
		||||
 | 
			
		||||
#: rbac/builtin.py:92
 | 
			
		||||
#: rbac/builtin.py:102
 | 
			
		||||
msgid "OrgAdmin"
 | 
			
		||||
msgstr "组织管理员"
 | 
			
		||||
 | 
			
		||||
#: rbac/builtin.py:95
 | 
			
		||||
#: rbac/builtin.py:105
 | 
			
		||||
msgid "OrgAuditor"
 | 
			
		||||
msgstr "组织审计员"
 | 
			
		||||
 | 
			
		||||
#: rbac/builtin.py:98
 | 
			
		||||
#: rbac/builtin.py:108
 | 
			
		||||
msgid "OrgUser"
 | 
			
		||||
msgstr "组织用户"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -3105,7 +3117,7 @@ msgstr "查看工作台"
 | 
			
		|||
msgid "Permission"
 | 
			
		||||
msgstr "授权"
 | 
			
		||||
 | 
			
		||||
#: rbac/models/role.py:31 rbac/models/rolebinding.py:30
 | 
			
		||||
#: rbac/models/role.py:31 rbac/models/rolebinding.py:32
 | 
			
		||||
msgid "Scope"
 | 
			
		||||
msgstr "范围"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -3125,21 +3137,21 @@ msgstr "系统角色"
 | 
			
		|||
msgid "Organization role"
 | 
			
		||||
msgstr "组织角色"
 | 
			
		||||
 | 
			
		||||
#: rbac/models/rolebinding.py:45
 | 
			
		||||
#: rbac/models/rolebinding.py:47
 | 
			
		||||
msgid "Role binding"
 | 
			
		||||
msgstr "角色绑定"
 | 
			
		||||
 | 
			
		||||
#: rbac/models/rolebinding.py:111
 | 
			
		||||
#: rbac/models/rolebinding.py:113
 | 
			
		||||
msgid ""
 | 
			
		||||
"User last role in org, can not be delete, you can remove user from org "
 | 
			
		||||
"instead"
 | 
			
		||||
msgstr "用户最后一个角色,不能删除,你可以将用户从组织移除"
 | 
			
		||||
 | 
			
		||||
#: rbac/models/rolebinding.py:118
 | 
			
		||||
#: rbac/models/rolebinding.py:120
 | 
			
		||||
msgid "Organization role binding"
 | 
			
		||||
msgstr "组织角色绑定"
 | 
			
		||||
 | 
			
		||||
#: rbac/models/rolebinding.py:132
 | 
			
		||||
#: rbac/models/rolebinding.py:134
 | 
			
		||||
msgid "System role binding"
 | 
			
		||||
msgstr "系统角色绑定"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -3163,59 +3175,63 @@ msgstr "角色显示"
 | 
			
		|||
msgid "Has bound this role"
 | 
			
		||||
msgstr "已经绑定"
 | 
			
		||||
 | 
			
		||||
#: rbac/tree.py:16 rbac/tree.py:17
 | 
			
		||||
#: rbac/tree.py:17 rbac/tree.py:18
 | 
			
		||||
msgid "All permissions"
 | 
			
		||||
msgstr "所有权限"
 | 
			
		||||
 | 
			
		||||
#: rbac/tree.py:24
 | 
			
		||||
#: rbac/tree.py:26
 | 
			
		||||
msgid "Console view"
 | 
			
		||||
msgstr "控制台"
 | 
			
		||||
 | 
			
		||||
#: rbac/tree.py:28
 | 
			
		||||
#: rbac/tree.py:30
 | 
			
		||||
msgid "Workspace view"
 | 
			
		||||
msgstr "工作台"
 | 
			
		||||
 | 
			
		||||
#: rbac/tree.py:32
 | 
			
		||||
#: rbac/tree.py:34
 | 
			
		||||
msgid "Audit view"
 | 
			
		||||
msgstr "安全审计"
 | 
			
		||||
 | 
			
		||||
#: rbac/tree.py:36 settings/models.py:140
 | 
			
		||||
#: rbac/tree.py:38 settings/models.py:140
 | 
			
		||||
msgid "System setting"
 | 
			
		||||
msgstr "系统设置"
 | 
			
		||||
 | 
			
		||||
#: rbac/tree.py:40
 | 
			
		||||
#: rbac/tree.py:42
 | 
			
		||||
msgid "Other"
 | 
			
		||||
msgstr ""
 | 
			
		||||
msgstr "其它"
 | 
			
		||||
 | 
			
		||||
#: rbac/tree.py:59
 | 
			
		||||
#: rbac/tree.py:62
 | 
			
		||||
msgid "Accounts"
 | 
			
		||||
msgstr "账号管理"
 | 
			
		||||
 | 
			
		||||
#: rbac/tree.py:76
 | 
			
		||||
#: rbac/tree.py:79
 | 
			
		||||
msgid "Session audits"
 | 
			
		||||
msgstr "会话审计"
 | 
			
		||||
 | 
			
		||||
#: rbac/tree.py:104
 | 
			
		||||
#: rbac/tree.py:108
 | 
			
		||||
msgid "Cloud import"
 | 
			
		||||
msgstr "云同步"
 | 
			
		||||
 | 
			
		||||
#: rbac/tree.py:109
 | 
			
		||||
#: rbac/tree.py:113
 | 
			
		||||
msgid "Backup account"
 | 
			
		||||
msgstr "备份账号"
 | 
			
		||||
 | 
			
		||||
#: rbac/tree.py:114
 | 
			
		||||
#: rbac/tree.py:118
 | 
			
		||||
msgid "Gather account"
 | 
			
		||||
msgstr "收集账号"
 | 
			
		||||
 | 
			
		||||
#: rbac/tree.py:119
 | 
			
		||||
#: rbac/tree.py:123
 | 
			
		||||
msgid "App change auth"
 | 
			
		||||
msgstr "应用改密"
 | 
			
		||||
 | 
			
		||||
#: rbac/tree.py:124
 | 
			
		||||
#: rbac/tree.py:128
 | 
			
		||||
msgid "Asset change auth"
 | 
			
		||||
msgstr "资产改密"
 | 
			
		||||
 | 
			
		||||
#: rbac/tree.py:252
 | 
			
		||||
#: rbac/tree.py:133
 | 
			
		||||
msgid "Terminal setting"
 | 
			
		||||
msgstr "终端设置"
 | 
			
		||||
 | 
			
		||||
#: rbac/tree.py:299
 | 
			
		||||
msgid "View"
 | 
			
		||||
msgstr "查看"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -6688,6 +6704,9 @@ msgstr "旗舰版"
 | 
			
		|||
msgid "Community edition"
 | 
			
		||||
msgstr "社区版"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Can view connect token secret"
 | 
			
		||||
#~ msgstr "可以查看 连接Token 密文"
 | 
			
		||||
 | 
			
		||||
#~ msgid "AppAsset"
 | 
			
		||||
#~ msgstr "资产管理"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -28,7 +28,7 @@ __all__ = [
 | 
			
		|||
]
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class GrantedApplicationSystemUsersMixin(ListAPIView):
 | 
			
		||||
class BaseGrantedApplicationSystemUsersApi(ListAPIView):
 | 
			
		||||
    serializer_class = serializers.ApplicationSystemUserSerializer
 | 
			
		||||
    only_fields = serializers.ApplicationSystemUserSerializer.Meta.only_fields
 | 
			
		||||
    user: None
 | 
			
		||||
| 
						 | 
				
			
			@ -45,11 +45,11 @@ class GrantedApplicationSystemUsersMixin(ListAPIView):
 | 
			
		|||
        return system_users
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class UserGrantedApplicationSystemUsersApi(RoleAdminMixin, GrantedApplicationSystemUsersMixin):
 | 
			
		||||
class UserGrantedApplicationSystemUsersApi(RoleAdminMixin, BaseGrantedApplicationSystemUsersApi):
 | 
			
		||||
    pass
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class MyGrantedApplicationSystemUsersApi(RoleUserMixin, GrantedApplicationSystemUsersMixin):
 | 
			
		||||
class MyGrantedApplicationSystemUsersApi(RoleUserMixin, BaseGrantedApplicationSystemUsersApi):
 | 
			
		||||
    pass
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -23,6 +23,6 @@ class RoleUserMixin(_RoleUserMixin):
 | 
			
		|||
        ('GET', 'perms.view_myapps'),
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    def get(self, request, *args, **kwargs):
 | 
			
		||||
    def dispatch(self, *args, **kwargs):
 | 
			
		||||
        with tmp_to_root_org():
 | 
			
		||||
            return super().get(request, *args, **kwargs)
 | 
			
		||||
            return super().dispatch(*args, **kwargs)
 | 
			
		||||
| 
						 | 
				
			
			@ -37,10 +37,6 @@ class RoleUserMixin(PermBaseMixin, _RoleUserMixin):
 | 
			
		|||
        ('GET', 'perms.view_myassets'),
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    def get(self, request, *args, **kwargs):
 | 
			
		||||
    def dispatch(self, *args, **kwargs):
 | 
			
		||||
        with tmp_to_root_org():
 | 
			
		||||
            return super().get(request, *args, **kwargs)
 | 
			
		||||
 | 
			
		||||
    def get_queryset(self):
 | 
			
		||||
        with tmp_to_root_org():
 | 
			
		||||
            return super().get_queryset()
 | 
			
		||||
            return super().dispatch(*args, **kwargs)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -78,6 +78,10 @@ only_system_permissions = (
 | 
			
		|||
    ('xpack', 'license', '*', '*'),
 | 
			
		||||
    ('settings', 'setting', '*', '*'),
 | 
			
		||||
    ('terminal', 'terminal', '*', '*'),
 | 
			
		||||
    ('terminal', 'commandstorage', '*', '*'),
 | 
			
		||||
    ('terminal', 'replaystorage', '*', '*'),
 | 
			
		||||
    ('terminal', 'status', '*', '*'),
 | 
			
		||||
    ('terminal', 'task', '*', '*'),
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
only_org_permissions = (
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,6 +11,7 @@ from django.utils.translation import ugettext
 | 
			
		|||
from .models import Permission, ContentType
 | 
			
		||||
from common.tree import TreeNode
 | 
			
		||||
 | 
			
		||||
# 根节点
 | 
			
		||||
root_node_data = {
 | 
			
		||||
    'id': '$ROOT$',
 | 
			
		||||
    'name': _('All permissions'),
 | 
			
		||||
| 
						 | 
				
			
			@ -18,6 +19,7 @@ root_node_data = {
 | 
			
		|||
    'pId': '',
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# 第二层 view 节点,手动创建的
 | 
			
		||||
view_nodes_data = [
 | 
			
		||||
    {
 | 
			
		||||
        'id': 'view_console',
 | 
			
		||||
| 
						 | 
				
			
			@ -41,6 +43,7 @@ view_nodes_data = [
 | 
			
		|||
    }
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
# 第三层 app 节点,定义了父子关系
 | 
			
		||||
app_nodes_data = [
 | 
			
		||||
    {
 | 
			
		||||
        'id': 'users',
 | 
			
		||||
| 
						 | 
				
			
			@ -98,6 +101,7 @@ app_nodes_data = [
 | 
			
		|||
    }
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
# 额外其他节点,可以在不同的层次,需要指定父节点,可以将一些 model 归类到这个节点下面
 | 
			
		||||
extra_nodes_data = [
 | 
			
		||||
    {
 | 
			
		||||
        "id": "cloud_import",
 | 
			
		||||
| 
						 | 
				
			
			@ -131,6 +135,7 @@ extra_nodes_data = [
 | 
			
		|||
    }
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
# 将 model 放到其它节点下,而不是本来的 app 中
 | 
			
		||||
special_model_pid_mapper = {
 | 
			
		||||
    'common.permission': 'view_other',
 | 
			
		||||
    "assets.authbook": "accounts",
 | 
			
		||||
| 
						 | 
				
			
			@ -157,14 +162,19 @@ special_model_pid_mapper = {
 | 
			
		|||
    'terminal.replaystorage': 'terminal_node',
 | 
			
		||||
    'terminal.status': 'terminal_node',
 | 
			
		||||
    'terminal.task': 'terminal_node',
 | 
			
		||||
    'audits.ftplog': 'terminal',
 | 
			
		||||
    'rbac.menupermission': 'view_other',
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
model_verbose_name_mapper = {
 | 
			
		||||
    'orgs.organization': _("App organizations"),
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
xpack_required = [
 | 
			
		||||
    'accounts', 'rbac.'
 | 
			
		||||
xpack_apps = [
 | 
			
		||||
    'xpack', 'tickets',
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
xpack_models = [
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -236,6 +246,17 @@ class PermissionTreeUtil:
 | 
			
		|||
        }
 | 
			
		||||
        return model_counts_mapper, model_check_counts_mapper
 | 
			
		||||
 | 
			
		||||
    @staticmethod
 | 
			
		||||
    def _check_model_xpack(model_id):
 | 
			
		||||
        app, model = model_id.split('.', 2)
 | 
			
		||||
        if settings.XPACK_ENABLED:
 | 
			
		||||
            return True
 | 
			
		||||
        if app in xpack_apps:
 | 
			
		||||
            return False
 | 
			
		||||
        if model_id in xpack_models:
 | 
			
		||||
            return False
 | 
			
		||||
        return True
 | 
			
		||||
 | 
			
		||||
    def _create_models_nodes(self):
 | 
			
		||||
        content_types = ContentType.objects.all()
 | 
			
		||||
        total_counts_mapper, checked_counts_mapper = self._get_model_counts_mapper()
 | 
			
		||||
| 
						 | 
				
			
			@ -248,6 +269,8 @@ class PermissionTreeUtil:
 | 
			
		|||
                continue
 | 
			
		||||
 | 
			
		||||
            model_id = '{}.{}'.format(ct.app_label, ct.model)
 | 
			
		||||
            if not self._check_model_xpack(model_id):
 | 
			
		||||
                continue
 | 
			
		||||
            # 获取 pid
 | 
			
		||||
            app = ct.app_label
 | 
			
		||||
            if special_model_pid_mapper.get(model_id):
 | 
			
		||||
| 
						 | 
				
			
			@ -307,6 +330,8 @@ class PermissionTreeUtil:
 | 
			
		|||
 | 
			
		||||
        for p in self.all_permissions:
 | 
			
		||||
            model_id = f'{p.app}.{p.model}'
 | 
			
		||||
            if not self._check_model_xpack(model_id):
 | 
			
		||||
                continue
 | 
			
		||||
            name = self._get_permission_name(p, content_types_name_mapper)
 | 
			
		||||
            if settings.DEBUG:
 | 
			
		||||
                name += '({})'.format(p.app_label_codename)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue