# -*- coding:utf-8 -*- from flask import current_app from flask import request from api.lib.decorator import args_required from api.lib.perm.acl import validate_app from api.lib.perm.acl.role import RoleCRUD from api.lib.perm.acl.role import RoleRelationCRUD from api.lib.utils import get_page from api.lib.utils import get_page_size from api.resource import APIView class RoleView(APIView): url_prefix = ("/roles", "/roles/<int:rid>") @args_required('app_id') @validate_app def get(self): page = get_page(request.values.get("page", 1)) page_size = get_page_size(request.values.get("page_size")) q = request.values.get('q') app_id = request.values.get('app_id') user_role = request.values.get('user_role', True) user_role = True if user_role in current_app.config.get("BOOL_TRUE") else False numfound, roles = RoleCRUD.search(q, app_id, page, page_size, user_role) id2parents = RoleRelationCRUD.get_parents([i.id for i in roles]) return self.jsonify(numfound=numfound, page=page, page_size=page_size, id2parents=id2parents, roles=[i.to_dict() for i in roles]) @args_required('name') @args_required('app_id') @validate_app def post(self): name = request.values.get('name') app_id = request.values.get('app_id') is_app_admin = request.values.get('is_app_admin', False) role = RoleCRUD.add_role(name, app_id, is_app_admin=is_app_admin) return self.jsonify(role.to_dict()) def put(self, rid): role = RoleCRUD.update_role(rid, **request.values) return self.jsonify(role.to_dict()) def delete(self, rid): RoleCRUD.delete_role(rid) return self.jsonify(rid=rid) class RoleRelationView(APIView): url_prefix = "/roles/<int:child_id>/parents" @args_required('parent_id') def post(self, child_id): parent_id = request.values.get('parent_id') res = RoleRelationCRUD.add(parent_id, child_id) return self.jsonify(res.to_dict()) @args_required('parent_id') def delete(self, child_id): parent_id = request.values.get('parent_id') RoleRelationCRUD.delete2(parent_id, child_id) return self.jsonify(parent_id=parent_id, child_id=child_id)