Skip to content

Commit a95168e

Browse files
committed
feat:新增角色管理模块,增删查改已完成
1 parent 950d2c0 commit a95168e

14 files changed

Lines changed: 929 additions & 17 deletions

File tree

dash-fastapi-backend/controller/menu_controller.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313

1414

1515
@menuController.post("/menu/tree", response_model=MenuTree)
16-
async def get_system_menu_tree(menu_query: MenuModel, query_db: Session = Depends(get_db)):
16+
async def get_system_menu_tree(menu_query: MenuTreeModel, query_db: Session = Depends(get_db)):
1717
try:
1818
menu_query_result = get_menu_tree_services(query_db, menu_query)
1919
logger.info('获取成功')

dash-fastapi-backend/controller/post_controler.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@ async def get_system_post_select(query_db: Session = Depends(get_db)):
2323

2424

2525
@postController.post("/post/get", response_model=PostPageObjectResponse)
26-
async def get_system_post_list(user_query: PostPageObject, query_db: Session = Depends(get_db)):
26+
async def get_system_post_list(post_query: PostPageObject, query_db: Session = Depends(get_db)):
2727
try:
28-
post_query_result = get_post_list_services(query_db, user_query)
28+
post_query_result = get_post_list_services(query_db, post_query)
2929
logger.info('获取成功')
3030
return response_200(data=post_query_result, message="获取成功")
3131
except Exception as e:

dash-fastapi-backend/controller/role_controller.py

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,3 +20,78 @@ async def get_system_role_select(query_db: Session = Depends(get_db)):
2020
except Exception as e:
2121
logger.exception(e)
2222
return response_500(data="", message="接口异常")
23+
24+
25+
@roleController.post("/role/get", response_model=RolePageObjectResponse)
26+
async def get_system_role_list(role_query: RolePageObject, query_db: Session = Depends(get_db)):
27+
try:
28+
role_query_result = get_role_list_services(query_db, role_query)
29+
logger.info('获取成功')
30+
return response_200(data=role_query_result, message="获取成功")
31+
except Exception as e:
32+
logger.exception(e)
33+
return response_500(data="", message="接口异常")
34+
35+
36+
@roleController.post("/role/add", response_model=CrudRoleResponse)
37+
async def add_system_role(request: Request, add_role: AddRoleModel, token: Optional[str] = Header(...), query_db: Session = Depends(get_db)):
38+
try:
39+
current_user = await get_current_user(request, token, query_db)
40+
add_role.create_by = current_user.user.user_name
41+
add_role.update_by = current_user.user.user_name
42+
add_role_result = add_role_services(query_db, add_role)
43+
logger.info(add_role_result.message)
44+
if add_role_result.is_success:
45+
return response_200(data=add_role_result, message=add_role_result.message)
46+
else:
47+
return response_400(data="", message=add_role_result.message)
48+
except Exception as e:
49+
logger.exception(e)
50+
return response_500(data="", message="接口异常")
51+
52+
53+
@roleController.post("/role/edit", response_model=CrudRoleResponse)
54+
async def edit_system_role(request: Request, edit_role: AddRoleModel, token: Optional[str] = Header(...), query_db: Session = Depends(get_db)):
55+
try:
56+
current_user = await get_current_user(request, token, query_db)
57+
edit_role.update_by = current_user.user.user_name
58+
edit_role.update_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
59+
edit_role_result = edit_role_services(query_db, edit_role)
60+
if edit_role_result.is_success:
61+
logger.info(edit_role_result.message)
62+
return response_200(data=edit_role_result, message=edit_role_result.message)
63+
else:
64+
logger.warning(edit_role_result.message)
65+
return response_400(data="", message=edit_role_result.message)
66+
except Exception as e:
67+
logger.exception(e)
68+
return response_500(data="", message="接口异常")
69+
70+
71+
@roleController.post("/role/delete", response_model=CrudRoleResponse)
72+
async def delete_system_role(request: Request, delete_role: DeleteRoleModel, token: Optional[str] = Header(...), query_db: Session = Depends(get_db)):
73+
try:
74+
current_user = await get_current_user(request, token, query_db)
75+
delete_role.update_by = current_user.user.user_name
76+
delete_role.update_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
77+
delete_role_result = delete_role_services(query_db, delete_role)
78+
if delete_role_result.is_success:
79+
logger.info(delete_role_result.message)
80+
return response_200(data=delete_role_result, message=delete_role_result.message)
81+
else:
82+
logger.warning(delete_role_result.message)
83+
return response_400(data="", message=delete_role_result.message)
84+
except Exception as e:
85+
logger.exception(e)
86+
return response_500(data="", message="接口异常")
87+
88+
89+
@roleController.get("/role/{role_id}", response_model=RoleDetailModel)
90+
async def query_detail_system_role(role_id: int, query_db: Session = Depends(get_db)):
91+
try:
92+
delete_role_result = detail_role_services(query_db, role_id)
93+
logger.info(f'获取role_id为{role_id}的信息成功')
94+
return response_200(data=delete_role_result, message='获取成功')
95+
except Exception as e:
96+
logger.exception(e)
97+
return response_500(data="", message="接口异常")

