77from itertools import groupby
88from operator import itemgetter
99
10- from flask import jsonify , request
10+ from flask import jsonify
11+ from lin .core import get_ep_infos , route_meta
12+ from lin .exception import Success
13+ from lin .jwt import admin_required
1114from lin .log import Logger
12-
1315from lin .redprint import Redprint
14- from lin .core import get_ep_infos , manager , find_auth_module , route_meta , find_user
15- from lin .jwt import admin_required
16- from lin .util import paginate
17- from lin .db import db , get_total_nums
18- from lin .enums import UserSuper , UserActive
19- from lin .exception import NotFound , Forbidden , Success , ParameterException
2016
17+ from app .dao .auth import AuthDAO
18+ from app .dao .group import GroupDAO
19+ from app .dao .user import UserDAO
2120from app .validators .forms import NewGroup , DispatchAuth , DispatchAuths , RemoveAuths , UpdateGroup , ResetPasswordForm , \
2221 UpdateUserInfoForm
2322
@@ -35,157 +34,81 @@ def authority():
3534@route_meta (auth = '查询所有用户' , module = '管理员' , mount = False )
3635@admin_required
3736def get_admin_users ():
38- start , count = paginate ()
39- group_id = request .args .get ('group_id' )
40- condition = {'super' : UserSuper .COMMON .value , 'group_id' : group_id } if group_id else {
41- 'super' : UserSuper .COMMON .value }
42- users = db .session .query (manager .user_model , manager .group_model .name ) \
43- .filter_by (soft = True , ** condition ) \
44- .join (manager .group_model , manager .user_model .group_id == manager .group_model .id ) \
45- .offset (start ).limit (count ).all ()
46- user_and_group = []
47- for user , group_name in users :
48- setattr (user , 'group_name' , group_name )
49- user ._fields .append ('group_name' )
50- user .hide ('update_time' , 'delete_time' )
51- user_and_group .append (user )
52- # 有分组的时候就加入分组条件
53- # total_nums = get_total_nums(manager.user_model, is_soft=True, super=UserSuper.COMMON.value)
54- total_nums = get_total_nums (manager .user_model , is_soft = True , ** condition )
37+ user_and_group , total_nums = UserDAO ().get_all ()
5538 return jsonify ({
5639 "collection" : user_and_group ,
57- # 超级管理员不算入总数
5840 'total_nums' : total_nums
5941 })
6042
6143
62- @admin_api .route ('/password/<int:id >' , methods = ['PUT' ])
44+ @admin_api .route ('/password/<int:uid >' , methods = ['PUT' ])
6345@route_meta (auth = '修改用户密码' , module = '管理员' , mount = False )
6446@admin_required
65- def change_user_password (id ):
47+ def change_user_password (uid ):
6648 form = ResetPasswordForm ().validate_for_api ()
67- user = find_user (id = id )
68- if user is None :
69- raise NotFound (msg = '用户不存在' )
70- with db .auto_commit ():
71- user .reset_password (form .new_password .data )
49+ UserDAO ().reset_user_password (uid , form .new_password .data )
7250 return Success (msg = '密码修改成功' )
7351
7452
75- @admin_api .route ('/<int:id >' , methods = ['DELETE' ])
53+ @admin_api .route ('/<int:uid >' , methods = ['DELETE' ])
7654@route_meta (auth = '删除用户' , module = '管理员' , mount = False )
7755@Logger (template = '管理员删除了一个用户' ) # 记录日志
7856@admin_required
79- def delete_user (id ):
80- user = manager .user_model .get (id = id )
81- if user is None :
82- raise NotFound (msg = '用户不存在' )
83- # user.delete(commit=True)
84- # 此处我们使用硬删除,一般情况下,推荐使用软删除即,上一行注释的代码
85- user .hard_delete (commit = True )
57+ def delete_user (uid ):
58+ UserDAO ().remove_user (uid )
8659 return Success (msg = '操作成功' )
8760
8861
89- @admin_api .route ('/<int:id >' , methods = ['PUT' ])
62+ @admin_api .route ('/<int:uid >' , methods = ['PUT' ])
9063@route_meta (auth = '管理员更新用户信息' , module = '管理员' , mount = False )
9164@admin_required
92- def update_user (id ):
65+ def update_user (uid ):
9366 form = UpdateUserInfoForm ().validate_for_api ()
94- user = manager .user_model .get (id = id )
95- if user is None :
96- raise NotFound (msg = '用户不存在' )
97- if user .email != form .email .data :
98- exit = manager .user_model .get (email = form .email .data )
99- if exit :
100- raise ParameterException (msg = '邮箱已被注册,请重新输入邮箱' )
101- with db .auto_commit ():
102- user .email = form .email .data
103- user .group_id = form .group_id .data
67+ UserDAO ().update (uid , form )
10468 return Success (msg = '操作成功' )
10569
10670
107- @admin_api .route ('/disable/<int:id >' , methods = ['PUT' ])
71+ @admin_api .route ('/disable/<int:uid >' , methods = ['PUT' ])
10872@route_meta (auth = '禁用用户' , module = '管理员' , mount = False )
10973@admin_required
110- def trans2disable (id ):
111- user = manager .user_model .get (id = id )
112- if user is None :
113- raise NotFound (msg = '用户不存在' )
114- if not user .is_active :
115- raise Forbidden (msg = '当前用户已处于禁止状态' )
116- with db .auto_commit ():
117- user .active = UserActive .NOT_ACTIVE .value
74+ def trans2disable (uid ):
75+ UserDAO ().change_status (uid , 'active' )
11876 return Success (msg = '操作成功' )
11977
12078
121- @admin_api .route ('/active/<int:id >' , methods = ['PUT' ])
79+ @admin_api .route ('/active/<int:uid >' , methods = ['PUT' ])
12280@route_meta (auth = '激活用户' , module = '管理员' , mount = False )
12381@admin_required
124- def trans2active (id ):
125- user = manager .user_model .get (id = id )
126- if user is None :
127- raise NotFound (msg = '用户不存在' )
128- if user .is_active :
129- raise Forbidden (msg = '当前用户已处于激活状态' )
130- with db .auto_commit ():
131- user .active = UserActive .ACTIVE .value
82+ def trans2active (uid ):
83+ UserDAO ().change_status (uid , 'disable' )
13284 return Success (msg = '操作成功' )
13385
13486
13587@admin_api .route ('/groups' , methods = ['GET' ])
13688@route_meta (auth = '查询所有权限组及其权限' , module = '管理员' , mount = False )
13789@admin_required
13890def get_admin_groups ():
139- start , count = paginate ()
140- groups = manager .group_model .query .filter ().offset (start ).limit (count ).all ()
141- if groups is None :
142- raise NotFound (msg = '不存在任何权限组' )
143- for group in groups :
144- auths = db .session .query (manager .auth_model .auth , manager .auth_model .module ) \
145- .filter_by (soft = False , group_id = group .id ).all ()
146- auths = [{'auth' : auth [0 ], 'module' : auth [1 ]} for auth in auths ]
147- res = _split_modules (auths )
148- setattr (group , 'auths' , res )
149- group ._fields .append ('auths' )
150- total_nums = get_total_nums (manager .group_model )
91+ groups_info , total_nums = GroupDAO ().get_groups_info ()
92+
15193 return jsonify ({
152- "collection" : groups ,
94+ "collection" : groups_info ,
15395 'total_nums' : total_nums
15496 })
15597
15698
157- def _split_modules (auths ):
158- auths .sort (key = itemgetter ('module' ))
159- tmps = groupby (auths , itemgetter ('module' ))
160- res = []
161- for key , group in tmps :
162- res .append ({key : list (group )})
163- return res
164-
165-
16699@admin_api .route ('/group/all' , methods = ['GET' ])
167100@route_meta (auth = '查询所有权限组' , module = '管理员' , mount = False )
168101@admin_required
169102def get_all_group ():
170- groups = manager .group_model .get (one = False )
171- if groups is None :
172- raise NotFound (msg = '不存在任何权限组' )
103+ groups = GroupDAO ().get_all ()
173104 return jsonify (groups )
174105
175106
176- @admin_api .route ('/group/<int:id >' , methods = ['GET' ])
107+ @admin_api .route ('/group/<int:gid >' , methods = ['GET' ])
177108@route_meta (auth = '查询一个权限组及其权限' , module = '管理员' , mount = False )
178109@admin_required
179- def get_group (id ):
180- group = manager .group_model .get (id = id , one = True , soft = False )
181- if group is None :
182- raise NotFound (msg = '分组不存在' )
183- auths = db .session .query (manager .auth_model .auth , manager .auth_model .module ) \
184- .filter_by (soft = False , group_id = group .id ).all ()
185- auths = [{'auth' : auth [0 ], 'module' : auth [1 ]} for auth in auths ]
186- res = _split_modules (auths )
187- setattr (group , 'auths' , res )
188- group ._fields .append ('auths' )
110+ def get_group (gid ):
111+ group = GroupDAO ().get_single_info (gid )
189112 return jsonify (group )
190113
191114
@@ -195,73 +118,43 @@ def get_group(id):
195118@admin_required
196119def create_group ():
197120 form = NewGroup ().validate_for_api ()
198- exist = manager .group_model .get (name = form .name .data )
199- if exist :
200- raise Forbidden (msg = '分组已存在,不可创建同名分组' )
201- with db .auto_commit ():
202- group = manager .group_model .create (name = form .name .data , info = form .info .data )
203- db .session .flush ()
204- for auth in form .auths .data :
205- meta = find_auth_module (auth )
206- if meta :
207- manager .auth_model .create (auth = meta .auth , module = meta .module , group_id = group .id )
121+ GroupDAO ().new_group (form )
208122 return Success (msg = '新建分组成功' )
209123
210124
211- @admin_api .route ('/group/<int:id >' , methods = ['PUT' ])
125+ @admin_api .route ('/group/<int:gid >' , methods = ['PUT' ])
212126@route_meta (auth = '更新一个权限组' , module = '管理员' , mount = False )
213127@admin_required
214- def update_group (id ):
128+ def update_group (gid ):
215129 form = UpdateGroup ().validate_for_api ()
216- exist = manager .group_model .get (id = id )
217- if not exist :
218- raise NotFound (msg = '分组不存在,更新失败' )
219- exist .update (name = form .name .data , info = form .info .data , commit = True )
130+ GroupDAO ().update_group (gid , form )
220131 return Success (msg = '更新分组成功' )
221132
222133
223- @admin_api .route ('/group/<int:id >' , methods = ['DELETE' ])
134+ @admin_api .route ('/group/<int:gid >' , methods = ['DELETE' ])
224135@route_meta (auth = '删除一个权限组' , module = '管理员' , mount = False )
225136@Logger (template = '管理员删除一个权限组' ) # 记录日志
226137@admin_required
227- def delete_group (id ):
228- exist = manager .group_model .get (id = id )
229- if not exist :
230- raise NotFound (msg = '分组不存在,删除失败' )
231- if manager .user_model .get (group_id = id ):
232- raise Forbidden (msg = '分组下存在用户,不可删除' )
233- # 删除group拥有的权限
234- db .session .query (manager .auth_model ).filter (manager .auth_model .group_id == id ).delete ()
235- exist .delete (commit = True )
138+ def delete_group (gid ):
139+ GroupDAO ().remove_group (gid )
236140 return Success (msg = '删除分组成功' )
237141
238142
239143@admin_api .route ('/dispatch' , methods = ['POST' ])
240144@route_meta (auth = '分配单个权限' , module = '管理员' , mount = False )
241145@admin_required
242146def dispatch_auth ():
243- form = DispatchAuth ()
244- form .validate_for_api ()
245- one = manager .auth_model .get (group_id = form .group_id .data , auth = form .auth .data )
246- if one :
247- raise Forbidden (msg = '已有权限,不可重复添加' )
248- meta = find_auth_module (form .auth .data )
249- manager .auth_model .create (group_id = form .group_id .data , auth = meta .auth , module = meta .module , commit = True )
147+ form = DispatchAuth ().validate_for_api ()
148+ AuthDAO ().patch_one (form )
250149 return Success (msg = '添加权限成功' )
251150
252151
253152@admin_api .route ('/dispatch/patch' , methods = ['POST' ])
254153@route_meta (auth = '分配多个权限' , module = '管理员' , mount = False )
255154@admin_required
256155def dispatch_auths ():
257- form = DispatchAuths ()
258- form .validate_for_api ()
259- with db .auto_commit ():
260- for auth in form .auths .data :
261- one = manager .auth_model .get (group_id = form .group_id .data , auth = auth )
262- if not one :
263- meta = find_auth_module (auth )
264- manager .auth_model .create (group_id = form .group_id .data , auth = meta .auth , module = meta .module )
156+ form = DispatchAuths ().validate_for_api ()
157+ AuthDAO ().patch_all (form )
265158 return Success (msg = '添加权限成功' )
266159
267160
@@ -270,13 +163,18 @@ def dispatch_auths():
270163@admin_required
271164def remove_auths ():
272165 form = RemoveAuths ().validate_for_api ()
273- with db .auto_commit ():
274- db .session .query (manager .auth_model ) \
275- .filter (manager .auth_model .auth .in_ (form .auths .data ),
276- manager .auth_model .group_id == form .group_id .data ) \
277- .delete (synchronize_session = False )
166+ AuthDAO ().remove_auths (form )
278167 return Success (msg = '删除权限成功' )
279168
169+
170+ def _split_modules (auths ):
171+ auths .sort (key = itemgetter ('module' ))
172+ tmps = groupby (auths , itemgetter ('module' ))
173+ res = []
174+ for key , group in tmps :
175+ res .append ({key : list (group )})
176+ return res
177+
280178# --------------------------------------------------
281179# --------------------Abandon-----------------------
282180# --------------------------------------------------
0 commit comments