Skip to content

Commit

Permalink
Merge pull request #1408 from longguikeji/v2.5-dev
Browse files Browse the repository at this point in the history
V2.5 dev
  • Loading branch information
notevery committed Nov 14, 2022
2 parents 4c098ce + 0a69c2e commit 5cc8db2
Show file tree
Hide file tree
Showing 5 changed files with 77 additions and 17 deletions.
25 changes: 20 additions & 5 deletions api/v1/views/arkstore.py
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,8 @@ class PAYMENT_TYPE(str, Enum):

class ArkstoreItemSchemaOut(Schema):
uuid: str = Field(hidden=True)
local_uuid: Optional[str] = Field(hidden=True, title=_('Local UUID', '插件本地UUID'))
arkstore_uuid: Optional[str] = Field(hidden=True, title=_('Arkstore UUID', '插件商店UUID'))
name: str = Field(readonly=True)
version: str = Field(readonly=True, title=_('Version', '版本'))
author: str = Field(readonly=True, title=_('Author', '作者'))
Expand Down Expand Up @@ -457,13 +459,17 @@ def list_arkstore_purchased_and_installed_extensions(request, tenant_id: str, fi
installed_ext_packages = {ext.package: ext for ext in installed_exts}
purchased_exts = get_arkstore_list(request, True, 'extension', all=True, extra_params=extra_params)['items']
for ext in purchased_exts:
ext['arkstore_uuid'] = ext['uuid']
if ext['package'] in installed_ext_packages:
local_ext = installed_ext_packages[ext['package']]
ext['local_uuid'] = str(local_ext.id)
ext['installed'] = True
ext['is_active'] = installed_ext_packages[ext['package']].is_active
ext['is_active_tenant'] = installed_ext_packages[ext['package']].is_active_tenant
if installed_ext_packages[ext['package']].version < ext['version']:
ext['is_active'] = local_ext.is_active
ext['is_active_tenant'] = local_ext.is_active_tenant
if local_ext.version < ext['version']:
ext['has_upgrade'] = True
else:
ext['local_uuid'] = None
ext['installed'] = False

purchased_exts_packages = {ext['package']: ext for ext in purchased_exts}
Expand All @@ -472,6 +478,8 @@ def list_arkstore_purchased_and_installed_extensions(request, tenant_id: str, fi
ext.uuid = str(ext.id)
ext.labels = " ".join(ext.labels) if ext.labels else ""
ext.is_default_extension = True
ext.local_uuid = str(ext.id)
ext.arkstore_uuid = None

if filter.has_upgrade == True:
return [ext for ext in purchased_exts if ext.get('has_upgrade') == True]
Expand Down Expand Up @@ -508,22 +516,29 @@ def list_arkstore_rented_extensions(request, tenant_id: str):
for ext in extensions:
ext.lease_useful_life = ["不限天数,不限人数"]
ext.lease_state = '已租赁'
ext.local_uuid = str(ext.id)
ext.arkstore_uuid = None
return extensions

resp = get_arkstore_list(request, None, 'extension', rented=True, all=True)['items']
extensions_rented = {ext['package']: ext for ext in resp}
for ext in extensions:
ext.local_uuid = str(ext.id)
if ext.package in extensions_rented:
ext.lease_useful_life = extensions_rented[ext.package]['lease_useful_life']
ext_arkstore = extensions_rented[ext.package]
ext.arkstore_uuid = ext_arkstore['uuid']
ext.lease_useful_life = ext_arkstore['lease_useful_life']
ext.lease_state = '已租赁'
lease_records = extensions_rented[ext.package].get('lease_records') or []
lease_records = ext_arkstore.get('lease_records') or []
# check_lease_records_expired
if check_time_and_user_valid(lease_records, tenant):
tenant_extension, created = TenantExtension.objects.update_or_create(
tenant_id=tenant_id,
extension=ext,
defaults={"is_rented": True}
)
else:
ext.arkstore_uuid = None

return extensions

Expand Down
38 changes: 29 additions & 9 deletions api/v1/views/user.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,12 @@
@paginate(CustomPagination)
def user_list(request, tenant_id: str, query_data: UserListQueryIn=Query(...)):
from arkid.core.perm.permission_data import PermissionData
users = User.expand_objects.filter(tenant_id=tenant_id, is_del=False)
tenant = request.tenant
tenant_users = tenant.users
tenant_user_ids = []
for tenant_user in tenant_users.all():
tenant_user_ids.append(tenant_user.id)
users = User.expand_objects.filter(id__in=tenant_user_ids, is_del=False)
if query_data.username:
users = users.filter(username__icontains=query_data.username)
if query_data.nickname:
Expand All @@ -39,7 +44,7 @@ def user_list(request, tenant_id: str, query_data: UserListQueryIn=Query(...)):
if query_data.order:
users = users.order_by(query_data.order)
login_user = request.user
tenant = request.tenant
# tenant = request.tenant
pd = PermissionData()
users = pd.get_manage_all_user(login_user, tenant, users)

Expand All @@ -54,12 +59,18 @@ def user_list(request, tenant_id: str, query_data: UserListQueryIn=Query(...)):
# @paginate(CustomPagination)
def user_list_no_super(request, tenant_id: str):
from arkid.core.perm.permission_data import PermissionData
super_user_id = User.valid_objects.order_by('created').first().id
users = User.valid_objects.filter(tenant_id=tenant_id).exclude(id=super_user_id)
pd = PermissionData()
# super_user_id = User.valid_objects.order_by('created').first().id
tenant = request.tenant
user_managers = pd.get_tenant_managers(tenant)
exclude_ids = []
for user_manager in user_managers:
exclude_ids.append(user_manager.id)
users = tenant.users.filter(is_del=False)
if exclude_ids:
users = users.exclude(id__in=exclude_ids)
# 如果当前登录的用户不是管理员,需要根据用户所拥有的分组进行区分
login_user = request.user
tenant = request.tenant
pd = PermissionData()
users = pd.get_manage_all_user(login_user, tenant, users)
return {"data": list(users.all())}

Expand Down Expand Up @@ -102,9 +113,18 @@ def user_pull(request, tenant_id: str):
@api.delete("/tenant/{tenant_id}/users/{id}/",response=UserDeleteOut, tags=['用户'])
@operation(UserDeleteOut,roles=[TENANT_ADMIN, PLATFORM_ADMIN])
def user_delete(request, tenant_id: str,id:str):
user = get_object_or_404(User.valid_objects,tenant=request.tenant, id=id)
user.delete()
return {"error":ErrorCode.OK.value}
# user = get_object_or_404(User.valid_objects,tenant=request.tenant, id=id)
tenant = request.tenant
user = tenant.users.filter(id=id).first()
if user:
is_tenant_admin = tenant.has_admin_perm(user)
if is_tenant_admin:
return ErrorDict(ErrorCode.USER_MANAGER_NOT_DELETE)
else:
user.delete()
return ErrorDict(ErrorCode.OK)
else:
return ErrorDict(ErrorCode.USER_NOT_EXISTS_ERROR)

# ------------- 更新用户接口 --------------
@api.post("/tenant/{tenant_id}/users/{id}/",response=UserUpdateOut, tags=['用户'])
Expand Down
4 changes: 2 additions & 2 deletions arkid/core/error.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@ class ErrorCode(Enum):
# SMS_CODE_MISMATCH = '10002'
# EMAIL_CODE_MISMATCH = '10021'
USERNAME_EXISTS_ERROR = ('10004', _('username already exists', '用户名已存在'))


USER_MANAGER_NOT_DELETE = ('10005', _('not delete manager', '不允许删除管理员'))
USER_NOT_EXISTS_ERROR = ('10006', _('user not exists', '用户不存在'))
# TENANT_NO_ACCESS = '10003'
# TENANT_NO_EXISTS = '10007'
# CODE_EXISTS_ERROR = '10008'
Expand Down
6 changes: 5 additions & 1 deletion arkid/core/pagenation.py
Original file line number Diff line number Diff line change
Expand Up @@ -77,10 +77,14 @@ def paginate_queryset(self, queryset, pagination: CustomPagination.Input, reques
installed_exts = Extension.valid_objects.filter()
installed_ext_packages = {ext.package: ext for ext in installed_exts}
for ext in items:
ext['arkstore_uuid'] = ext['uuid']
if ext['package'] in installed_ext_packages:
if installed_ext_packages[ext['package']].version < ext['version']:
local_ext = installed_ext_packages[ext['package']]
ext['local_uuid'] = str(local_ext.id)
if local_ext.version < ext['version']:
ext['has_upgrade'] = True
else:
ext['local_uuid'] = None
ext['installed'] = False

tenant = request.tenant
Expand Down
21 changes: 21 additions & 0 deletions arkid/core/perm/permission_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -2545,6 +2545,27 @@ def has_admin_perm(self, tenant, user):
return True
return False

def get_tenant_managers(self, tenant):
'''
取得当前租户所有的管理员
'''
systempermission = SystemPermission.valid_objects.filter(tenant=tenant, code=tenant.admin_perm_code, is_system=True).first()
userpermissionresults = UserPermissionResult.valid_objects.filter(
app=None,
tenant=tenant,
)
compress = Compress()
users = []
for userpermissionresult in userpermissionresults:
permission_result = compress.decrypt(userpermissionresult.result)
permission_result_arr = list(permission_result)
if len(permission_result_arr) > systempermission.sort_id:
check_result = int(permission_result_arr[systempermission.sort_id])
if check_result == 1 and userpermissionresult.user not in users:
users.append(userpermissionresult.user)
return users


def create_tenant_admin_permission(self, tenant):
'''
创建租户管理员权限
Expand Down

0 comments on commit 5cc8db2

Please sign in to comment.