Ver Fonte

角色表设计(权限存储待定)、获取角色列表、添加角色、修改角色、删除角色

zhangnaiwen há 2 anos atrás
pai
commit
e753db05c5
4 ficheiros alterados com 115 adições e 37 exclusões
  1. 2 2
      src/app/api/organization.py
  2. 98 34
      src/app/api/role.py
  3. 1 1
      src/app/modle/organization.py
  4. 14 0
      src/app/modle/role.py

+ 2 - 2
src/app/api/organization.py

@@ -216,8 +216,8 @@ class DepartmentApi(Resource):
             return jsonify(code=StatesCode.UNKNOWN_ERROR, message="公司id不能为空")
 
         with Session(engine) as session:
-            stmt = select(Department).where(Department.company_id == company_id)
-            results = session.execute(stmt).scalars().all()
+            stmt = select(Department.id, Department.department_name).where(Department.company_id == company_id)
+            results = session.execute(stmt)
 
         data = []
         for result in results:

+ 98 - 34
src/app/api/role.py

@@ -1,27 +1,46 @@
-from flask import request
+import json
+
+from flask import request, jsonify, current_app
 from flask_restx import Resource, Namespace, reqparse
+from sqlalchemy import select, insert, update, delete
+from sqlalchemy.orm import Session
+from sqlalchemy import func
 
+from app.database import engine
 from app.defines import StatesCode
+from app.modle.role import Role
+from app.modle.users import User
+from app.utils.to_dict import to_dict
 
 ns = Namespace('role', description='角色管理接口')
 
+role_list = reqparse.RequestParser(bundle_errors=True)
+role_list.add_argument(name='page_size', type=int, location='args', required=False, help='每页记录数量,默认:20')
+role_list.add_argument(name='page', type=int, location='args', required=False, help='页数')
+
 
 @ns.route('/role_list')
 class GetUserListApi(Resource):
     @ns.doc(id='get_role_list', description='获取角色列表')
-    @ns.expect()
+    @ns.expect(role_list)
     def get(self):
         """获取角色列表"""
-        status = request.args.get('status')
+
         page_size = int(request.args.get('page_size', 20))
         page = int(request.args.get('page', 1))
-        data = [
-            {"name": "admin", "message": "1111", "member": 100, "relationship_groups": 1},
-            {"name": "admin1", "message": "2222", "member": 200, "relationship_groups": 2},
-            {"name": "admin1", "message": "3333", "member": 300, "relationship_groups": 3},
 
-        ]
-        return {"code": StatesCode.SUCCESS, "message": "成功", "data": data}
+        with Session(engine) as session:
+            stmt = select(Role).offset(page_size * (page - 1)).limit(page_size)
+            results = session.execute(stmt).scalars().all()
+
+        return jsonify(code=StatesCode.SUCCESS, message='成功', data=to_dict(results))
+
+
+role = reqparse.RequestParser(bundle_errors=True)
+role.add_argument(name='role_id', type=int, location='form', required=False, help='角色id')
+role.add_argument(name='role_name', type=str, location='form', required=False, help='角色名称')
+role.add_argument(name='role_describe', type=str, location='form', required=False, help='角色描述')
+role.add_argument(name='role_permission', type=str, location='form', required=False, help='角色权限')
 
 
 @ns.route('/role')
@@ -32,36 +51,87 @@ class RoleApi(Resource):
         """搜索角色"""
         data = {
             "name": "决策组",
-            # "describe":"xxxxx",
-            # "移动端":{
-            #
-            # },
-            # "pc端":{
-            #     "前段":[],
-            #     "后段":[]
-            # },
-            # "member":[]
 
         }
         return {"code": StatesCode.SUCCESS, "message": "成功", "data": data}
 
     @ns.doc(id='add_role', description='添加角色')
-    @ns.expect()
+    @ns.expect(role)
     def post(self):
         """添加角色"""
