Skip to content

Commit

Permalink
Merge pull request #1309 from longguikeji/release-2.5.x
Browse files Browse the repository at this point in the history
Release 2.5.17
  • Loading branch information
notevery authored Sep 23, 2022
2 parents 293a3ef + 53ec765 commit 10847a6
Show file tree
Hide file tree
Showing 28 changed files with 575 additions and 30 deletions.
5 changes: 4 additions & 1 deletion api/v1/pages/__init__.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
from api.v1.pages import extension_manage
from . import (
user_manage,
desktop,
Expand All @@ -12,7 +13,8 @@
permission_manage,
platform_admin,
tenant_manage,
message
message,
extension_manage
)
from arkid.core import routers

Expand All @@ -33,5 +35,6 @@
charts_manage.router,
tenant_manage.router,
platform_admin.router,
extension_manage.router,
]
)
13 changes: 13 additions & 0 deletions api/v1/pages/extension_manage/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
from arkid.core import routers
from arkid.core.translation import gettext_default as _
from . import extension_admin,extension_manage

router = routers.FrontRouter(
path='extension_manage',
name=_('插件管理'),
icon='extension',
children=[
extension_manage.router,
extension_admin.router
]
)
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
from arkid.core.translation import gettext_default as _

tag = 'extension_admin'
name = '平台插件'
name = '平台插件管理'


page = pages.TabsPage(tag=tag, name=name)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@
from platform import platform
from arkid.core import routers, pages, actions
from arkid.core.translation import gettext_default as _
from ..platform_admin.extension_admin import markdown_page
from .extension_admin import markdown_page

tag = 'tenant_extension_manage'
name = '插件管理'
name = '租户插件管理'


page = pages.TabsPage(tag=tag, name=name)
Expand Down Expand Up @@ -47,7 +47,7 @@
path=tag,
name=name,
page=page,
icon='list',
icon='extension',
)

