diff --git a/cmdb-api/api/commands/init_common_setting.py b/cmdb-api/api/commands/click_common_setting.py similarity index 77% rename from cmdb-api/api/commands/init_common_setting.py rename to cmdb-api/api/commands/click_common_setting.py index ea5afc9..e0fea63 100644 --- a/cmdb-api/api/commands/init_common_setting.py +++ b/cmdb-api/api/commands/click_common_setting.py @@ -161,6 +161,55 @@ class InitDepartment(object): info = f"update department acl_rid: {acl_rid}" current_app.logger.info(info) + def init_backend_resource(self): + acl = self.check_app('backend') + resources_types = acl.get_all_resources_types() + + results = list(filter(lambda t: t['name'] == '操作权限', resources_types['groups'])) + if len(results) == 0: + payload = dict( + app_id=acl.app_name, + name='操作权限', + description='', + perms=['read', 'grant', 'delete', 'update'] + ) + resource_type = acl.create_resources_type(payload) + else: + resource_type = results[0] + + for name in ['公司信息']: + payload = dict( + type_id=resource_type['id'], + app_id=acl.app_name, + name=name, + ) + try: + acl.create_resource(payload) + except Exception as e: + if '已经存在' in str(e): + pass + else: + raise Exception(e) + + def check_app(self, app_name): + acl = ACLManager(app_name) + payload = dict( + name=app_name, + description=app_name + ) + try: + app = acl.validate_app() + if app: + return acl + + acl.create_app(payload) + except Exception as e: + current_app.logger.error(e) + if '不存在' in str(e): + acl.create_app(payload) + return acl + raise Exception(e) + @click.command() @with_appcontext @@ -177,5 +226,7 @@ def init_department(): """ Department initialization """ - InitDepartment().init() - InitDepartment().create_acl_role_with_department() + cli = InitDepartment() + cli.init_wide_company() + cli.create_acl_role_with_department() + cli.init_backend_resource() diff --git a/cmdb-api/api/lib/common_setting/acl.py b/cmdb-api/api/lib/common_setting/acl.py index 163a373..99e1860 100644 --- a/cmdb-api/api/lib/common_setting/acl.py +++ b/cmdb-api/api/lib/common_setting/acl.py @@ -6,6 +6,7 @@ from api.lib.common_setting.resp_format import ErrFormat from api.lib.perm.acl.cache import RoleCache, AppCache from api.lib.perm.acl.role import RoleCRUD, RoleRelationCRUD from api.lib.perm.acl.user import UserCRUD +from api.lib.perm.acl.resource import ResourceTypeCRUD, ResourceCRUD class ACLManager(object): @@ -94,3 +95,22 @@ class ACLManager(object): avatar=user_info.get('avatar')) return result + + def validate_app(self): + return AppCache.get(self.app_name) + + def get_all_resources_types(self, q=None, page=1, page_size=999999): + app_id = self.validate_app().id + numfound, res, id2perms = ResourceTypeCRUD.search(q, app_id, page, page_size) + + return dict( + numfound=numfound, + groups=[i.to_dict() for i in res], + id2perms=id2perms + ) + + def create_resource(self, payload): + payload['app_id'] = self.validate_app().id + resource = ResourceCRUD.add(**payload) + + return resource.to_dict()