-        return {"code": StatesCode.SUCCESS, "message": "成功", "data": "添加成功"}
+
+        role_name = request.form.get('role_name')
+        role_describe = request.form.get('role_describe')
+        role_permission = request.form.get('role_permission')
+
+        if role_name is None:
+            return jsonify(code=StatesCode.UNKNOWN_ERROR, message="角色名不能为空")
+
+        if role_permission:
+            role_permission = json.loads(role_permission)
+
+        with Session(engine) as session:
+
+            stmt = insert(Role).values(
+                role_name=role_name,
+                role_describe=role_describe,
+                role_permission=role_permission
+            )
+
+            session.execute(stmt)
+            session.commit()
+
+        return jsonify(code=StatesCode.SUCCESS, message='成功')
 
     @ns.doc(id='modify_role', description='修改角色')
-    @ns.expect()
+    @ns.expect(role)
     def put(self):
         """修改角色"""
-        return {"code": StatesCode.SUCCESS, "message": "成功", "data": "修改成功"}
+        role_id = request.form.get('role_id')
+        role_name = request.form.get('role_name')
+        role_describe = request.form.get('role_describe')
+        role_permission = request.form.get('role_permission')
+
+        if role_name is None or role_id is None:
+            return jsonify(code=StatesCode.UNKNOWN_ERROR, message="角色名和角色id不能为空")
+
+        if role_permission:
+            role_permission = json.loads(role_permission)
+
+        with Session(engine) as session:
+
+            stmt = update(Role).where(Role.id == role_id).values(
+                role_name=role_name,
+                role_describe=role_describe,
+                role_permission=role_permission
+            )
+            session.execute(stmt)
+            session.commit()
+
+        return jsonify(code=StatesCode.SUCCESS, message="添加角色成功")
 
     @ns.doc(id='delete_role', description='删除角色')
-    @ns.expect()
+    @ns.expect(role)
     def delete(self):
         """删除角色"""
-        return {"code": StatesCode.SUCCESS, "message": "成功", "data": "删除成功"}
+        role_id = request.form.get('role_id')
+
+        if role_id is None:
+            return jsonify(code=StatesCode.UNKNOWN_ERROR, message="角色名和角色id不能为空")
+
+        # 查询用户,用户的角色为当前角色,无法删除角色
+        with Session(engine) as session:
+            stmt = select(func.count(User.role)).where(User.role == role_id)
+            results = session.execute(stmt).scalars().first()
+
+            if results > 0:
+                return jsonify(code=StatesCode.UNKNOWN_ERROR, message="该角色组存在用户,无法删除")
+            else:
+                stmt = delete(Role).where(Role.id == role_id)
+                session.execute(stmt)
+                session.commit()
+
+        return jsonify(code=StatesCode.SUCCESS, message="删除角色成功")
 
 
 @ns.route('/member')
@@ -97,17 +167,11 @@ class RoleMemberApi(Resource):
 
 @ns.route('/role_permission')
 class RolePermissionApi(Resource):
-    @ns.doc(id='get_role_permission', description='获取角色权限')
+    @ns.doc(id='get_role_permission', description='获取权限配置信息')
     @ns.expect()
     def get(self):
-        """获取权限列表"""
-        data = {
-            "前端": {
+        """获取权限信息"""
 
-            },
-            "后端": {
+        permission = current_app.config['permission']
 
-            }
-
-        }
-        return {"code": StatesCode.SUCCESS, "message": "成功", "data": data}
+        return {"code": StatesCode.SUCCESS, "message": "成功", "data": permission}

+ 1 - 1
src/app/modle/organization.py

@@ -1,4 +1,4 @@
-from sqlalchemy import String, Column, Integer, DateTime, Text, ForeignKey
+from sqlalchemy import String, Column, Integer, Text, ForeignKey
 from sqlalchemy.orm import relationship
 
 from app.modle import Base

+ 14 - 0
src/app/modle/role.py

@@ -0,0 +1,14 @@
+from sqlalchemy import String, Column, Integer, DateTime, JSON, create_engine
+
+from app.modle import Base
+
+
+class Role(Base):
+    """角色表"""
+
+    __tablename__ = "role"
+
+    id = Column(Integer, primary_key=True, autoincrement=True, nullable=False, unique=True, doc='id')
+    role_name = Column(String, nullable=False, unique=True, index=False, doc='角色名称')
+    role_describe = Column(String, nullable=True, unique=False, index=False, doc='角色描述')
+    role_permission = Column(JSON, nullable=True, unique=False, index=False, doc='角色权限')