import click from flask.cli import with_appcontext @click.command() @with_appcontext def init_acl(): """ acl init """ from api.models.acl import Role from api.models.acl import App from api.tasks.acl import role_rebuild from api.lib.perm.acl.const import ACL_QUEUE roles = Role.get_by(to_dict=False) apps = App.get_by(to_dict=False) for role in roles: if role.app_id: role_rebuild.apply_async(args=(role.id, role.app_id), queue=ACL_QUEUE) else: for app in apps: role_rebuild.apply_async(args=(role.id, app.id), queue=ACL_QUEUE) # @click.command() # @with_appcontext # def acl_clean(): # from api.models.acl import Resource # from api.models.acl import Permission # from api.models.acl import RolePermission # # perms = RolePermission.get_by(to_dict=False) # # for r in perms: # perm = Permission.get_by_id(r.perm_id) # if perm and perm.app_id != r.app_id: # resource_id = r.resource_id # resource = Resource.get_by_id(resource_id) # perm_name = perm.name # existed = Permission.get_by(resource_type_id=resource.resource_type_id, name=perm_name, first=True, # to_dict=False) # if existed is not None: # other = RolePermission.get_by(rid=r.rid, perm_id=existed.id, resource_id=resource_id) # if not other: # r.update(perm_id=existed.id) # else: # r.soft_delete() # else: # r.soft_delete() # # # @click.command() # @with_appcontext # def acl_has_resource_role(): # from api.models.acl import Role # from api.models.acl import App # from api.lib.perm.acl.cache import HasResourceRoleCache # from api.lib.perm.acl.role import RoleCRUD # # roles = Role.get_by(to_dict=False) # apps = App.get_by(to_dict=False) # for role in roles: # if role.app_id: # res = RoleCRUD.recursive_resources(role.id, role.app_id) # if res.get('resources') or res.get('groups'): # HasResourceRoleCache.add(role.id, role.app_id) # else: # for app in apps: # res = RoleCRUD.recursive_resources(role.id, app.id) # if res.get('resources') or res.get('groups'): # HasResourceRoleCache.add(role.id, app.id)