platform_extension_page.create_actions(
Expand Down
2 changes: 1 addition & 1 deletion api/v1/pages/mine/switch_tenant.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
from arkid.core import actions, pages, routers

tag = "mine_switch_tenant"
name = _("切换租户")
name = _("Switch Tenant", "切换租户")

page = pages.CardsPage(
tag=tag,
Expand Down
4 changes: 2 additions & 2 deletions api/v1/pages/platform_admin/__init__.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
from ..extension_manage import extension_admin
from arkid.core import routers
from arkid.core.translation import gettext_default as _
from . import extension_admin,language_admin,tenant_admin, platform_config
from . import language_admin,tenant_admin, platform_config

router = routers.FrontRouter(
path='platform_admin',
name=_('平台管理'),
icon='platform',
children=[
extension_admin.router,
language_admin.router,
tenant_admin.router,
platform_config.router,
Expand Down
3 changes: 1 addition & 2 deletions api/v1/pages/tenant_manage/__init__.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from arkid.core import routers
from arkid.core.translation import gettext_default as _
from . import center_arkid,child_manager,tenant_config,extension_manage,front_theme
from . import center_arkid,child_manager,tenant_config,front_theme

router = routers.FrontRouter(
path='tenant_manage',
Expand All @@ -10,7 +10,6 @@
tenant_config.router,
child_manager.router,
front_theme.router,
extension_manage.router,
center_arkid.router
]
)
2 changes: 1 addition & 1 deletion api/v1/schema/mine.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ class MinePermissionListSchemaOut(Schema):
operation_id: str = Field(default='', title=_("操作ID"))
name: str
# app_name: str = Field(default=None, alias="app.name", title=_("应用"))
category: str
category: str = Field(title=_("分类"),notranslation=True)
sort_id: int = Field(hidden=True)
in_current: bool = Field(item_action={"path":"/api/v1/mine/tenant/{tenant_id}/permissions/{permission_id}/add_permisssion", "method":actions.FrontActionMethod.GET.value, "close": False})
# is_system: bool
Expand Down
4 changes: 2 additions & 2 deletions api/v1/schema/permission.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ class PermissionsListSchemaOut(ModelSchema):
app_name: str = Field(default=None, alias="app.name", title=_("应用"))
sort_id: int = Field(hidden=True)
# is_open: bool = Field(item_action={"path":"/api/v1/tenant/{tenant_id}/permission/{id}/toggle_open", "method":actions.FrontActionMethod.POST.value}, title=_("是否授权给其它租户"))
category: str = Field(title=_("分类"))
category: str = Field(title=_("分类"),notranslation=True)
operation_id: str = Field(default='', title=_("操作ID"))

class Config:
Expand All @@ -40,7 +40,7 @@ class AppPermissionsItemSchemaOut(Schema):
name: str = Field(title=_("名称"))
app_name: str = Field(default=None, alias='app.name', title=_("应用"))
sort_id: int = Field(hidden=True)
category: str = Field(title=_("分类"))
category: str = Field(title=_("分类"),notranslation=True)


class AppPermissionsListSchemaOut(ResponseSchema):
Expand Down
1 change: 1 addition & 0 deletions api/v1/schema/permission_group.py
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,7 @@ class PermissionListSchemaOut(Schema):
id: UUID = Field(title=_("id"))
name: str = Field(title=_("名称"))
is_open: bool = Field(item_action={"path":"/api/v1/tenant/{tenant_id}/permission/{id}/toggle_open", "method":actions.FrontActionMethod.POST.value}, title=_("是否授权给其它租户"))
is_open_other_user: bool = Field(item_action={"path":"/api/v1/tenant/{tenant_id}/permission/{id}/toggle_other_user_open", "method":actions.FrontActionMethod.POST.value}, title=_("是否租户内所有人可见"))
is_system: bool = Field(title=_("是否是系统权限 "))
# class Config:
# model = SystemPermission
Expand Down
6 changes: 6 additions & 0 deletions api/v1/schema/user_group.py
Original file line number Diff line number Diff line change
Expand Up @@ -125,3 +125,9 @@ class UserGroupExcludeUsersItemOut(Schema):
id: UUID = Field(default=None)
username: str
avatar: str = Field(default=None)

class UserGroupExcludeUsersFilter(Schema):

username:Optional[str] = Field(
title=_("用户名")
)
1 change: 1 addition & 0 deletions api/v1/views/extension.py
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@ class Config:
)
is_allow_use_platform_config: bool = Field(
title='是否允许租户使用平台配置',
hidden=True,
item_action={
"path":"/api/v1/extensions/{id}/use_platform_config/toggle/",
"method":actions.FrontActionMethod.POST.value
Expand Down
85 changes: 84 additions & 1 deletion api/v1/views/permission.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,8 @@
REMOVE_USER_SYSTEM_PERMISSION, REMOVE_USER_APP_PERMISSION, OPEN_APP_PERMISSION,
OPEN_SYSTEM_PERMISSION, CLOSE_SYSTEM_PERMISSION, CLOSE_APP_PERMISSION,
ADD_USER_MANY_PERMISSION, ADD_USERGROUP_MANY_PERMISSION, REMOVE_USERGROUP_SYSTEM_PERMISSION,
REMOVE_USERGROUP_APP_PERMISSION,
REMOVE_USERGROUP_APP_PERMISSION, OPEN_OTHER_USER_APP_PERMISSION, OPEN_OTHER_USER_SYSTEM_PERMISSION,
CLOSE_OTHER_USER_SYSTEM_PERMISSION, CLOSE_OTHER_USER_APP_PERMISSION,
)
from arkid.core.constants import NORMAL_USER, TENANT_ADMIN, PLATFORM_ADMIN
from api.v1.schema.permission import *
Expand Down Expand Up @@ -554,5 +555,87 @@ def permission_toggle_open(request, tenant_id: str, permission_id: str):
else:
dispatch_event(Event(tag=OPEN_APP_PERMISSION, tenant=request.tenant, request=request, data=None))
return {'error': ErrorCode.OK.value}
else:
return ErrorDict(ErrorCode.PERMISSION_EXISTS_ERROR)


@api.post("/tenant/{tenant_id}/permission/{permission_id}/toggle_other_user_open", tags=['权限'])
@operation(roles=[TENANT_ADMIN, PLATFORM_ADMIN])
def permission_toggle_other_user_open(request, tenant_id: str, permission_id: str):
'''
切换权限是否开放给本租户其它用户
'''
permission = SystemPermission.valid_objects.filter(
id=permission_id
).first()
if permission and permission.tenant is None:
return ErrorDict(ErrorCode.SYSTEM_PERMISSION_NOT_OPERATION)
if permission is None:
permission = Permission.valid_objects.filter(tenant_id=tenant_id, id=permission_id).first()
if permission:
is_open_other_user = permission.is_open_other_user
if is_open_other_user:
# 原来是打开,现在是关闭
# 需要检查是否是分组如果是分组,需要多加几个
ids = []
if str(permission.id) not in ids:
ids.append(str(permission.id))
if permission.category == 'group' and permission.container.all():
for item in permission.container.all():
if str(item.id) not in ids:
ids.append(str(item.id))
if isinstance(permission, SystemPermission):
permissions = SystemPermission.valid_objects.filter(id__in=ids)
else:
permissions = Permission.valid_objects.filter(id__in=ids)
# 多加几个结束
permissions.update(is_open_other_user=False)
if isinstance(permission, SystemPermission):
system_permissions_info = {
'tenant_id': tenant_id,
'self_user_id': str(request.user.id)
}
sort_ids = []
for permission in permissions:
sort_ids.append(permission.sort_id)
system_permissions_info['sort_ids'] = sort_ids
dispatch_event(Event(tag=CLOSE_OTHER_USER_SYSTEM_PERMISSION, tenant=request.tenant, request=request, data=system_permissions_info))
else:
app_permissions_info = {
'app_id': permission.app_id,
'tenant_id': tenant_id,
'self_user_id': str(request.user.id),
}
sort_ids = []
for permission in permissions:
sort_ids.append(permission.sort_id)
app_permissions_info['sort_ids'] = sort_ids
dispatch_event(Event(tag=CLOSE_OTHER_USER_APP_PERMISSION, tenant=request.tenant, request=request, data=app_permissions_info))
else:
# 原来是关闭,现在是打开
# 需要检查是否是分组如果是分组,需要多加几个
ids = []
if str(permission.id) not in ids:
ids.append(str(permission.id))
if permission.category == 'group' and permission.container.all():
for item in permission.container.all():
if str(item.id) not in ids:
ids.append(str(item.id))
data = {
'ids': ids,
'tenant_id': tenant_id
}
if isinstance(permission, SystemPermission):
permissions = SystemPermission.valid_objects.filter(id__in=ids)
else:
permissions = Permission.valid_objects.filter(id__in=ids)
data['app_id'] = str(permission.app.id)
# 多加几个结束
permissions.update(is_open_other_user=True)
if isinstance(permission, SystemPermission):
dispatch_event(Event(tag=OPEN_OTHER_USER_SYSTEM_PERMISSION, tenant=request.tenant, request=request, data=data))
else:
dispatch_event(Event(tag=OPEN_OTHER_USER_APP_PERMISSION, tenant=request.tenant, request=request, data=data))
return {'error': ErrorCode.OK.value}
else:
return ErrorDict(ErrorCode.PERMISSION_EXISTS_ERROR)
28 changes: 23 additions & 5 deletions api/v1/views/tenant_extension.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
from arkid.core.api import api, operation
from typing import List,Optional
from pydantic import Field
from arkid.core import actions
from arkid.core.extension import Extension
from arkid.core.models import Tenant
from arkid.extension.models import TenantExtensionConfig, TenantExtension, Extension as ExtensionModel
Expand Down Expand Up @@ -194,15 +195,25 @@ class Config:
labels:Optional[List[str]]


class TenantRentedExtensionListOut(TenantExtensionListOut):
class TenantPlatformExtensionListOut(TenantExtensionListOut):
# lease_records: List[ExtensionRentRecordOut] = Field(
# default=[], title=_("Rent Records", "租赁记录")
# )
lease_state: Optional[str] = Field(title=_('Lease State', '租赁状态'))
lease_useful_life: Optional[List[str]] = Field(title=_('Lease Useful Life', '有效期'))


@api.get("/tenant/{tenant_id}/platform/extensions/", tags=["租户插件"],response=List[TenantRentedExtensionListOut])
class TenantRentedExtensionListOut(TenantPlatformExtensionListOut):
is_active: bool = Field(
title='是否使用',
item_action={
"path":"/api/v1/tenant/{tenant_id}/tenant/extensions/{id}/active/",
"method":actions.FrontActionMethod.POST.value
}
)


@api.get("/tenant/{tenant_id}/platform/extensions/", tags=["租户插件"],response=List[TenantPlatformExtensionListOut])
@operation(List[TenantExtensionListOut], roles=[TENANT_ADMIN, PLATFORM_ADMIN])
@paginate(CustomPagination)
def get_platform_extensions(request, tenant_id: str, category_id: str = None):
Expand Down Expand Up @@ -255,6 +266,12 @@ def get_tenant_extensions(request, tenant_id: str, category_id: str = None):

if category_id and category_id != "" and category_id != "0":
extensions = extensions.filter(category_id=int(category_id))

# 使用TenantExtension的is_active覆盖ExtensionModel的is_active
extension_ids = TenantExtension.valid_objects.filter(tenant_id=tenant_id, is_active=True).values('extension_id')
active_extension_ids_set = {x['extension_id'] for x in extension_ids}
for ext in extensions:
ext.is_active = True if ext.id in active_extension_ids_set else False

if settings.IS_CENTRAL_ARKID:
return extensions
Expand Down Expand Up @@ -290,9 +307,10 @@ def get_tenant_extensions(request, tenant_id: str, category_id: str = None):
def toggle_tenant_extension_status(request, tenant_id: str, id: str):
""" 租户插件列表
"""
extension= TenantExtension.objects.get(id=id)
extension.is_active = True if extension.is_active is False else False
extension.save()
extension= ExtensionModel.active_objects.get(id=id)
tenant_extension = TenantExtension.valid_objects.get(extension=extension)
tenant_extension.is_active = True if tenant_extension.is_active is False else False
tenant_extension.save()
return ErrorDict(ErrorCode.OK)


Expand Down
11 changes: 8 additions & 3 deletions api/v1/views/user_group.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@

from ninja import Field
from ninja import Schema
from ninja import Schema,Query
from ninja import ModelSchema
from arkid.core.api import api, operation
from typing import List, Optional
Expand Down Expand Up @@ -188,10 +188,12 @@ def group_users_remove(request, tenant_id: str, user_group_id: str, id: str):
# 分发事件结束
return ErrorDict(ErrorCode.OK)



@api.get("/tenant/{tenant_id}/user_groups/{user_group_id}/exclude_users/", response=List[UserGroupExcludeUsersItemOut], tags=["用户分组"])
@operation(roles=[TENANT_ADMIN, PLATFORM_ADMIN])
@paginate(CustomPagination)
def get_exclude_users(request, tenant_id: str, user_group_id: str):
def get_exclude_users(request, tenant_id: str, user_group_id: str,query_data:UserGroupExcludeUsersFilter=Query(...)):
""" 获取所有未添加到分组的用户
"""
tenant = request.tenant
Expand All @@ -200,7 +202,10 @@ def get_exclude_users(request, tenant_id: str, user_group_id: str):
group_users = group.users.all()
super_user_id = User.valid_objects.order_by('created').first().id
users = users.exclude(id__in=group_users).exclude(id=super_user_id).all()
users = User.expand_objects.filter(id__in=users).all()
if query_data.username:
users = User.expand_objects.filter(id__in=users,username__contains=query_data.username).all()
else:
users = User.expand_objects.filter(id__in=users).all()
return users

@api.get("/tenant/{tenant_id}/user_groups/{user_group_id}/all_permissions/", response=List[UserGroupPermissionListSelectSchemaOut], tags=["用户分组"])
Expand Down
9 changes: 9 additions & 0 deletions arkid/common/check_arstore.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,15 @@ def check_extensions_expired():
'kwargs': json.dumps({}),
},
)
PeriodicTask.objects.update_or_create(
name='check_extension_expired',
defaults={
'crontab': schedule,
'task': 'arkid.core.tasks.check_extensions_rent_expired',
'args': json.dumps([]),
'kwargs': json.dumps({}),
},
)
except OperationalError:
pass
except Exception as e:
Expand Down
Loading

0 comments on commit 10847a6

Please sign in to comment.