From 04d01aa2739a93a92db38c6ec983a6eae9cd8ce8 Mon Sep 17 00:00:00 2001 From: RobbieHan Date: Wed, 14 Nov 2018 18:49:00 +0800 Subject: [PATCH] role2uesr --- .idea/workspace.xml | 286 ++++++++++-------- apps/__pycache__/custom.cpython-36.pyc | Bin 2259 -> 2340 bytes apps/custom.py | 5 +- apps/system/__pycache__/urls.cpython-36.pyc | Bin 1973 -> 2124 bytes .../__pycache__/views_role.cpython-36.pyc | Bin 1472 -> 3179 bytes apps/system/urls.py | 2 + apps/system/views_role.py | 47 +++ db.sqlite3 | Bin 208896 -> 208896 bytes templates/system/role.html | 95 +++++- templates/system/role_role2user.html | 105 +++++++ 10 files changed, 416 insertions(+), 124 deletions(-) create mode 100644 templates/system/role_role2user.html diff --git a/.idea/workspace.xml b/.idea/workspace.xml index b374108..d6d17e3 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -2,8 +2,11 @@ + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -82,7 +143,7 @@ true DEFINITION_ORDER - + - - - - @@ -182,6 +234,10 @@ + + + + - + + + - - + - + - - - - - - - - - - - - - - @@ -299,13 +342,6 @@ - - - - - - - @@ -584,14 +620,6 @@ - - - - - - - - @@ -608,10 +636,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + @@ -629,94 +697,70 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/__pycache__/custom.cpython-36.pyc b/apps/__pycache__/custom.cpython-36.pyc index 1a6857e80e2b4704be9a709e57f768eb5c61b8a2..197c1ca6318ab6747b2da084b8e13034894663ae 100644 GIT binary patch delta 188 zcmcaCxI~E4n3tE!^x5m^uNygYnHdEpmoradWZKNd;>yUVIyrzfo>6)823BQ8M!m^b z*i?NK7#J8*8KM|d7^0X`7^9fm8PXV2m{OQqIHFkE8CV#iSc4ffS#AjiC+4Lj}f+k_8cRAVP2Q dV|F86Qy{aL1xRo(vM^3o;8@2h%Ev9j4gh3ME*}5@ delta 154 zcmZ1?bXkzon3tDJzvE@};*FfS%#8e#%b6!JGH&K#ab;vwnH<0xI{1FJG4qweG@ zY^tU*3=9mZ3{i|J3{gz&3~7uhj44bl98t{e3@i*$EWr$#%(n!C6Z2A%@+(3MQW8s2 z!!lFLCs(jHF`7;O&92JJS|kKCp-2`)$W1olFyb}=GK-mj1P9aPLXLH;B7EE;>;SBh BBj*4B diff --git a/apps/custom.py b/apps/custom.py index fc91465..b7d92db 100644 --- a/apps/custom.py +++ b/apps/custom.py @@ -12,6 +12,7 @@ from system.mixin import LoginRequiredMixin class SandboxGetObjectMixin: + def get_object(self, queryset=None): if queryset is None: @@ -50,7 +51,7 @@ class SandboxCreateView(LoginRequiredMixin, SandboxEditViewMixin, CreateView): class SandboxUpdateView(LoginRequiredMixin, SandboxEditViewMixin, SandboxGetObjectMixin, UpdateView): - + """View for updating an object, with a response rendered by a template.""" def post(self, request, *args, **kwargs): self.object = self.get_object() - return super().post(request, *args, **kwargs) \ No newline at end of file + return super().post(request, *args, **kwargs) diff --git a/apps/system/__pycache__/urls.cpython-36.pyc b/apps/system/__pycache__/urls.cpython-36.pyc index 0eaf445842abf907f5aae890033ad39d5231d087..ba70b304c4e1e8f521a4d36cea9c1a3c675c4899 100644 GIT binary patch delta 228 zcmdnWe?~yrn3tDJ^vCPyxtt6Pj~S4F43O;r#Ko^RDj#IjOJz(kPUXl_$l_{dNHIy_ z=w$|qm;yxZhdUq?V-WR|$ZG zbU{M85TPm&gd&izQE72%kxG>?LLFSxPg8kw59?e;=_tM+ph_38kztvsju$5ogn3tDp>Xz5hcQ_ar9y1^TDInVch>MSHR6fYal`a;gkYXInplPyMh-o%6 Xv!ABoCbqeZllQQPF&a%4<}d{S#$yrs diff --git a/apps/system/__pycache__/views_role.cpython-36.pyc b/apps/system/__pycache__/views_role.cpython-36.pyc index 98edcd2011dc05d42e0592e099e1795e1f48adfc..8ad075c788d808d93d90db1c1d0523a82d9221a5 100644 GIT binary patch delta 1721 zcmah}OK%)S5bo}I?0dc5T|WU~Y$O;6HgU`wL?l9TGYA`y7NPNGyY1{`_K}`m0oJUR zXoCa?AHb0i@B={HLJnMW;8)BQ0TwxM&xx;Q9TVrmjHbG(y1J*kzOU*|;qLs(xl$>A z``+D;w)2er&K`Ii=;!f8e}BF5!}cX6r)Bj9lU0>fVr)06lF3?Vb!v?oXVB|my))C8 zN%a}{XB)GeshKfr%wg@UoWt6=Pg>&m z7&b=w-lAjdKo};u6bF1Lq!sgkUv>2+jnZ0RdeaD#ddUiGX^;6>3@zgXZjgyB=^XGN zJ7zec8w;6votd1;2ZdOS#$0A)?m*yB`OS+SPh72{L1^?W{&|m|Ax~TSe!IJ^pN4C{ z((L!ccB^UHz3y5N^|~I{ie@g>MlYup&Jea?O~IOo3i<7RFESpqs0hJ$p4a&- zuktM4ubs~9Dn)K$_X6THMe7n{F4O0r9^SEMMo&SZFCq-GLX(c`Pwy$?_bvyjg+cop z&u_q4Cg&hh+VAvmk4fITQt1{JojkPBd3@0lgklXYSwl$Pup~gd!5RQcIv5@4Zn2S< zNlJ9)_4lzakzw#CmgSf59R2vs(O19x@x|?<>o@byHedh~0F`}Q*02^vRM&1= z*LIMR&K?^Js_NJVNI9zJ*wUYWx=fWE6j9~w0l&aLt_+fc1 zsh|=I{4yu=Y0(#`=+nwRhETtZ6DPv-yb;&WK>xqGpPuCSA-JB!$`mtwhW5)KL23O` zJ`<-Es;1U&QVjJ3y+&RO{CKb#jNtU#{{TxYv?jey@dRCB6JQTDgtVG3Vm6}wMg71A zYIVG%)p>Pb;RG!V2!Whh;DY#jPQImy9Q)qHD d_w>oCJW3KGKm{C3Jd8jHCIy&;V4wwJ{ diff --git a/apps/system/urls.py b/apps/system/urls.py index c9f86b9..9537e25 100644 --- a/apps/system/urls.py +++ b/apps/system/urls.py @@ -31,4 +31,6 @@ urlpatterns = [ path('rbac/role/create/', views_role.RoleCreateView.as_view(), name='rbac-role-create'), path('rbac/role/list/', views_role.RoleListView.as_view(), name='rbac-role-list'), path('rbac/role/update/', views_role.RoleUpdateView.as_view(), name='rbac-role-update'), + path('rbac/role/delete/', views_role.RoleDeleteView.as_view(), name='rbac-role-delete'), + path('rbac/role/role2user$', views_role.Role2UserView.as_view(), name="rbac-role-role2user"), ] diff --git a/apps/system/views_role.py b/apps/system/views_role.py index 0abe1c9..b10f814 100644 --- a/apps/system/views_role.py +++ b/apps/system/views_role.py @@ -34,3 +34,50 @@ class RoleUpdateView(SandboxUpdateView): model = Role fields = '__all__' template_name_suffix = '_update' + + +class RoleDeleteView(LoginRequiredMixin, View): + + def post(self, request): + ret = dict(result=False) + if 'id' in request.POST and request.POST['id']: + id_list = map(int, request.POST['id'].split(',')) + Role.objects.filter(id__in=id_list).delete() + ret['result'] = True + return HttpResponse(json.dumps(ret), content_type='application/json') + + +from django.shortcuts import get_object_or_404 +from django.contrib.auth import get_user_model +from django.shortcuts import render + +User = get_user_model() + +class Role2UserView(LoginRequiredMixin, View): + """ + 角色关联用户 + """ + + def get(self, request): + if 'id' in request.GET and request.GET['id']: + role = get_object_or_404(Role, pk=int(request.GET.get('id'))) + added_users = role.userprofile_set.all() + all_users = User.objects.all() + un_add_users = set(all_users).difference(added_users) + ret = dict(role=role, added_users=added_users, un_add_users=list(un_add_users)) + return render(request, 'system/role_role2user.html', ret) + + def post(self, request): + res = dict(result=False) + id_list = None + role = get_object_or_404(Role, pk=int(request.POST.get('id'))) + if 'to' in request.POST and request.POST['to']: + id_list = map(int, request.POST.getlist('to', [])) + role.userprofile_set.clear() + if id_list: + for user in User.objects.filter(id__in=id_list): + role.userprofile_set.add(user) + res['result'] = True + return HttpResponse(json.dumps(res), content_type='application/json') + + diff --git a/db.sqlite3 b/db.sqlite3 index 2a8b9eb211276629ace11f9f912d2ef72fcea5a1..5d4dbd983cc04c3d74f97299a370ae46669b570f 100644 GIT binary patch delta 639 zcmYk2T}V@57{}lDocG<%v2D-1&|F#DauQB-J7?bmFQye;M1B;Bd7(!APDMe7+wtY-kTA06I~b~l8&tlBT2Az(Yuw@d-3P_`28Pv|JiL_c3Zc6 z8kbhu2XN`_@(Blitl8q>8*HsLPi{ic#1rI0qw18A5Y&nG zo)#+EXXQt4_8t@wLIzBb8Onv1<>mXkD^KJmHsfFi!44cS|2sHk;(eI8ch`-4C;s0} ziU)(Zd9{g$DuVA&g(GJ81m`pYK^Rj)wFHTnP?5DF)z=Rj#t~Qz~_2YNkz+3j;zHtv2|FT|9nD!JGtzc=9bIrF_|x${MFCj9WJ*ERh%C;P+tSpT~cJe>Z<5|7-q2{$75M&4LLA{F?mS z%*u?#mBl5gx$#B$IjKxyY|Mr*fzsmCqJpCQw9K4TmgYkJ>4o}?Q`xRD^MByK2Go6u z-%ON=g+X2P+01n>8)iM9vf^3Cc0(g$BVz^z20lg>26_JH>lQwr(DroV3_~uU7!&_P z2L6ZqpMiR>@(T$vt23hLWZM4OpHXnbW|o4#{M>wD3{1SO4E&0`t(z4UDtV{3$}*ki zD$&a-NM`{Wb$Yt0JX4mCfvJL#v6X?Pm5HUEfq{vEnbGux@=V^_73G<(3UIS {% endblock %} \ No newline at end of file diff --git a/templates/system/role_role2user.html b/templates/system/role_role2user.html new file mode 100644 index 0000000..332f7e9 --- /dev/null +++ b/templates/system/role_role2user.html @@ -0,0 +1,105 @@ +{% extends 'base-layer.html' %} +{% load staticfiles %} + +{% block css %} + +{% endblock %} +{% block main %} +
+
+ {% csrf_token %} + +
+
+
+ + +
+
+





+ + + + +
+
+ + +
+
+
+
+

*注意:一个用户可以添加到多个角色中,继承多个角色的权限

+
+
+
+ +
+
+{% endblock %} + +{% block javascripts %} + + +{% endblock %}