diff --git "a/luffy_permission-\347\251\272\347\231\275\347\211\210/.idea/dataSources/86090516-39a3-4a0f-a8df-5e5e14165788.xml" "b/luffy_permission-\347\251\272\347\231\275\347\211\210/.idea/dataSources/86090516-39a3-4a0f-a8df-5e5e14165788.xml" index ec83443d38ed71c74af2f59fc4e9598a1f08bbcf..1ba77b63a5f2ab4946bdba06b0709b252f94a05d 100644 --- "a/luffy_permission-\347\251\272\347\231\275\347\211\210/.idea/dataSources/86090516-39a3-4a0f-a8df-5e5e14165788.xml" +++ "b/luffy_permission-\347\251\272\347\231\275\347\211\210/.idea/dataSources/86090516-39a3-4a0f-a8df-5e5e14165788.xml" @@ -21,656 +21,712 @@
-
-
-
-
-
-
+
+
+
+
+
+
+
1
- +
1
- -
- +
+
+ 1 integer|0s 1 1 - + 2 varchar(80)|0s 1 - + 1 name 1 - + id 1 - + name sqlite_autoindex_auth_group_1 - + 1 integer|0s 1 1 - + 2 integer|0s 1 - + 3 integer|0s 1 - + group_id permission_id 1 - + group_id - + permission_id - + id 1 - + group_id auth_group id - + permission_id auth_permission id - + 1 integer|0s 1 1 - + 2 integer|0s 1 - + 3 varchar(100)|0s 1 - + 4 varchar(255)|0s 1 - + content_type_id codename 1 - + content_type_id - + id 1 - + content_type_id django_content_type id - + 1 integer|0s 1 1 - + 2 varchar(128)|0s 1 - + 3 datetime|0s - + 4 bool|0s 1 - + 5 varchar(30)|0s 1 - + 6 varchar(30)|0s 1 - + 7 varchar(254)|0s 1 - + 8 bool|0s 1 - + 9 bool|0s 1 - + 10 datetime|0s 1 - + 11 varchar(150)|0s 1 - + 1 username 1 - + id 1 - + username sqlite_autoindex_auth_user_1 - + 1 integer|0s 1 1 - + 2 integer|0s 1 - + 3 integer|0s 1 - + user_id group_id 1 - + user_id - + group_id - + id 1 - + user_id auth_user id - + group_id auth_group id - + 1 integer|0s 1 1 - + 2 integer|0s 1 - + 3 integer|0s 1 - + user_id permission_id 1 - + user_id - + permission_id - + id 1 - + user_id auth_user id - + permission_id auth_permission id - + 1 integer|0s 1 1 - + 2 text|0s - + 3 varchar(200)|0s 1 - + 4 smallint unsigned|0s 1 - + 5 text|0s 1 - + 6 integer|0s - + 7 integer|0s 1 - + 8 datetime|0s 1 - + content_type_id - + user_id - + id 1 - + content_type_id django_content_type id - + user_id auth_user id - + 1 integer|0s 1 1 - + 2 varchar(100)|0s 1 - + 3 varchar(100)|0s 1 - + app_label model 1 - + id 1 - + 1 integer|0s 1 1 - + 2 varchar(255)|0s 1 - + 3 varchar(255)|0s 1 - + 4 datetime|0s 1 - + id 1 - + 1 varchar(40)|0s 1 - + 2 text|0s 1 - + 3 datetime|0s 1 - + 1 session_key 1 - + expire_date - + session_key 1 sqlite_autoindex_django_session_1 - + 1 integer|0s 1 1 - + + 2 + varchar(32)|0s + 1 + + + 3 + varchar(64)|0s + + + 4 + integer|0s + 1 + + + id + 1 + + + 1 + integer|0s + 1 + 1 + + 2 varchar(108)|0s 1 - + 3 varchar(32)|0s 1 - + + 4 + integer|0s + + + 5 + varchar(32)|0s + 1 + + + 6 + integer|0s + + + menu_id + + + + parent_id + + + id 1 - + + menu_id + rabc_menu + id + + + parent_id + rabc_permission + id + + 1 integer|0s 1 1 - + 2 varchar(32)|0s 1 - + id 1 - + 1 integer|0s 1 1 - + 2 integer|0s 1 - + 3 integer|0s 1 - + role_id permission_id 1 - + role_id - + permission_id - + id 1 - + role_id rabc_role id - + permission_id rabc_permission id - + 1 integer|0s 1 1 - + 2 varchar(32)|0s 1 - + 3 varchar(32)|0s 1 - + id 1 - + 1 integer|0s 1 1 - + 2 integer|0s 1 - + 3 integer|0s 1 - + user_id role_id 1 - + user_id - + role_id - + id 1 - + user_id rabc_user id - + role_id rabc_role id - + 1 text|0s - + 2 text|0s - + 3 text|0s - + 4 int|0s - + 5 text|0s - + 1 - + 2 - + 1 integer|0s 1 1 - + 2 varchar(32)|0s 1 - + 3 varchar(32)|0s 1 - + 4 varchar(32)|0s 1 - + 5 varchar(32)|0s 1 - + id 1 - + 1 integer|0s 1 1 - + 2 integer|0s 1 - + 3 datetime|0s 1 - + 4 integer|0s 1 - + customer_id - + id 1 - + customer_id web_customer id diff --git "a/luffy_permission-\347\251\272\347\231\275\347\211\210/.idea/dataSources/e4c24a35-2c1f-48b2-bb7a-5dc9ccac8fae.xml" "b/luffy_permission-\347\251\272\347\231\275\347\211\210/.idea/dataSources/e4c24a35-2c1f-48b2-bb7a-5dc9ccac8fae.xml" deleted file mode 100644 index 47624ce41c738809ca4312480450c63dc2a88962..0000000000000000000000000000000000000000 --- "a/luffy_permission-\347\251\272\347\231\275\347\211\210/.idea/dataSources/e4c24a35-2c1f-48b2-bb7a-5dc9ccac8fae.xml" +++ /dev/null @@ -1,531 +0,0 @@ - - - - - 3.25.1 - - - 1 - 1 - - - - -
-
-
-
-
-
-
-
-
-
-
- 1 -
- - 1 -
- -
- - 1 - integer|0s - 1 - 1 - - - 2 - varchar(80)|0s - 1 - - - 1 - name - - 1 - - - id - 1 - - - name - sqlite_autoindex_auth_group_1 - - - 1 - integer|0s - 1 - 1 - - - 2 - integer|0s - 1 - - - 3 - integer|0s - 1 - - - group_id -permission_id - - 1 - - - group_id - - - - permission_id - - - - id - 1 - - - group_id - auth_group - id - - - permission_id - auth_permission - id - - - 1 - integer|0s - 1 - 1 - - - 2 - integer|0s - 1 - - - 3 - varchar(100)|0s - 1 - - - 4 - varchar(255)|0s - 1 - - - content_type_id -codename - - 1 - - - content_type_id - - - - id - 1 - - - content_type_id - django_content_type - id - - - 1 - integer|0s - 1 - 1 - - - 2 - varchar(128)|0s - 1 - - - 3 - datetime|0s - - - 4 - bool|0s - 1 - - - 5 - varchar(30)|0s - 1 - - - 6 - varchar(30)|0s - 1 - - - 7 - varchar(254)|0s - 1 - - - 8 - bool|0s - 1 - - - 9 - bool|0s - 1 - - - 10 - datetime|0s - 1 - - - 11 - varchar(150)|0s - 1 - - - 1 - username - - 1 - - - id - 1 - - - username - sqlite_autoindex_auth_user_1 - - - 1 - integer|0s - 1 - 1 - - - 2 - integer|0s - 1 - - - 3 - integer|0s - 1 - - - user_id -group_id - - 1 - - - user_id - - - - group_id - - - - id - 1 - - - user_id - auth_user - id - - - group_id - auth_group - id - - - 1 - integer|0s - 1 - 1 - - - 2 - integer|0s - 1 - - - 3 - integer|0s - 1 - - - user_id -permission_id - - 1 - - - user_id - - - - permission_id - - - - id - 1 - - - user_id - auth_user - id - - - permission_id - auth_permission - id - - - 1 - integer|0s - 1 - 1 - - - 2 - text|0s - - - 3 - varchar(200)|0s - 1 - - - 4 - smallint unsigned|0s - 1 - - - 5 - text|0s - 1 - - - 6 - integer|0s - - - 7 - integer|0s - 1 - - - 8 - datetime|0s - 1 - - - content_type_id - - - - user_id - - - - id - 1 - - - content_type_id - django_content_type - id - - - user_id - auth_user - id - - - 1 - integer|0s - 1 - 1 - - - 2 - varchar(100)|0s - 1 - - - 3 - varchar(100)|0s - 1 - - - app_label -model - - 1 - - - id - 1 - - - 1 - integer|0s - 1 - 1 - - - 2 - varchar(255)|0s - 1 - - - 3 - varchar(255)|0s - 1 - - - 4 - datetime|0s - 1 - - - id - 1 - - - 1 - varchar(40)|0s - 1 - - - 2 - text|0s - 1 - - - 3 - datetime|0s - 1 - - - 1 - session_key - - 1 - - - expire_date - - - - session_key - 1 - sqlite_autoindex_django_session_1 - - - 1 - text|0s - - - 2 - text|0s - - - 3 - text|0s - - - 4 - int|0s - - - 5 - text|0s - - - 1 - - - 2 - - - 1 - integer|0s - 1 - 1 - - - 2 - varchar(32)|0s - 1 - - - 3 - varchar(32)|0s - 1 - - - 4 - varchar(32)|0s - 1 - - - 5 - varchar(32)|0s - 1 - - - id - 1 - - - 1 - integer|0s - 1 - 1 - - - 2 - integer|0s - 1 - - - 3 - datetime|0s - 1 - - - 4 - integer|0s - 1 - - - customer_id - - - - id - 1 - - - customer_id - web_customer - id - - - \ No newline at end of file diff --git "a/luffy_permission-\347\251\272\347\231\275\347\211\210/.idea/workspace.xml" "b/luffy_permission-\347\251\272\347\231\275\347\211\210/.idea/workspace.xml" index 0c1717ee9b867808703d3c9fa2128ab048fc1336..a2b828a8f9915a9c6473755dfcce51e9791e3a3d 100644 --- "a/luffy_permission-\347\251\272\347\231\275\347\211\210/.idea/workspace.xml" +++ "b/luffy_permission-\347\251\272\347\231\275\347\211\210/.idea/workspace.xml" @@ -1,17 +1,35 @@ + + + - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + reverse + {% url + rbac + ra + del + + @@ -191,10 +174,11 @@ true DEFINITION_ORDER - -
+ + + + + + + + {% for role in role_list %} + + + + + + {% endfor %} + + +
角色选择
{{ role.name }} + {% if role.id in user_has_roles_dict %} + + {% else %} + + {% endif %} +
+ + + + + +
+
+ {% csrf_token %} + +
+ +
+ 权限分配 + {% if rid %} + + {% endif %} +
+
+ 提示:点击角色后,才能为其分配权限。 +
+ + + {% for item in all_menu_list %} + + + + + + + {% endfor %} + +
{{ item.title }}
+ {% for node in item.children %} +
+ {% if node.id in role_has_permissions_dict %} + + {% else %} + + {% endif %} + + + +
+
+ {% for child in node.children %} +
+ {% if child.id in role_has_permissions_dict %} + + {% else %} + + {% endif %} + + +
+ {% endfor %} +
+ {% endfor %} +
+
+
+
+ + +{% endblock %} +{% block js %} + +{% endblock %} diff --git "a/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/templates/form.html" "b/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/templates/form.html" new file mode 100644 index 0000000000000000000000000000000000000000..2cdd97bfe356e672091506bedac412d8a9ce92af --- /dev/null +++ "b/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/templates/form.html" @@ -0,0 +1,53 @@ +{% extends 'layout.html' %} + +{% block css %} + + +{% endblock %} + +{% block content %} + +
+ +
+ {% csrf_token %} + {% for field in form_obj %} +
+ + +
+ {{ field }} + {{ field.errors.0 }} +
+
+ {% endfor %} +

{{ form_obj.non_field_errors.0 }}

+
+
+ +
+
+
+
+ +{% endblock %} \ No newline at end of file diff --git "a/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/templates/menu.html" "b/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/templates/menu.html" new file mode 100644 index 0000000000000000000000000000000000000000..0b3ec809459164cb650f642bcf93c8d69b5a9b0d --- /dev/null +++ "b/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/templates/menu.html" @@ -0,0 +1,19 @@ + + + + +
+ {% for menu in menu_list %} +
+
   {{ menu.title }}
+ +
+ {% endfor %} +
\ No newline at end of file diff --git "a/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/templates/menu_list.html" "b/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/templates/menu_list.html" new file mode 100644 index 0000000000000000000000000000000000000000..a98dd64098405c84f292e615c6a0199d6dd52911 --- /dev/null +++ "b/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/templates/menu_list.html" @@ -0,0 +1,135 @@ +{% extends 'layout.html' %} + +{% block css %} + +{% endblock %} +{% block content %} + + + +
+ +
+
+
菜单管理 + 添加 +
+ + + + + + + + + + + {% for menu in all_menu %} + + + + + + {% endfor %} + + +
名称图标操作
+ +
+
+ +
+
+
权限管理 + 批量操作 + 新建 + +
+ + + + + + + + + + + + {% for p_permission in all_permission %} + + + + + + {# 编辑 #} + + + + {% for c_permission in p_permission.children %} + + + + + + + + {% endfor %} + + + + {% endfor %} + + +
名称URLURL别名所属菜单操作
{{ p_permission.title }}{{ p_permission.url }}{{ p_permission.name }}{{ p_permission.menu__title }} + {# 删除 传的类名不能是大写 否则报错#} + +
{{ c_permission.title }}{{ c_permission.url }}{{ c_permission.name }} + +
+
+
+
+ + + +{% endblock %} + + +{% block js %} + + + +{% endblock %} \ No newline at end of file diff --git "a/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/templates/multi_permissions.html" "b/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/templates/multi_permissions.html" new file mode 100644 index 0000000000000000000000000000000000000000..35878a350dfd5e163a6dfbebea93947c63d5c1e6 --- /dev/null +++ "b/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/templates/multi_permissions.html" @@ -0,0 +1,144 @@ +{% extends 'layout.html' %} + +{% block content %} +
+
+ {% csrf_token %} + {{ add_formset.management_form }} +
+ +
+ 待新建权限列表 + +
+
+ 注意:路由系统中自动发现且数据库中不存在的路由。 +
+ + + + + + + + + + + + + + {% for form in add_formset %} + + + + + + + + + + + {% endfor %} + +
序号名称URL别名父权限所属菜单
{{ forloop.counter }}{{ form.title }} {{ form.title.errors.0 }}{{ form.url }}{{ form.name }}{{ form.parent }}{{ form.menu }}
+
+
+ +
+ +
+ 待删除权限列表 +
+
+ 注意:数据库中存在,但路由系统中不存在的路由。 +
+ + + + + + + + + + + + + + + {% for form in del_formset %} + + + {{ form.id }} + + + + + + + + + + {% endfor %} + +
序号名称URL别名父权限所属菜单操作
{{ forloop.counter }}{{ form.title }} {{ form.title.errors.0 }}{{ form.url }}{{ form.name }}{{ form.parent }}{{ form.menu }} + + + +
+
+ +
+ {% csrf_token %} + {{ update_formset.management_form }} +
+ +
+ 待更新权限列表 + +
+
+ 注意:数据库和路由系统都存在的路由。 +
+ + + + + + + + + + + + + + + {% for form in update_formset %} + + {{ form.id }} + + + + + + + + + {% endfor %} + +
序号名称URL别名父权限所属菜单操作
{{ forloop.counter }}{{ form.title }} {{ form.title.errors.0 }}{{ form.url }}{{ form.name }}{{ form.parent }}{{ form.menu }} + + + +
+
+
+
+{% endblock %} \ No newline at end of file diff --git "a/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/templates/role_list.html" "b/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/templates/role_list.html" new file mode 100644 index 0000000000000000000000000000000000000000..8b953939d01cde0279798f16a400586dd2c2d73f --- /dev/null +++ "b/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/templates/role_list.html" @@ -0,0 +1,31 @@ +{% extends 'layout.html' %} +{% block content %} + {% load mu_tage %} +
+
+ + 添加客户 + +
+ + + + + + + + + + {% for role in all_role %} + + + + + + + + {% endfor %} + +
序号名称操作
{{ role.id }}{{ role.name }}
+
+{% endblock %} \ No newline at end of file diff --git "a/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/templatetags/__init__.py" "b/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/templatetags/__init__.py" new file mode 100644 index 0000000000000000000000000000000000000000..883a3ae0dde8fafd77c22e274f20972ef3ea75fe --- /dev/null +++ "b/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/templatetags/__init__.py" @@ -0,0 +1,6 @@ +'''-*- coding: utf-8 -*- +@Author : 大天天 +@Time : 2019/4/24 17:40 +@Software: PyCharm +@File : __init__.py.py +''' \ No newline at end of file diff --git "a/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/templatetags/__pycache__/__init__.cpython-36.pyc" "b/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/templatetags/__pycache__/__init__.cpython-36.pyc" new file mode 100644 index 0000000000000000000000000000000000000000..e03b4d6f7dc48798d811d5e72fb47dad83ab5e61 Binary files /dev/null and "b/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/templatetags/__pycache__/__init__.cpython-36.pyc" differ diff --git "a/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/templatetags/__pycache__/mu_tage.cpython-36.pyc" "b/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/templatetags/__pycache__/mu_tage.cpython-36.pyc" new file mode 100644 index 0000000000000000000000000000000000000000..894eb69db9acf96f07e649b76be374c5bc3be728 Binary files /dev/null and "b/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/templatetags/__pycache__/mu_tage.cpython-36.pyc" differ diff --git "a/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/templatetags/mu_tage.py" "b/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/templatetags/mu_tage.py" new file mode 100644 index 0000000000000000000000000000000000000000..eafc6100276ca113271d1bab87d86e813b19d8e8 --- /dev/null +++ "b/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/templatetags/mu_tage.py" @@ -0,0 +1,54 @@ +from django import template +from luffy_permission import settings +import re +from collections import OrderedDict + +register = template.Library() + + +@register.inclusion_tag('menu.html') +def menu(request): + order_dict = OrderedDict() + menu_dict = request.session.get(settings.MENU_LIST) + keys = sorted(menu_dict, key=lambda x: menu_dict[x]['weight'], reverse=True) + for key in keys: + order_dict[key] = menu_dict[key] + + for i in order_dict.values(): + # 给字典的值(一级菜单)添加 一个class=hide + i['class'] = 'hide' + # 循环children 列表 + for children in i.get('children'): + # # 正则校验 给二级菜单添加active + # if re.match(r'^{}$'.format(children['url']),url): + # 不用正在匹配了,拿当前权限的id 与request.c_id 对比 + # 因为把,在中间件中已经封装了c_id 都是二级菜单的id ,接着往下边走. + if children['id'] == request.c_id: + children['class'] = 'active' + i['class'] = '' + return {'menu_list': order_dict.values()} + + +@register.inclusion_tag('dao_hang_lan.html') +def dao_hang_lan(request): + breadcrumb_list = request.breadcrumb_list + print(breadcrumb_list) + return {'breadcrumb_list': breadcrumb_list} + + +# 判断删除增加等按钮,在不在,这个权限列表里边,在就返回True +@register.filter +def has_permission(request, name): + if name in request.session[settings.PERMISSIONS_LIST]: + return True + + + + +# 权限分配 + +@register.simple_tag +def gen_role_url(request, rid): + params = request.GET.copy() + params['rid'] = rid + return params.urlencode() diff --git "a/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/urls.py" "b/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/urls.py" new file mode 100644 index 0000000000000000000000000000000000000000..684a21ddeea923ce56c615d7a6824d4655e0e793 --- /dev/null +++ "b/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/urls.py" @@ -0,0 +1,37 @@ +from django.conf.urls import url +from web.views import customer +from web.views import payment +from web.views import promiiss +from rabc import views + +urlpatterns = [ + + # 角色管理,对角色的增删改查 + url(r'^role/list/$', views.role_list, name='role_list'), + + url(r'^role/add/$', views.role_change, name='role_add'), + + url(r'^role/edit/(?P\d+)/$', views.role_change, name='role_edit'), + url(r'^role/del/(?P\d+)/$', views.role_del, name='role_del'), + + + + url(r'^menu/list/$', views.menu_list, name='menu_list'), + + url(r'^menu/add/$', views.menu_change, name='menu_add'), + url(r'^menu/edit/(\d+)/$', views.menu_change, name='menu_edit'), + # url(r'^menu/del/(\d+)/$', views.menu_del, name='menu_del'), + + + # 权限的添加与编辑使用同一个 + url(r'^permission/add/$', views.permission_change, name='permission_add'), + url(r'^permission/edit/(?P\d+)/$', views.permission_change, name='permission_edit'), + + #q权限与Menu 的删除 + url(r'^(menu|permission)/del/(\d+)/$', views.delete, name='delete'), + +# 批量操作 + url(r'^multi_permissions$', views.multi_permissions, name='multi_permissions'), +# 分配权限 + url(r'^distribute/permissions/$', views.distribute_permissions, name='distribute_permissions'), +] diff --git "a/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/views.py" "b/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/views.py" index 91ea44a218fbd2f408430959283f0419c921093e..e1386d0af9a1688c9ee5deafb0c955d69d7e4dd3 100644 --- "a/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/views.py" +++ "b/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/views.py" @@ -1,3 +1,299 @@ -from django.shortcuts import render +from django.shortcuts import render, redirect, reverse,HttpResponse +from rabc import models +from rabc.form.forms import RoleForm, MenuForm, PermissionForm,MultiPermissionForm +from django.db.models import Q -# Create your views here. +from django.forms import modelformset_factory, formset_factory +from rabc.views_def.routes import * + +def role_list(request): + all_role = models.Role.objects.all() + return render(request, 'role_list.html', {'all_role': all_role}) + + +def role_change(request, edit_id=None): + obj = models.Role.objects.filter(pk=edit_id).first() + + form_obj = RoleForm(instance=obj) + if request.method == 'POST': + form_obj = RoleForm(request.POST, instance=obj) + if form_obj.is_valid(): + form_obj.save() + return redirect(reverse('rabc:role_list')) + + return render(request, 'form.html', {'form_obj': form_obj}) + + +def role_del(request, edit_id=None): + models.Role.objects.filter(pk=edit_id).delete() + return redirect(reverse('reabc:role_list')) + + +def menu_list(request): + all_menu = models.Menu.objects.all() + + mid = request.GET.get('mid') + + if mid: + all_permission = models.Permission.objects.filter(Q(menu_id=mid) | Q(parent__menu_id=mid)).values('id', 'url', + 'title', + 'name', + 'menu_id', + 'parent_id', + 'menu__title') + + else: + all_permission = models.Permission.objects.all().values('id', 'url', 'title', 'name', 'menu_id', 'parent_id', + 'menu__title') + + """ + { id: { + children : [ {} {} {} ] + } , + id: { + + } + } + + """ + permission_dict = {} + for i in all_permission: + if i.get('menu_id'): + i['children'] = [] + permission_dict[i['id']] = i + + for i in all_permission: + pid = i.get('parent_id') + if pid: + permission_dict[pid]['children'].append(i) + + return render(request, 'menu_list.html', + {'mid': mid, 'all_menu': all_menu, 'all_permission': permission_dict.values()}) + + +def menu_change(request, edit_id=None): + obj = models.Menu.objects.filter(pk=edit_id).first() + form_obj = MenuForm(instance=obj) + if request.method == 'POST': + form_obj = MenuForm(request.POST, instance=obj) + if form_obj.is_valid(): + form_obj.save() + return redirect(reverse('rabc:menu_list')) + + return render(request, 'form.html', {'form_obj': form_obj}) + + +# 当个权限的管理,........ +# 权限的添加与编辑 +def permission_change(request, edit_id=None): + obj = models.Permission.objects.filter(pk=edit_id).first() + form_obj = PermissionForm(instance=obj) + if request.method == 'POST': + form_obj = PermissionForm(request.POST, instance=obj) + if form_obj.is_valid(): + form_obj.save() + return redirect(reverse('rabc:menu_list')) + print(666) + return render(request, 'form.html', {'form_obj': form_obj}) + + +# 权限的删除,与Menu的删除 + +def delete(request, table, pk): + # 我在HTML写的是大写的表名字符串,看看会是怎么样,会报错啊大哥..... + + ret = getattr(models, table.capitalize()) + + ret.objects.filter(pk=pk).delete() + + return redirect(reverse('rabc:menu_list')) + + +# 批量操作 +def multi_permissions(request): + """ + 批量操作权限 + :param request: + :return: + """ + post_type = request.GET.get('type') + + # 删除和编辑使用modelformset + FormSet = modelformset_factory(models.Permission, MultiPermissionForm, extra=0) + # 添加使用的formset, + AddFormSet = formset_factory(MultiPermissionForm, extra=0) + + # 获取数据中所有的权限 + permissions = models.Permission.objects.all() + # 获取到路由系统所有的url(权限) + router_dict = get_all_url_dict(ignore_namespace_list=['admin', 'rbac']) + + # 数据库中权限别名的集合 + permissions_name_set = set([i.name for i in permissions]) + # 路由系统中权限别名的集合 + router_name_set = set(router_dict.keys()) + # 新增权限的别名的集合 路由中的url 权限 减去 数据库的url + add_name_set = router_name_set - permissions_name_set + add_formset = AddFormSet(initial=[row for name, row in router_dict.items() if name in add_name_set]) + + if request.method == 'POST' and post_type == 'add': + add_formset = AddFormSet(request.POST) + if add_formset.is_valid(): + permission_obj_list = [models.Permission(**i) for i in add_formset.cleaned_data] + query_list = models.Permission.objects.bulk_create(permission_obj_list) + add_formset = AddFormSet() + for i in query_list: + permissions_name_set.add(i.name) + # 删除权限的别名的集合 + del_name_set = permissions_name_set - router_name_set + del_formset = FormSet(queryset=models.Permission.objects.filter(name__in=del_name_set)) + + # 更新权限的别名的集合 + update_name_set = permissions_name_set & router_name_set + update_formset = FormSet(queryset=models.Permission.objects.filter(name__in=update_name_set)) + + if request.method == 'POST' and post_type == 'update': + update_formset = FormSet(request.POST) + if update_formset.is_valid(): + update_formset.save() + update_formset = FormSet(queryset=models.Permission.objects.filter(name__in=update_name_set)) + + return render( + request, + 'multi_permissions.html', + { + 'del_formset': del_formset, + 'update_formset': update_formset, + 'add_formset': add_formset, + } + ) + + + + + + +# 分配权限 +def distribute_permissions(request): + """ + 分配权限 + :param request: + :return: + """ + uid = request.GET.get('uid') # 用户的id + rid = request.GET.get('rid') # 角色的id + + if request.method == 'POST' and request.POST.get('postType') == 'role': + user = models.User.objects.filter(id=uid).first() + if not user: + return HttpResponse('用户不存在') + user.roles.set(request.POST.getlist('roles')) + + if request.method == 'POST' and request.POST.get('postType') == 'permission' and rid: + role = models.Role.objects.filter(id=rid).first() + if not role: + return HttpResponse('角色不存在') + role.permissions.set(request.POST.getlist('permissions')) + + # 所有用户 + user_list = models.User.objects.all() + # 用户的角色的id + user_has_roles = models.User.objects.filter(id=uid).values('id', 'roles') + # 用户所拥有角色id的字典 + user_has_roles_dict = {item['roles']: None for item in user_has_roles} + + # 所有的角色 + role_list = models.Role.objects.all() + + if rid: + role_has_permissions = models.Role.objects.filter(id=rid, permissions__id__isnull=False).values('id', + 'permissions') + elif uid and not rid: + user = models.User.objects.filter(id=uid).first() + if not user: + return HttpResponse('用户不存在') + role_has_permissions = user.roles.filter(permissions__id__isnull=False).values('id', 'permissions') + else: + role_has_permissions = [] + # 某一个角色所拥有的权限 某一个用户所拥有的所有的权限 + role_has_permissions_dict = {item['permissions']: None for item in role_has_permissions} + # 所有菜单 + all_menu_list = [] + """ + all_menu_list = [ + { id title children :[ + { 'id', 'title', 'menu_id' 'children' : [ + {'id', 'title', 'parent_id'} + ] } + ] } + {'id': None, 'title': '其他', 'children': [ + {'id', 'title', 'parent_id'} + ]} + ] + + """ + queryset = models.Menu.objects.values('id', 'title') # 一级菜单的id 和 标题 [ { id title } ] + # 菜单的字典 + menu_dict = {} + """ + menu_dict = { + 一级菜单的id: { id title children :[ + { 'id', 'title', 'menu_id' 'children' : [ + {'id', 'title', 'parent_id'} + ] } + ] }, + None: {'id': None, 'title': '其他', 'children': [ + {'id', 'title', 'parent_id'} + ]} + } + """ + + for item in queryset: # { id title } + item['children'] = [] # { id title children :[] } + menu_dict[item['id']] = item + all_menu_list.append(item) + + other = {'id': None, 'title': '其他', 'children': []} + all_menu_list.append(other) + menu_dict[None] = other + # 二级菜单 父权限 + root_permission = models.Permission.objects.filter(menu__isnull=False).values('id', 'title', 'menu_id') + + root_permission_dict = {} + """ + root_permission_dict = { + 父权限的id: { 'id', 'title', 'menu_id' 'children' : [ + {'id', 'title', 'parent_id'} + ] } + } + """ + + for per in root_permission: # { 'id', 'title', 'menu_id' } + per['children'] = [] # { 'id', 'title', 'menu_id' 'children' : [] } + nid = per['id'] + menu_id = per['menu_id'] + root_permission_dict[nid] = per + menu_dict[menu_id]['children'].append(per) + + node_permission = models.Permission.objects.filter(menu__isnull=True).values('id', 'title', 'parent_id') + + for per in node_permission: # {'id', 'title', 'parent_id'} + pid = per['parent_id'] + if not pid: + menu_dict[None]['children'].append(per) + continue + root_permission_dict[pid]['children'].append(per) + + return render( + request, + 'distribute_permissions.html', + { + 'user_list': user_list, # 所有的用户 + 'role_list': role_list, # 所有的角色 + 'user_has_roles_dict': user_has_roles_dict, # 当前用户所拥有的角色 + 'role_has_permissions_dict': role_has_permissions_dict, # 某一个角色所拥有的权限 某一个用户所拥有的所有的权限 + 'all_menu_list': all_menu_list, # 所有的菜单信息 父权限 子权限 普通的权限 + 'uid': uid, + 'rid': rid + } + ) diff --git "a/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/views_def/__pycache__/routes.cpython-36.pyc" "b/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/views_def/__pycache__/routes.cpython-36.pyc" new file mode 100644 index 0000000000000000000000000000000000000000..4d085ddef28b639d523d5eb357397fc142b9fd59 Binary files /dev/null and "b/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/views_def/__pycache__/routes.cpython-36.pyc" differ diff --git "a/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/views_def/__pycache__/v_def.cpython-36.pyc" "b/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/views_def/__pycache__/v_def.cpython-36.pyc" new file mode 100644 index 0000000000000000000000000000000000000000..28951166a57a6d907aec81d04e118a0c463b3673 Binary files /dev/null and "b/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/views_def/__pycache__/v_def.cpython-36.pyc" differ diff --git "a/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/views_def/routes.py" "b/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/views_def/routes.py" new file mode 100644 index 0000000000000000000000000000000000000000..05dec5997a5b8ece21bd0a054cb0d04fdf0d2e9d --- /dev/null +++ "b/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/views_def/routes.py" @@ -0,0 +1,79 @@ +from django.conf import settings +from django.utils.module_loading import import_string +from django.urls import RegexURLResolver, RegexURLPattern +from collections import OrderedDict + + +def recursion_urls(pre_namespace, pre_url, urlpatterns, url_ordered_dict): + """ + + None, "/", [ + url(r'^', include('web.urls')), + url(r'^rbac/', include('rbac.urls', namespace='rbac')), + ] + + None "/^" + + """ + + for item in urlpatterns: + if isinstance(item, RegexURLResolver): + if pre_namespace: + if item.namespace: + namespace = "%s:%s" % (pre_namespace, item.namespace,) + else: + namespace = pre_namespace + else: + if item.namespace: + namespace = item.namespace + else: + namespace = None + recursion_urls(namespace, pre_url + item.regex.pattern, item.url_patterns, url_ordered_dict) + else: + + if pre_namespace: + name = "%s:%s" % (pre_namespace, item.name,) + else: + name = item.name # login + if not item.name: + raise Exception('URL路由中必须设置name属性') + + url = pre_url + item._regex # /login/ + + url_ordered_dict[name] = {'name': name, 'url': url.replace('^', '').replace('$', '')} + + + + + +# 批量操作使用的函数 默认参数的用法 [] None +def get_all_url_dict(ignore_namespace_list=None): + """ + 获取路由中 + :return: + """ + ignore_list = ignore_namespace_list or [] # ignore_list = ['admin'] + + url_ordered_dict = OrderedDict() + + # import_string是django提供 的一个方法 ROOT_URLCONF=拿的是根的url 配置,项目最外边的url 拿到的md 就是一个模块,url的模块 + md = import_string(settings.ROOT_URLCONF) + urlpatterns = [] + # md.urlpatterns 拿到的就是 视图函数的额;列表 + for item in md.urlpatterns: + """ + [ + url(r'^', include('web.urls')), + url(r'^rbac/', include('rbac.urls', namespace='rbac')), + ] + + url 执行__init__方法,返回俩种情况, + 1:视图 RegexUR LPattern + 2 :include RegexURLResolver + """ + if isinstance(item, RegexURLResolver) and item.namespace in ignore_list: + + continue + urlpatterns.append(item) + recursion_urls(None, "/", urlpatterns, url_ordered_dict) + return url_ordered_dict diff --git "a/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/views_def/v_def.py" "b/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/views_def/v_def.py" new file mode 100644 index 0000000000000000000000000000000000000000..75173f8ec7e5ff6aae9e579544aae1512abeee02 --- /dev/null +++ "b/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/views_def/v_def.py" @@ -0,0 +1,62 @@ +from django.conf import settings + +def init_permission(request,user): + + # 获取权限信息 + # 去除权限为空的权限 去重 + permission_query = user.roles.filter(permissions__url__isnull=False).values( + 'permissions__url', + 'permissions__title', + 'permissions__menu_id', + 'permissions__menu__title', + 'permissions__menu__icon', + 'permissions__menu__weight', + + # 拿id 为了和parent_id 比较 + 'permissions__id', + #拿到当前权限的name + 'permissions__name', + + 'permissions__parent_id', + #拿到当前权限对应的子权限自关联的父权限name + 'permissions__parent__name', + + ).distinct() + + # 权限的列表 + permission_dict = {} + # 菜单使用字典比较利于取值, + menu_dict = {} + + + + for i in permission_query: + # 把权限加到permission_list + permission_dict[i['permissions__name']]={'title':i['permissions__title'], + 'url': i['permissions__url'], + 'id': i['permissions__id'], + 'pid': i['permissions__parent_id'], + 'pname': i['permissions__parent__name'], + } + + + + # 构建二级菜单的数据结构 + menu_id = i.get('permissions__menu_id') + + if not menu_id: + continue + menu_dict.setdefault(menu_id, { + 'title': i.get('permissions__menu__title'), + 'icon': i.get('permissions__menu__icon'), + 'weight':i.get('permissions__menu__weight'), + 'children': [] + }) + + menu_dict[menu_id]['children'].append({'title': i.get('permissions__title'), 'url': i.get('permissions__url'),'id':i.get('permissions__id')}) + + + # 保存权限信息和菜单信息到session中 + request.session[settings.PERMISSIONS_LIST] = permission_dict + request.session[settings.MENU_LIST] = menu_dict + request.session['is_login'] = '1' diff --git "a/luffy_permission-\347\251\272\347\231\275\347\211\210/web/__pycache__/models.cpython-36.pyc" "b/luffy_permission-\347\251\272\347\231\275\347\211\210/web/__pycache__/models.cpython-36.pyc" index 26eccf788596cca12032e27438ca8c390e68c0dd..8399811d99caa110d57a3889619b711d6fa142f6 100644 Binary files "a/luffy_permission-\347\251\272\347\231\275\347\211\210/web/__pycache__/models.cpython-36.pyc" and "b/luffy_permission-\347\251\272\347\231\275\347\211\210/web/__pycache__/models.cpython-36.pyc" differ diff --git "a/luffy_permission-\347\251\272\347\231\275\347\211\210/web/__pycache__/urls.cpython-36.pyc" "b/luffy_permission-\347\251\272\347\231\275\347\211\210/web/__pycache__/urls.cpython-36.pyc" index 4e82b67202c84a0c5fef76494d6493f88a106501..26c9dd5809539ea08e1739a478f819463aff8ba6 100644 Binary files "a/luffy_permission-\347\251\272\347\231\275\347\211\210/web/__pycache__/urls.cpython-36.pyc" and "b/luffy_permission-\347\251\272\347\231\275\347\211\210/web/__pycache__/urls.cpython-36.pyc" differ diff --git "a/luffy_permission-\347\251\272\347\231\275\347\211\210/web/midwear/__pycache__/__init__.cpython-36.pyc" "b/luffy_permission-\347\251\272\347\231\275\347\211\210/web/midwear/__pycache__/__init__.cpython-36.pyc" deleted file mode 100644 index 390d2a7d95fa6b2be6635f5df195d4b9f92fde8a..0000000000000000000000000000000000000000 Binary files "a/luffy_permission-\347\251\272\347\231\275\347\211\210/web/midwear/__pycache__/__init__.cpython-36.pyc" and /dev/null differ diff --git "a/luffy_permission-\347\251\272\347\231\275\347\211\210/web/midwear/__pycache__/mid.cpython-36.pyc" "b/luffy_permission-\347\251\272\347\231\275\347\211\210/web/midwear/__pycache__/mid.cpython-36.pyc" deleted file mode 100644 index d2739d1f33609fa72043132e841f464796f75371..0000000000000000000000000000000000000000 Binary files "a/luffy_permission-\347\251\272\347\231\275\347\211\210/web/midwear/__pycache__/mid.cpython-36.pyc" and /dev/null differ diff --git "a/luffy_permission-\347\251\272\347\231\275\347\211\210/web/migrations/0002_auto_20190423_2324.py" "b/luffy_permission-\347\251\272\347\231\275\347\211\210/web/migrations/0002_auto_20190423_2324.py" new file mode 100644 index 0000000000000000000000000000000000000000..f723f31eda26cdb36afb7d797f0f29e81700fcff --- /dev/null +++ "b/luffy_permission-\347\251\272\347\231\275\347\211\210/web/migrations/0002_auto_20190423_2324.py" @@ -0,0 +1,49 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.20 on 2019-04-23 15:24 +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('web', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='Group', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=128)), + ], + ), + migrations.CreateModel( + name='Membership', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('date_joined', models.DateField()), + ('invite_reason', models.CharField(max_length=64)), + ('group', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='web.Group')), + ], + ), + migrations.CreateModel( + name='Person', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=128)), + ], + ), + migrations.AddField( + model_name='membership', + name='person', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='web.Person'), + ), + migrations.AddField( + model_name='group', + name='members', + field=models.ManyToManyField(through='web.Membership', to='web.Person'), + ), + ] diff --git "a/luffy_permission-\347\251\272\347\231\275\347\211\210/web/migrations/0003_auto_20190424_1623.py" "b/luffy_permission-\347\251\272\347\231\275\347\211\210/web/migrations/0003_auto_20190424_1623.py" new file mode 100644 index 0000000000000000000000000000000000000000..6b3be456b14accd589a7c13624aaabeead535b82 --- /dev/null +++ "b/luffy_permission-\347\251\272\347\231\275\347\211\210/web/migrations/0003_auto_20190424_1623.py" @@ -0,0 +1,36 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.20 on 2019-04-24 08:23 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('web', '0002_auto_20190423_2324'), + ] + + operations = [ + migrations.RemoveField( + model_name='group', + name='members', + ), + migrations.RemoveField( + model_name='membership', + name='group', + ), + migrations.RemoveField( + model_name='membership', + name='person', + ), + migrations.DeleteModel( + name='Group', + ), + migrations.DeleteModel( + name='Membership', + ), + migrations.DeleteModel( + name='Person', + ), + ] diff --git "a/luffy_permission-\347\251\272\347\231\275\347\211\210/web/migrations/__pycache__/0002_auto_20190423_2324.cpython-36.pyc" "b/luffy_permission-\347\251\272\347\231\275\347\211\210/web/migrations/__pycache__/0002_auto_20190423_2324.cpython-36.pyc" new file mode 100644 index 0000000000000000000000000000000000000000..7edf39d7df26e89cb621ae55e9cb79bc0b5600b3 Binary files /dev/null and "b/luffy_permission-\347\251\272\347\231\275\347\211\210/web/migrations/__pycache__/0002_auto_20190423_2324.cpython-36.pyc" differ diff --git "a/luffy_permission-\347\251\272\347\231\275\347\211\210/web/migrations/__pycache__/0003_auto_20190424_1623.cpython-36.pyc" "b/luffy_permission-\347\251\272\347\231\275\347\211\210/web/migrations/__pycache__/0003_auto_20190424_1623.cpython-36.pyc" new file mode 100644 index 0000000000000000000000000000000000000000..91ca9c45e92a8cf7152a7e06941c726979145bf5 Binary files /dev/null and "b/luffy_permission-\347\251\272\347\231\275\347\211\210/web/migrations/__pycache__/0003_auto_20190424_1623.cpython-36.pyc" differ diff --git "a/luffy_permission-\347\251\272\347\231\275\347\211\210/web/models.py" "b/luffy_permission-\347\251\272\347\231\275\347\211\210/web/models.py" index 79e68c8e7c9f2800b48c197501bffb139f4e4cd7..540aa901e0b833dda7c9b4757f6bd81521263423 100644 --- "a/luffy_permission-\347\251\272\347\231\275\347\211\210/web/models.py" +++ "b/luffy_permission-\347\251\272\347\231\275\347\211\210/web/models.py" @@ -21,3 +21,21 @@ class Payment(models.Model): create_time = models.DateTimeField(verbose_name='付费时间', auto_now_add=True) + + +# class Person(models.Model): +# name = models.CharField(max_length=128) +# def __str__(self): +# return self.name +# +# class Group(models.Model): +# name = models.CharField(max_length=128) +# members = models.ManyToManyField(Person, through='Membership') +# def __str__(self): +# return self.name +# +# class Membership(models.Model): +# person = models.ForeignKey(Person, on_delete=models.CASCADE) +# group = models.ForeignKey(Group, on_delete=models.CASCADE) +# date_joined = models.DateField() # 进组时间 +# invite_reason = models.CharField(max_length=64) # 邀请原因 \ No newline at end of file diff --git "a/luffy_permission-\347\251\272\347\231\275\347\211\210/web/templates/customer_list.html" "b/luffy_permission-\347\251\272\347\231\275\347\211\210/web/templates/customer_list.html" index 95386cacb630f96ac2f7840c2b64048bf2bd8079..7f95329bc4acd5daf90d23c337da37581d9833dc 100644 --- "a/luffy_permission-\347\251\272\347\231\275\347\211\210/web/templates/customer_list.html" +++ "b/luffy_permission-\347\251\272\347\231\275\347\211\210/web/templates/customer_list.html" @@ -1,12 +1,15 @@ {% extends 'layout.html' %} {% block content %} - + {% load mu_tage %}
- - 添加客户 - + {% if request|has_permission:'customer_add' %} + + + 添加客户 + + {% endif %}
@@ -16,7 +19,9 @@ - + {% if request|has_permission:'customer_del' or request|has_permission:'customer_edit' %} + + {% endif %} @@ -27,12 +32,20 @@ - + {% if request|has_permission:'customer_del' or request|has_permission:'customer_edit' %} + + + {% endif %} {% endfor %} diff --git "a/luffy_permission-\347\251\272\347\231\275\347\211\210/web/templates/index.html" "b/luffy_permission-\347\251\272\347\231\275\347\211\210/web/templates/index.html" new file mode 100644 index 0000000000000000000000000000000000000000..8bb8d0cd2698bde8aad0b326cce67cb15ea9bd37 --- /dev/null +++ "b/luffy_permission-\347\251\272\347\231\275\347\211\210/web/templates/index.html" @@ -0,0 +1,7 @@ + + +{% extends 'layout.html' %} + +{% block content %} + {{ index }} +{% endblock %} diff --git "a/luffy_permission-\347\251\272\347\231\275\347\211\210/web/templates/layout.html" "b/luffy_permission-\347\251\272\347\231\275\347\211\210/web/templates/layout.html" index 1e0b4cbd80de014862f75b00e0f5e04693843f9c..8fb5afdd79560c703072213ff71c4e7c7b748e65 100644 --- "a/luffy_permission-\347\251\272\347\231\275\347\211\210/web/templates/layout.html" +++ "b/luffy_permission-\347\251\272\347\231\275\347\211\210/web/templates/layout.html" @@ -9,6 +9,7 @@ + @@ -154,23 +117,33 @@
- + {% dao_hang_lan request %}
{% block content %} {% endblock %}
@@ -179,6 +152,18 @@ + + + + + + {% block js %} {% endblock %} \ No newline at end of file diff --git "a/luffy_permission-\347\251\272\347\231\275\347\211\210/web/templates/login.html" "b/luffy_permission-\347\251\272\347\231\275\347\211\210/web/templates/login.html" index 6dbb6945cc605e889679dac5f27457d2a0ea69e9..cf7c51548eab939adc4789d5395a4aa35bbe1fdc 100644 --- "a/luffy_permission-\347\251\272\347\231\275\347\211\210/web/templates/login.html" +++ "b/luffy_permission-\347\251\272\347\231\275\347\211\210/web/templates/login.html" @@ -1,15 +1,31 @@ -{% extends 'layout.html' %} -{% block content %} -
+ + + + + + + Title + + {% load static %} + +{# #} + + + + + {% csrf_token %} -
+
-
+

{{ error }}

-{% endblock %} \ No newline at end of file + + + + diff --git "a/luffy_permission-\347\251\272\347\231\275\347\211\210/web/urls.py" "b/luffy_permission-\347\251\272\347\231\275\347\211\210/web/urls.py" index 019020341f1d590ed3af41d5ba55739cae376efd..2bc023a7a1d6aedb5f01c2cb7ac4b1f0c3ca8b14 100644 --- "a/luffy_permission-\347\251\272\347\231\275\347\211\210/web/urls.py" +++ "b/luffy_permission-\347\251\272\347\231\275\347\211\210/web/urls.py" @@ -3,18 +3,24 @@ from web.views import customer from web.views import payment from web.views import promiiss + urlpatterns = [ url(r'login/$', promiiss.login,name='login'), url(r'index/$', promiiss.index,name='index'), - url(r'^customer/list/$', customer.customer_list), - url(r'^customer/add/$', customer.customer_add), - url(r'^customer/edit/(?P\d+)/$', customer.customer_edit), - url(r'^customer/del/(?P\d+)/$', customer.customer_del), + url(r'^customer/list/$', customer.customer_list,name='customer_list'), + url(r'^customer/add/$', customer.customer_add,name='customer_add'), + url(r'^customer/edit/(?P\d+)/$', customer.customer_edit,name='customer_edit'), + url(r'^customer/del/(?P\d+)/$', customer.customer_del,name='customer_del'), + + + + url(r'^payment/list/$', payment.payment_list,name='payment_list'), + url(r'^payment/add/$', payment.payment_add,name='payment_add'), + url(r'^payment/edit/(?P\d+)/$', payment.payment_edit,name='payment_edit'), + url(r'^payment/del/(?P\d+)/$', payment.payment_del,name='payment_del'), + + - url(r'^payment/list/$', payment.payment_list), - url(r'^payment/add/$', payment.payment_add), - url(r'^payment/edit/(?P\d+)/$', payment.payment_edit), - url(r'^payment/del/(?P\d+)/$', payment.payment_del), ] diff --git "a/luffy_permission-\347\251\272\347\231\275\347\211\210/web/views/__pycache__/promiiss.cpython-36.pyc" "b/luffy_permission-\347\251\272\347\231\275\347\211\210/web/views/__pycache__/promiiss.cpython-36.pyc" index e6873721c9299c1dae8ad6d08349c94df8d05526..6b026c88827fd4f1d424d9900abc398316684bdb 100644 Binary files "a/luffy_permission-\347\251\272\347\231\275\347\211\210/web/views/__pycache__/promiiss.cpython-36.pyc" and "b/luffy_permission-\347\251\272\347\231\275\347\211\210/web/views/__pycache__/promiiss.cpython-36.pyc" differ diff --git "a/luffy_permission-\347\251\272\347\231\275\347\211\210/web/views/__pycache__/role.cpython-36.pyc" "b/luffy_permission-\347\251\272\347\231\275\347\211\210/web/views/__pycache__/role.cpython-36.pyc" new file mode 100644 index 0000000000000000000000000000000000000000..6d2b6fc10f1763da0e76bc55e7dcc6fcc2d3739f Binary files /dev/null and "b/luffy_permission-\347\251\272\347\231\275\347\211\210/web/views/__pycache__/role.cpython-36.pyc" differ diff --git "a/luffy_permission-\347\251\272\347\231\275\347\211\210/web/views/promiiss.py" "b/luffy_permission-\347\251\272\347\231\275\347\211\210/web/views/promiiss.py" index 0bc8ef95a2a1d265a6f4164aef9f5112a206f276..08e39bec9e044650f8534619cf44e444637e8009 100644 --- "a/luffy_permission-\347\251\272\347\231\275\347\211\210/web/views/promiiss.py" +++ "b/luffy_permission-\347\251\272\347\231\275\347\211\210/web/views/promiiss.py" @@ -1,6 +1,8 @@ from django.shortcuts import HttpResponse, render, redirect, reverse from rabc import models - +from rabc.models import User +from luffy_permission import settings +from rabc.views_def.v_def import init_permission def login(request): if request.method == 'POST': @@ -8,16 +10,12 @@ def login(request): username = request.POST.get('username') password = request.POST.get('password') - user = models.User.objects.filter(name=username, pwd=password).first() + user = User.objects.filter(name=username, pwd=password).first() if not user: return render(request, 'login.html', {'error': '用户名或密码错误'}) - # 用户对象点关系管理对象,得角色,筛选出来 - permission = user.roles.filter(permissions__url__isnull=False).values('permissions__url').distinct() - # 保存权限信息到session中 - request.session['permission'] = list(permission) - request.session['is_login'] = '1' + init_permission(request,user) # 重定向到首页 return redirect(reverse('index')) @@ -25,4 +23,5 @@ def login(request): def index(request): - return HttpResponse('登录成功') + + return render(request,'index.html') diff --git "a/luffy_permission-\347\251\272\347\231\275\347\211\210/web/views/role.py" "b/luffy_permission-\347\251\272\347\231\275\347\211\210/web/views/role.py" new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git "a/luffy_permission-\347\251\272\347\231\275\347\211\210/\350\204\232\346\234\254/\346\225\260\346\215\256.py" "b/luffy_permission-\347\251\272\347\231\275\347\211\210/\350\204\232\346\234\254/\346\225\260\346\215\256.py" new file mode 100644 index 0000000000000000000000000000000000000000..2c23b5d92771ce0ece97ed0d40a9517b29e9808c --- /dev/null +++ "b/luffy_permission-\347\251\272\347\231\275\347\211\210/\350\204\232\346\234\254/\346\225\260\346\215\256.py" @@ -0,0 +1,11 @@ +# 权限控制到按钮级别. +ret = [{'permissions__url': '/customer/list/', 'permissions__title': '客户列表', 'permissions__menu_id': 1, 'permissions__menu__title': '客户管理', 'permissions__menu__icon': 'fa-user-o', 'permissions__menu__weight': 2, 'permissions__id': 5, 'permissions__name': 'customer_list', 'permissions__parent_id': None, 'permissions__parent__name': None}, + + {'permissions__url': '/customer/add/', 'permissions__title': '添加客户', 'permissions__menu_id': None, 'permissions__menu__title': None, 'permissions__menu__icon': None, 'permissions__menu__weight': None, 'permissions__id': 6, 'permissions__name': 'customer_add', 'permissions__parent_id': 5, 'permissions__parent__name': 'customer_list'}, + + {'permissions__url': '/customer/edit/(\\d+)/', 'permissions__title': '编辑客户', 'permissions__menu_id': None, 'permissions__menu__title': None, 'permissions__menu__icon': None, 'permissions__menu__weight': None, 'permissions__id': 7, 'permissions__name': 'customer_edit', 'permissions__parent_id': 5, 'permissions__parent__name': 'customer_list'}, + {'permissions__url': '/customer/del/(\\d+)/', 'permissions__title': '删除客户', 'permissions__menu_id': None, 'permissions__menu__title': None, 'permissions__menu__icon': None, 'permissions__menu__weight': None, 'permissions__id': 8, 'permissions__name': 'customer_del', 'permissions__parent_id': 5, 'permissions__parent__name': 'customer_list'}, + {'permissions__url': '/payment/list/', 'permissions__title': '财务管理', 'permissions__menu_id': 2, 'permissions__menu__title': '缴费管理', 'permissions__menu__icon': 'fa-jpy', 'permissions__menu__weight': 10, 'permissions__id': 9, 'permissions__name': 'payment_list', 'permissions__parent_id': None, 'permissions__parent__name': None}, + {'permissions__url': '/payment/add/', 'permissions__title': '添加缴费', 'permissions__menu_id': None, 'permissions__menu__title': None, 'permissions__menu__icon': None, 'permissions__menu__weight': None, 'permissions__id': 10, 'permissions__name': 'payment_add', 'permissions__parent_id': 9, 'permissions__parent__name': 'payment_list'}, + {'permissions__url': '/payment/edit/(\\d+)/', 'permissions__title': '编辑缴费', 'permissions__menu_id': None, 'permissions__menu__title': None, 'permissions__menu__icon': None, 'permissions__menu__weight': None, 'permissions__id': 11, 'permissions__name': 'payment_edit', 'permissions__parent_id': 9, 'permissions__parent__name': 'payment_list'}, + {'permissions__url': '/payment/del/(\\d+)/', 'permissions__title': '删除缴费', 'permissions__menu_id': None, 'permissions__menu__title': None, 'permissions__menu__icon': None, 'permissions__menu__weight': None, 'permissions__id': 12, 'permissions__name': 'payment_del', 'permissions__parent_id': 9, 'permissions__parent__name': 'payment_list'}] \ No newline at end of file diff --git a/new_crm/.idea/workspace.xml b/new_crm/.idea/workspace.xml index e7fd6fe0200ce9e82522b16832e563306e72606f..86f7da9b98ab90699d9bfb47cbd3fa6c7a55da67 100644 --- a/new_crm/.idea/workspace.xml +++ b/new_crm/.idea/workspace.xml @@ -2,12 +2,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - + + @@ -254,9 +232,6 @@ @@ -276,9 +254,9 @@ true DEFINITION_ORDER - -
年龄 邮箱 公司选项选项
{{ row.age }} {{ row.email }} {{ row.company }} - - - | - - + {% if request|has_permission:'customer_edit' %} + + + {% endif %} + + {% if request|has_permission:'customer_del' %} + + {% endif %} +