dash-fastapi-backend/mapper/crud/role_crud.py

Lines changed: 167 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,25 @@
1-
from sqlalchemy import and_
1+
from sqlalchemy import and_, desc
22
from sqlalchemy.orm import Session
3-
from entity.role_entity import SysRole
4-
from utils.time_format_tool import list_format_datetime
3+
from entity.role_entity import SysRole, SysRoleMenu
4+
from entity.menu_entity import SysMenu
5+
from mapper.schema.role_schema import RoleModel, RoleMenuModel, RolePageObject, RolePageObjectResponse, CrudRoleResponse, RoleDetailModel
6+
from utils.time_format_tool import list_format_datetime, object_format_datetime
57
from utils.page_tool import get_page_info
8+
from datetime import datetime, time
9+
10+
11+
def get_role_by_name(db: Session, role_name: str):
12+
"""
13+
根据角色名获取角色信息
14+
:param db: orm对象
15+
:param role_name: 角色名
16+
:return: 当前角色名的角色信息对象
17+
"""
18+
query_role_info = db.query(SysRole) \
19+
.filter(SysRole.status == 0, SysRole.del_flag == 0, SysRole.role_name == role_name) \
20+
.order_by(desc(SysRole.create_time)).distinct().first()
21+
22+
return query_role_info
623

724

825
def get_role_by_id(db: Session, role_id: int):
@@ -15,9 +32,156 @@ def get_role_by_id(db: Session, role_id: int):
1532
return role_info
1633

1734

35+
def get_role_detail_by_id(db: Session, role_id: int):
36+
"""
37+
根据role_id获取角色详细信息
38+
:param db: orm对象
39+
:param role_id: 角色id
40+
:return: 当前role_id的角色信息对象
41+
"""
42+
query_role_basic_info = db.query(SysRole) \
43+
.filter(SysRole.del_flag == 0, SysRole.role_id == role_id) \
44+
.distinct().first()
45+
query_role_menu_info = db.query(SysMenu).select_from(SysRole) \
46+
.filter(SysRole.del_flag == 0, SysRole.role_id == role_id) \
47+
.outerjoin(SysRoleMenu, SysRole.role_id == SysRoleMenu.role_id) \
48+
.outerjoin(SysMenu, and_(SysRoleMenu.menu_id == SysMenu.menu_id, SysMenu.status == 0)) \
49+
.distinct().all()
50+
results = dict(
51+
role=object_format_datetime(query_role_basic_info),
52+
menu=list_format_datetime(query_role_menu_info),
53+
)
54+
55+
return RoleDetailModel(**results)
56+
57+
1858
def get_role_select_option_crud(db: Session):
1959
role_info = db.query(SysRole) \
2060
.filter(SysRole.status == 0, SysRole.del_flag == 0) \
2161
.all()
2262

