diff --git a/api/v1/views/app.py b/api/v1/views/app.py index e4877a253..a9f1c7fc4 100644 --- a/api/v1/views/app.py +++ b/api/v1/views/app.py @@ -68,7 +68,7 @@ def create_app(request, tenant_id: str, data: AppConfigSchemaIn): for func, (result, extension) in results: if result: # 创建config - config = extension.create_tenant_config(tenant, data.config.dict(), data.name) + config = extension.create_tenant_config(tenant, data.config.dict(), data.name, data.app_type) # 创建app app = App() app.id = data.id @@ -156,7 +156,7 @@ def update_app(request, tenant_id: str, app_id: str, data: AppConfigSchemaIn): # app.tenant_id = tenant_id app.save() # 修改config - extension.update_tenant_config(app.config.id, data.config.dict()) + extension.update_tenant_config(app.config.id, data.config.dict(), data.app_type) break return {'error': ErrorCode.OK.value} diff --git a/arkid/core/openapi.py b/arkid/core/openapi.py index 999c41256..8a61cd4e6 100644 --- a/arkid/core/openapi.py +++ b/arkid/core/openapi.py @@ -35,6 +35,9 @@ def import_permission(scheme): describe = systempermission.describe if systempermission.category == 'group': item['container'] = describe.get('sort_ids', []) + parent = describe.get('parent', -1) + if parent != -1: + item['parent'] = parent else: item['container'] = [] item['operation_id'] = systempermission.operation_id @@ -57,6 +60,17 @@ def import_permission(scheme): "sort_id": 2, "type": "group", }, + { + "name": "分组", + "sort_id": 3, + "type": "group", + }, + { + "name": "分组1", + "sort_id": 4, + "type": "group", + "parent": 3 + }, ] def get_permissions(api): diff --git a/arkid/core/tasks/tasks.py b/arkid/core/tasks/tasks.py index 1b6a31049..7343b9688 100644 --- a/arkid/core/tasks/tasks.py +++ b/arkid/core/tasks/tasks.py @@ -96,50 +96,37 @@ def update_system_permission(): systempermission.is_update = True systempermission.save() permissions_item['sort_real_id'] = systempermission.sort_id + permissions_item['systempermission'] = systempermission # 单独处理分组问题 for group_item in group_data: - name = group_item.get('name', '') - container = group_item.get('container', []) + container = group_item.get('container', []) + group_systempermission = group_item.get('systempermission', None) group_sort_ids = [] for api_item in api_data: sort_id = api_item.get('sort_id', 0) sort_real_id = api_item.get('sort_real_id', 0) - if sort_id in container: + api_systempermission = api_item.get('systempermission', None) + + if sort_id in container and api_systempermission: + group_systempermission.container.add(api_systempermission) group_sort_ids.append(sort_real_id) - # 系统权限 - group_systempermission = SystemPermission.valid_objects.filter( - tenant=None, - category='group', - is_system=True, - name=name, - code__icontains='group_role', - ).first() - api_systempermissions = SystemPermission.valid_objects.filter( - category='api', - is_system=True, - sort_id__in=group_sort_ids, - ) - for api_systempermission in api_systempermissions: - group_systempermission.container.add(api_systempermission) - group_systempermission.describe = { - 'sort_ids': group_sort_ids - } + # parent + parent = group_item.get('parent', -1) + describe = {'sort_ids': group_sort_ids} + if parent != -1: + parent_real = None + for group_next in group_data: + sort_id = group_next.get('sort_id', 0) + sort_real_id = group_next.get('sort_real_id', 0) + group_next_permission = group_next.get('systempermission', None) + if sort_id == parent and group_next_permission: + group_systempermission.parent = group_next_permission + describe['parent'] = sort_real_id + break + else: + group_systempermission.parent = None + group_systempermission.describe = describe group_systempermission.save() - # for group_item in group_data: - # container = group_item.get('container', []) - # group_systempermission = group_item.get('systempermission', None) - # group_sort_ids = [] - # for api_item in api_data: - # sort_id = api_item.get('sort_id', 0) - # api_systempermission = api_item.get('systempermission', None) - # if sort_id in container and api_systempermission: - # group_systempermission.container.add(api_systempermission) - # group_sort_ids.append(api_systempermission.sort_id) - # # 保存新的排序id - # group_systempermission.describe = { - # 'sort_ids': group_sort_ids - # } - # group_systempermission.save() # 权限更新 SystemPermission.valid_objects.filter( Q(code__icontains='group_role') | Q(category='api'), @@ -148,20 +135,13 @@ def update_system_permission(): is_update=False ).delete() -class ReadySingleton(object): - def __init__(self, *args, **kwargs): - pass - - @classmethod - def get_instance(cls, *args, **kwargs): - if not hasattr(ReadySingleton, '_instance' ): - ReadySingleton._instance = ReadySingleton(*args, **kwargs) - # 只有celery第一次被启动时才会调用 - tenant = Tenant.valid_objects.filter( - slug='', - name="platform tenant", - ).first() - dispatch_event(Event(tag=APP_START, tenant=tenant)) - return ReadySingleton._instance +class ReadyCelery(object): + + def __init__(self): + tenant, _ = Tenant.objects.get_or_create( + slug='', + name="platform tenant", + ) + dispatch_event(Event(tag=APP_START, tenant=tenant)) -ReadySingleton.get_instance() \ No newline at end of file +ReadyCelery() \ No newline at end of file diff --git a/extension_root/com_longgui_oauth2_server/__init__.py b/extension_root/com_longgui_oauth2_server/__init__.py index de63f22a1..e0aedf9bc 100644 --- a/extension_root/com_longgui_oauth2_server/__init__.py +++ b/extension_root/com_longgui_oauth2_server/__init__.py @@ -74,10 +74,10 @@ def update_url_data(self, tenant_id, config, obj): ''' host = get_app_config().get_frontend_host() - config.userinfo = host+reverse("com_longgui_oauth2_server:oauth-user-info", args=[tenant_id]) - config.authorize = host+reverse("com_longgui_oauth2_server:authorize", args=[tenant_id]) - config.token = host+reverse("com_longgui_oauth2_server:token", args=[tenant_id]) - config.logout = host+reverse("com_longgui_oauth2_server:oauth-user-logout", args=[tenant_id]) + config.userinfo = host+reverse("com_longgui_auth_oauth2_server:oauth-user-info", args=[tenant_id]) + config.authorize = host+reverse("com_longgui_auth_oauth2_server:authorize", args=[tenant_id]) + config.token = host+reverse("com_longgui_auth_oauth2_server:token", args=[tenant_id]) + config.logout = host+reverse("com_longgui_auth_oauth2_server:oauth-user-logout", args=[tenant_id]) config.client_id = obj.client_id config.client_secret = obj.client_secret config.skip_authorization = obj.skip_authorization