2363
return role_info
64+
65+
66+
def get_role_list(db: Session, page_object: RolePageObject):
67+
"""
68+
根据查询参数获取角色列表信息
69+
:param db: orm对象
70+
:param page_object: 分页查询参数对象
71+
:return: 角色列表信息对象
72+
"""
73+
count = db.query(SysRole) \
74+
.filter(SysRole.del_flag == 0,
75+
SysRole.role_name.like(f'%{page_object.role_name}%') if page_object.role_name else True,
76+
SysRole.role_key.like(f'%{page_object.role_key}%') if page_object.role_key else True,
77+
SysRole.status == page_object.status if page_object.status else True,
78+
SysRole.create_time.between(
79+
datetime.combine(datetime.strptime(page_object.create_time_start, '%Y-%m-%d'), time(00, 00, 00)),
80+
datetime.combine(datetime.strptime(page_object.create_time_end, '%Y-%m-%d'), time(23, 59, 59)))
81+
if page_object.create_time_start and page_object.create_time_end else True
82+
)\
83+
.order_by(SysRole.role_sort)\
84+
.distinct().count()
85+
offset_com = (page_object.page_num - 1) * page_object.page_size
86+
page_info = get_page_info(offset_com, page_object.page_num, page_object.page_size, count)
87+
role_list = db.query(SysRole) \
88+
.filter(SysRole.del_flag == 0,
89+
SysRole.role_name.like(f'%{page_object.role_name}%') if page_object.role_name else True,
90+
SysRole.role_key.like(f'%{page_object.role_key}%') if page_object.role_key else True,
91+
SysRole.status == page_object.status if page_object.status else True,
92+
SysRole.create_time.between(
93+
datetime.combine(datetime.strptime(page_object.create_time_start, '%Y-%m-%d'), time(00, 00, 00)),
94+
datetime.combine(datetime.strptime(page_object.create_time_end, '%Y-%m-%d'), time(23, 59, 59)))
95+
if page_object.create_time_start and page_object.create_time_end else True
96+
) \
97+
.order_by(SysRole.role_sort) \
98+
.offset(page_info.offset) \
99+
.limit(page_object.page_size) \
100+
.distinct().all()
101+
102+
result = dict(
103+
rows=list_format_datetime(role_list),
104+
page_num=page_info.page_num,
105+
page_size=page_info.page_size,
106+
total=page_info.total,
107+
has_next=page_info.has_next
108+
)
109+
110+
return RolePageObjectResponse(**result)
111+
112+
113+
def add_role_crud(db: Session, role: RoleModel):
114+
"""
115+
新增角色数据库操作
116+
:param db: orm对象
117+
:param role: 角色对象
118+
:return: 新增校验结果
119+
"""
120+
db_role = SysRole(**role.dict())
121+
db.add(db_role)
122+
db.commit() # 提交保存到数据库中
123+
db.refresh(db_role) # 刷新
124+
result = dict(is_success=True, message='新增成功')
125+
126+
return CrudRoleResponse(**result)
127+
128+
129+
def edit_role_crud(db: Session, role: RoleModel):
130+
"""
131+
编辑角色数据库操作
132+
:param db: orm对象
133+
:param role: 角色对象
134+
:return: 编辑校验结果
135+
"""
136+
is_role_id = db.query(SysRole).filter(SysRole.role_id == role.role_id).all()
137+
if not is_role_id:
138+
result = dict(is_success=False, message='角色不存在')
139+
else:
140+
# 筛选出属性值为不为None和''的
141+
filtered_dict = {k: v for k, v in role.dict().items() if v is not None and v != ''}
142+
db.query(SysRole) \
143+
.filter(SysRole.role_id == role.role_id) \
144+
.update(filtered_dict)
145+
db.commit() # 提交保存到数据库中
146+
result = dict(is_success=True, message='更新成功')
147+
148+
return CrudRoleResponse(**result)
149+
150+
151+
def delete_role_crud(db: Session, role: RoleModel):
152+
"""
153+
删除角色数据库操作
154+
:param db: orm对象
155+
:param user: 角色对象
156+
:return:
157+
"""
158+
db.query(SysRole) \
159+
.filter(SysRole.role_id == role.role_id) \
160+
.update({SysRole.del_flag: '2', SysRole.update_by: role.update_by, SysRole.update_time: role.update_time})
161+
db.commit() # 提交保存到数据库中
162+
163+
164+
def add_role_menu_crud(db: Session, role_menu: RoleMenuModel):
165+
"""
166+
新增角色菜单关联信息数据库操作
167+
:param db: orm对象
168+
:param role_menu: 用户角色菜单关联对象
169+
:return:
170+
"""
171+
db_role_menu = SysRoleMenu(**role_menu.dict())
172+
db.add(db_role_menu)
173+
db.commit() # 提交保存到数据库中
174+
db.refresh(db_role_menu) # 刷新
175+
176+
177+
def delete_role_menu_crud(db: Session, role_menu: RoleMenuModel):
178+
"""
179+
删除角色菜单关联信息数据库操作
180+
:param db: orm对象
181+
:param role_menu: 角色菜单关联对象
182+
:return:
183+
"""
184+
db.query(SysRoleMenu) \
185+
.filter(SysRoleMenu.role_id == role_menu.role_id) \
186+
.delete()
187+
db.commit() # 提交保存到数据库中

dash-fastapi-backend/mapper/crud/user_crud.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from sqlalchemy import and_
1+
from sqlalchemy import and_, desc
22
from sqlalchemy.orm import Session
33
from entity.user_entity import SysUser, SysUserRole, SysUserPost
44
from entity.role_entity import SysRole, SysRoleMenu
@@ -21,7 +21,7 @@ def get_user_by_name(db: Session, user_name: str):
2121
"""
2222
query_user_info = db.query(SysUser) \
2323
.filter(SysUser.status == 0, SysUser.del_flag == 0, SysUser.user_name == user_name) \
24-
.distinct().first()
24+
.order_by(desc(SysUser.create_time)).distinct().first()
2525

2626
return query_user_info
2727

dash-fastapi-backend/mapper/schema/menu_schema.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@
33

44

55
class MenuModel(BaseModel):
6+
"""
7+
菜单表对应pydantic模型
8+
"""
69
menu_id: Optional[int]
710
menu_name: Optional[str]
811
parent_id: Optional[int]
@@ -25,6 +28,13 @@ class MenuModel(BaseModel):
2528

2629
class Config:
2730
orm_mode = True
31+
32+
33+
class MenuTreeModel(MenuModel):
34+
"""
35+
菜单树查询模型
36+
"""
37+
type: Optional[str]
2838

2939

3040
class MenuPageObject(MenuModel):

0 commit comments

Comments
 (0)