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
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
- 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 @@
+
+
+
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -53,135 +71,100 @@
+
-
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+
+
-
-
-
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+ reverse
+ {% url
+ rbac
+ ra
+ del
+
+
-
-
-
-
-
+
+
+
+
+
+
+
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -191,10 +174,11 @@
true
DEFINITION_ORDER
-
-
-
-
+
+
+
+
+
@@ -202,7 +186,6 @@
-
@@ -218,37 +201,44 @@
-
+
+
-
-
+
+
-
-
+
+
+
+
+
+
+
+
@@ -301,33 +291,65 @@
+
+
+
+
+
+
+
+
+
-
-
+
-
-
+
-
-
-
-
-
-
-
+
-
+
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -336,140 +358,342 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
-
+
-
-
+
+
-
-
+
+
+
+
+
+
-
+
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
-
+
+
+
+
+
+
+
+
-
+
-
+
-
-
-
-
+
+
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
-
+
+
+
+
+
+
-
+
-
-
+
+
-
+
-
+
-
-
+
+
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
-
-
+
+
-
+
-
-
+
+
+
+
+
+
+
+
+
-
+
diff --git "a/luffy_permission-\347\251\272\347\231\275\347\211\210/db.sqlite3" "b/luffy_permission-\347\251\272\347\231\275\347\211\210/db.sqlite3"
index 43bfa08f6dd3fc1b2522caa1e841eab8e54dd75a..c9c902cc017cb6979b511ba7d632b53bdf3442f6 100644
Binary files "a/luffy_permission-\347\251\272\347\231\275\347\211\210/db.sqlite3" and "b/luffy_permission-\347\251\272\347\231\275\347\211\210/db.sqlite3" differ
diff --git "a/luffy_permission-\347\251\272\347\231\275\347\211\210/luffy_permission/__pycache__/settings.cpython-36.pyc" "b/luffy_permission-\347\251\272\347\231\275\347\211\210/luffy_permission/__pycache__/settings.cpython-36.pyc"
index f3f2562e027176143d729dd566263ff02073c26d..d35f19887871cd9c65e4a4f8ca48f0026ab36319 100644
Binary files "a/luffy_permission-\347\251\272\347\231\275\347\211\210/luffy_permission/__pycache__/settings.cpython-36.pyc" and "b/luffy_permission-\347\251\272\347\231\275\347\211\210/luffy_permission/__pycache__/settings.cpython-36.pyc" differ
diff --git "a/luffy_permission-\347\251\272\347\231\275\347\211\210/luffy_permission/__pycache__/urls.cpython-36.pyc" "b/luffy_permission-\347\251\272\347\231\275\347\211\210/luffy_permission/__pycache__/urls.cpython-36.pyc"
index 9ce9ef329be31b8b7d06cb6de7ea5d34461a36fa..95fc7226e5a4f75b1f8e07e0d7168d18438e49ac 100644
Binary files "a/luffy_permission-\347\251\272\347\231\275\347\211\210/luffy_permission/__pycache__/urls.cpython-36.pyc" and "b/luffy_permission-\347\251\272\347\231\275\347\211\210/luffy_permission/__pycache__/urls.cpython-36.pyc" differ
diff --git "a/luffy_permission-\347\251\272\347\231\275\347\211\210/luffy_permission/settings.py" "b/luffy_permission-\347\251\272\347\231\275\347\211\210/luffy_permission/settings.py"
index 1c6f8dbf3de3b0d26e96501c5ef417f2c8cbae70..d4d242d76b10b6855e666c749c727233fcc31cb8 100644
--- "a/luffy_permission-\347\251\272\347\231\275\347\211\210/luffy_permission/settings.py"
+++ "b/luffy_permission-\347\251\272\347\231\275\347\211\210/luffy_permission/settings.py"
@@ -116,6 +116,13 @@ USE_TZ = True
# https://docs.djangoproject.com/en/1.11/howto/static-files/
STATIC_URL = '/static/'
+STATICFILES_DIRS = [
+
+os.path.join(BASE_DIR,'static'),
+
+
+]
+
# 白名单
WHITE_LIST = [
@@ -126,5 +133,13 @@ WHITE_LIST = [
# 免认证的URL地址
NO_PERMISSION_LIST = [
- r'^/text/$',
+
+ r'^.*',
+ r'^/index/$',
+
]
+
+
+PERMISSIONS_LIST = 'permission'
+
+MENU_LIST = 'menu'
\ No newline at end of file
diff --git "a/luffy_permission-\347\251\272\347\231\275\347\211\210/luffy_permission/urls.py" "b/luffy_permission-\347\251\272\347\231\275\347\211\210/luffy_permission/urls.py"
index e9d3cf39995129af3e8655d0d70e8e23326bccbb..fa196e09bc5a22017634a452e3cd4fd0ebf6f8dc 100644
--- "a/luffy_permission-\347\251\272\347\231\275\347\211\210/luffy_permission/urls.py"
+++ "b/luffy_permission-\347\251\272\347\231\275\347\211\210/luffy_permission/urls.py"
@@ -20,4 +20,7 @@ urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^', include('web.urls')),
+ url(r'^rabc/', include('rabc.urls',namespace='rabc')),
+
+
]
diff --git "a/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/__pycache__/admin.cpython-36.pyc" "b/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/__pycache__/admin.cpython-36.pyc"
index 5c254da8154e137dc8968bd1e2be5126391091b4..585e1fb6adf76c0db6b43f491834316b03faebb5 100644
Binary files "a/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/__pycache__/admin.cpython-36.pyc" and "b/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/__pycache__/admin.cpython-36.pyc" differ
diff --git "a/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/__pycache__/models.cpython-36.pyc" "b/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/__pycache__/models.cpython-36.pyc"
index 6e6cebf5f64fe67dc0aaac44b655515d7766a29f..b87410e4c0735425624fb94533c44b42e39c0860 100644
Binary files "a/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/__pycache__/models.cpython-36.pyc" and "b/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/__pycache__/models.cpython-36.pyc" differ
diff --git "a/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/__pycache__/urls.cpython-36.pyc" "b/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/__pycache__/urls.cpython-36.pyc"
new file mode 100644
index 0000000000000000000000000000000000000000..1583a55ee0436195a9ce30639f41b32dc4bd2b80
Binary files /dev/null and "b/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/__pycache__/urls.cpython-36.pyc" differ
diff --git "a/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/__pycache__/views.cpython-36.pyc" "b/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/__pycache__/views.cpython-36.pyc"
index 56570d794c52e61e864ab95921e773bb92b363c5..17ed5e16adc448095fa4334f6e4795a444e61465 100644
Binary files "a/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/__pycache__/views.cpython-36.pyc" and "b/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/__pycache__/views.cpython-36.pyc" differ
diff --git "a/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/admin.py" "b/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/admin.py"
index 640b8c03210103b9b9913487ce86f53fcc36f449..733d5682ed31b6c48b8b1b49debe53563b9a3994 100644
--- "a/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/admin.py"
+++ "b/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/admin.py"
@@ -4,9 +4,11 @@ from rabc import models
class PermissionAdmin(admin.ModelAdmin):
list_display = ['id','title','url' ]
- list_editable = ['title','url']
+ list_editable = ['title','url',]
+
admin.site.register(models.Permission, PermissionAdmin)
admin.site.register(models.Role)
admin.site.register(models.User)
+admin.site.register(models.Menu)
diff --git "a/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/form/__init__.py" "b/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/form/__init__.py"
new file mode 100644
index 0000000000000000000000000000000000000000..2b2be281ee304c8d8088a2d2407e52848a9e13c8
--- /dev/null
+++ "b/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/form/__init__.py"
@@ -0,0 +1,6 @@
+'''-*- coding: utf-8 -*-
+@Author : 大天天
+@Time : 2019/4/26 14:51
+@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/form/__pycache__/__init__.cpython-36.pyc" "b/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/form/__pycache__/__init__.cpython-36.pyc"
new file mode 100644
index 0000000000000000000000000000000000000000..a00213cb8b94e25a771fb1e81eebd966b78d3bee
Binary files /dev/null and "b/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/form/__pycache__/__init__.cpython-36.pyc" differ
diff --git "a/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/form/__pycache__/forms.cpython-36.pyc" "b/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/form/__pycache__/forms.cpython-36.pyc"
new file mode 100644
index 0000000000000000000000000000000000000000..f8d89a85ceb81ca6a29eca3b2b83ae1a36df0fac
Binary files /dev/null and "b/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/form/__pycache__/forms.cpython-36.pyc" differ
diff --git "a/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/form/forms.py" "b/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/form/forms.py"
new file mode 100644
index 0000000000000000000000000000000000000000..f3f3fbcd88318f5ea56cd516b2266d9e1958f112
--- /dev/null
+++ "b/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/form/forms.py"
@@ -0,0 +1,66 @@
+from django import forms
+from rabc import models
+from django.utils.safestring import mark_safe
+
+
+class RoleForm(forms.ModelForm):
+ class Meta:
+ model = models.Role
+ fields = '__all__'
+ exclude = ['permissions']
+
+ widgets = {
+ 'name': forms.TextInput(attrs={'class': 'form-control'})
+ }
+
+
+class MenuForm(forms.ModelForm):
+ class Meta:
+ model = models.Menu
+ fields = ['title', 'weight', 'icon']
+ # exclude = ['permissions']
+
+ widgets = {
+ 'title': forms.TextInput(attrs={'class': 'form-control'}),
+ 'weight': forms.NumberInput(attrs={'class': 'form-control'}),
+ # 'icon': forms.RadioSelect(choices=ICON_CHOICES)
+ }
+
+
+# 权限forms 对象
+
+class PermissionForm(forms.ModelForm):
+ class Meta:
+ model = models.Permission
+ fields = '__all__'
+ #
+ def __init__(self, *args, **kwargs):
+ super().__init__(*args, **kwargs)
+ for field in self.fields.values():
+
+ field.widget.attrs.update({'class':'form'})
+
+
+
+
+# 批量权限使用的form
+class MultiPermissionForm(forms.ModelForm):
+ class Meta:
+ model = models.Permission
+ fields = ['title', 'url', 'name', 'parent', 'menu']
+
+ def __init__(self, *args, **kwargs):
+ super().__init__(*args, **kwargs)
+ for field in self.fields:
+ self.fields[field].widget.attrs.update({"class": "form-control"})
+ self.fields['parent'].choices = [(None, '-------')] + list(
+ models.Permission.objects.filter(parent__isnull=True).exclude(
+ menu__isnull=True).values_list('id', 'title'))
+
+ def clean(self):
+ menu = self.cleaned_data.get('menu')
+ pid = self.cleaned_data.get('parent')
+
+ if menu and pid:
+ raise forms.ValidationError('菜单和根权限同时只能选择一个')
+ return self.cleaned_data
diff --git "a/luffy_permission-\347\251\272\347\231\275\347\211\210/web/midwear/__init__.py" "b/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/midwear/__init__.py"
similarity index 100%
rename from "luffy_permission-\347\251\272\347\231\275\347\211\210/web/midwear/__init__.py"
rename to "luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/midwear/__init__.py"
diff --git "a/luffy_permission-\347\251\272\347\231\275\347\211\210/web/midwear/mid.py" "b/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/midwear/mid.py"
similarity index 38%
rename from "luffy_permission-\347\251\272\347\231\275\347\211\210/web/midwear/mid.py"
rename to "luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/midwear/mid.py"
index 4437247613d01e126abfc60e92375fc45be8cfa0..1eb1cffc4408d48ffba1624ed78c949678d439d6 100644
--- "a/luffy_permission-\347\251\272\347\231\275\347\211\210/web/midwear/mid.py"
+++ "b/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/midwear/mid.py"
@@ -8,7 +8,11 @@ class RbacMiddleWare(MiddlewareMixin):
def process_request(self, request):
# 获取当前访问的URL地址
url = request.path_info
- print(url)
+ request.c_id = None
+
+ # 母版导航栏,
+ request.breadcrumb_list = [{'title': '首页', 'url': '/index/'}]
+
# 白名单
for i in settings.WHITE_LIST:
if re.match(i, url):
@@ -25,9 +29,36 @@ class RbacMiddleWare(MiddlewareMixin):
if re.match(i, url):
return
# 获取权限信息
- permission = request.session.get('permission')
- # 权限的校验
- for i in permission:
- if re.match(r'^{}$'.format(i['permissions__url']), url):
+ permission_dict = request.session.get(settings.PERMISSIONS_LIST)
+
+
+
+
+
+ # 权限的校验,
+ # permission_dict,是一个字典,键是id,值是权限的字段title url id pid
+ for i in permission_dict.values():
+
+ if re.match(r'^{}$'.format(i.get('url')), url):
+ #获取二级菜单的id
+ id = i.get('id')
+ #获取关联二级菜单的,普通权限的prend_id
+ pid = i.get('pid')
+ pname = i.get('pname')
+ # 如果有关的二级菜单的,prend_id存在
+ if pid:
+ #则访问的就是与二级菜单相关的,权限,定义一个变量
+ #c_id = pid,封装给request
+ request.c_id = pid
+
+ #不是二级菜单,导航栏列表得加二级菜单,根据权限的数据结构
+ # 先添加二级菜单,在添加普通权限
+ er_permission = permission_dict[pname]
+ request.breadcrumb_list.append({'title':er_permission['title'],'url':er_permission['url']})
+
+ else:
+ #没有pid 的话,当前访问的就是二级菜单
+ request.c_id = id
+ request.breadcrumb_list.append({'title': i['title'], 'url': i['url']})
return
return HttpResponse('没有访问权限 请联系管理员')
diff --git "a/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/migrations/0002_auto_20190424_1623.py" "b/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/migrations/0002_auto_20190424_1623.py"
new file mode 100644
index 0000000000000000000000000000000000000000..57d511bff195717d3ef062dd9d32c03ef1012f7a
--- /dev/null
+++ "b/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/migrations/0002_auto_20190424_1623.py"
@@ -0,0 +1,25 @@
+# -*- 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, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('rabc', '0001_initial'),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name='permission',
+ name='icon',
+ field=models.CharField(blank=True, max_length=32, null=True, verbose_name='图标'),
+ ),
+ migrations.AddField(
+ model_name='permission',
+ name='is_menu',
+ field=models.BooleanField(default=False, verbose_name='是否是菜单栏'),
+ ),
+ ]
diff --git "a/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/migrations/0003_auto_20190424_2030.py" "b/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/migrations/0003_auto_20190424_2030.py"
new file mode 100644
index 0000000000000000000000000000000000000000..035d404d621b17dc12e3567f33b7a1def1aac3ba
--- /dev/null
+++ "b/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/migrations/0003_auto_20190424_2030.py"
@@ -0,0 +1,37 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.20 on 2019-04-24 12:30
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('rabc', '0002_auto_20190424_1623'),
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name='Menu',
+ fields=[
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('title', models.CharField(max_length=32, verbose_name='一级菜单')),
+ ('icon', models.CharField(blank=True, max_length=64, null=True, verbose_name='图标')),
+ ],
+ ),
+ migrations.RemoveField(
+ model_name='permission',
+ name='icon',
+ ),
+ migrations.RemoveField(
+ model_name='permission',
+ name='is_menu',
+ ),
+ migrations.AddField(
+ model_name='permission',
+ name='menu',
+ field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='rabc.Menu'),
+ ),
+ ]
diff --git "a/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/migrations/0004_menu_weight.py" "b/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/migrations/0004_menu_weight.py"
new file mode 100644
index 0000000000000000000000000000000000000000..97d24b065625c9616480cb982cf6e64502776dc7
--- /dev/null
+++ "b/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/migrations/0004_menu_weight.py"
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.20 on 2019-04-25 04:17
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('rabc', '0003_auto_20190424_2030'),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name='menu',
+ name='weight',
+ field=models.IntegerField(default=2),
+ ),
+ ]
diff --git "a/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/migrations/0005_permission_parent.py" "b/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/migrations/0005_permission_parent.py"
new file mode 100644
index 0000000000000000000000000000000000000000..4406cf809e0b4362757505b9078b8ecdd6349a98
--- /dev/null
+++ "b/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/migrations/0005_permission_parent.py"
@@ -0,0 +1,21 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.20 on 2019-04-25 08:42
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('rabc', '0004_menu_weight'),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name='permission',
+ name='parent',
+ field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='rabc.Permission'),
+ ),
+ ]
diff --git "a/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/migrations/0006_permission_name.py" "b/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/migrations/0006_permission_name.py"
new file mode 100644
index 0000000000000000000000000000000000000000..ee57e8854042ad41bfa5000a6f27419da3471998
--- /dev/null
+++ "b/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/migrations/0006_permission_name.py"
@@ -0,0 +1,21 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.20 on 2019-04-25 14:29
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('rabc', '0005_permission_parent'),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name='permission',
+ name='name',
+ field=models.CharField(default='', max_length=32, verbose_name='url别名'),
+ preserve_default=False,
+ ),
+ ]
diff --git "a/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/migrations/0007_auto_20190425_2245.py" "b/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/migrations/0007_auto_20190425_2245.py"
new file mode 100644
index 0000000000000000000000000000000000000000..19f1e5b8f7e9541ba176db78ffa0e37d550a5212
--- /dev/null
+++ "b/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/migrations/0007_auto_20190425_2245.py"
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.20 on 2019-04-25 14:45
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('rabc', '0006_permission_name'),
+ ]
+
+ operations = [
+ migrations.AlterField(
+ model_name='permission',
+ name='name',
+ field=models.CharField(max_length=32, unique=True, verbose_name='url别名'),
+ ),
+ ]
diff --git "a/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/migrations/__pycache__/0002_auto_20190424_1623.cpython-36.pyc" "b/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/migrations/__pycache__/0002_auto_20190424_1623.cpython-36.pyc"
new file mode 100644
index 0000000000000000000000000000000000000000..fa7e584794e60c0f3744f3608768e6edd16437cd
Binary files /dev/null and "b/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/migrations/__pycache__/0002_auto_20190424_1623.cpython-36.pyc" differ
diff --git "a/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/migrations/__pycache__/0003_auto_20190424_2030.cpython-36.pyc" "b/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/migrations/__pycache__/0003_auto_20190424_2030.cpython-36.pyc"
new file mode 100644
index 0000000000000000000000000000000000000000..2e0bcdde92c728020da2c2ef0069654aa5d69126
Binary files /dev/null and "b/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/migrations/__pycache__/0003_auto_20190424_2030.cpython-36.pyc" differ
diff --git "a/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/migrations/__pycache__/0004_menu_weight.cpython-36.pyc" "b/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/migrations/__pycache__/0004_menu_weight.cpython-36.pyc"
new file mode 100644
index 0000000000000000000000000000000000000000..5ff8540f349f59e1826892975c23f3271ad14782
Binary files /dev/null and "b/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/migrations/__pycache__/0004_menu_weight.cpython-36.pyc" differ
diff --git "a/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/migrations/__pycache__/0005_permission_parent.cpython-36.pyc" "b/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/migrations/__pycache__/0005_permission_parent.cpython-36.pyc"
new file mode 100644
index 0000000000000000000000000000000000000000..2199258cca2febdaf02706acf859459cff6a54f7
Binary files /dev/null and "b/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/migrations/__pycache__/0005_permission_parent.cpython-36.pyc" differ
diff --git "a/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/migrations/__pycache__/0006_permission_name.cpython-36.pyc" "b/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/migrations/__pycache__/0006_permission_name.cpython-36.pyc"
new file mode 100644
index 0000000000000000000000000000000000000000..db3282b2ddb61462fe49d32a48c0d76528514c2b
Binary files /dev/null and "b/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/migrations/__pycache__/0006_permission_name.cpython-36.pyc" differ
diff --git "a/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/migrations/__pycache__/0007_auto_20190425_2245.cpython-36.pyc" "b/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/migrations/__pycache__/0007_auto_20190425_2245.cpython-36.pyc"
new file mode 100644
index 0000000000000000000000000000000000000000..1064535851eced15926489e83b4cf06cad10b88d
Binary files /dev/null and "b/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/migrations/__pycache__/0007_auto_20190425_2245.cpython-36.pyc" differ
diff --git "a/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/models.py" "b/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/models.py"
index dd091707ef9862f4131e0310d122040663062fa5..f7416aec887ace8e58f50eba8b7139af68b378b9 100644
--- "a/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/models.py"
+++ "b/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/models.py"
@@ -1,9 +1,40 @@
from django.db import models
+
+class Menu(models.Model):
+ '''
+ 一级菜单
+ '''
+ title = models.CharField('一级菜单', max_length=32)
+ icon = models.CharField('图标', max_length=64, blank=True, null=True)
+ weight = models.IntegerField(default=2)
+ def __str__(self):
+ return self.title
+
+
+
class Permission(models.Model):
- """权限表"""
+ '''
+ 权限表
+ 二级菜单
+ 没有menu_id 是普通权限
+ 有menu_id 是二级
+
+ 非菜单的权限归属,添加自关联字段
+
+
+
+ '''
url = models.CharField('URL地址', max_length=108)
title = models.CharField('标题', max_length=32)
+ # verbose_name='所属菜单显示在,HTML上的名字
+ menu = models.ForeignKey('Menu', blank=True, null=True,verbose_name='所属菜单')
+
+ name = models.CharField('url别名',max_length=32,unique=True)
+
+ # 自关联子段
+ parent = models.ForeignKey('self',blank=True,null=True)
+
class Meta:
verbose_name = '权限'
@@ -12,6 +43,7 @@ class Permission(models.Model):
def __str__(self):
return self.title
+
class Role(models.Model):
"""角色表"""
name = models.CharField('角色名称', max_length=32)
diff --git "a/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/static/rbac/css/menu.css" "b/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/static/rbac/css/menu.css"
new file mode 100644
index 0000000000000000000000000000000000000000..2a5deb66e8f259b4289f80c8efda7a4e019c585b
--- /dev/null
+++ "b/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/static/rbac/css/menu.css"
@@ -0,0 +1,75 @@
+.left-menu .menu-body .static-menu {
+
+}
+
+.left-menu .menu-body .static-menu .icon-wrap {
+ width: 20px;
+ display: inline-block;
+ text-align: center;
+}
+
+.left-menu .menu-body .static-menu a {
+ text-decoration: none;
+ padding: 8px 15px;
+ border-bottom: 1px solid #ccc;
+ color: #333;
+ display: block;
+ background: #efefef;
+ background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #efefef), color-stop(1, #fafafa));
+ background: -ms-linear-gradient(bottom, #efefef, #fafafa);
+ background: -moz-linear-gradient(center bottom, #efefef 0%, #fafafa 100%);
+ background: -o-linear-gradient(bottom, #efefef, #fafafa);
+ filter: progid:dximagetransform.microsoft.gradient(startColorStr='#e3e3e3', EndColorStr='#ffffff');
+ -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#fafafa',EndColorStr='#efefef')";
+ box-shadow: inset 0px 1px 1px white;
+}
+
+.left-menu .menu-body .static-menu a:hover {
+ color: #2F72AB;
+ border-left: 2px solid #2F72AB;
+}
+
+.left-menu .menu-body .static-menu a.active {
+ color: #2F72AB;
+ border-left: 2px solid #2F72AB;
+}
+
+multi-menu .item {
+ background-color: white;
+}
+
+.multi-menu .item > .title {
+ padding: 10px 5px;
+ border-bottom: 1px solid #dddddd;
+ cursor: pointer;
+ color: #333;
+ display: block;
+ background: #efefef;
+ background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #efefef), color-stop(1, #fafafa));
+ background: -ms-linear-gradient(bottom, #efefef, #fafafa);
+ background: -o-linear-gradient(bottom, #efefef, #fafafa);
+ filter: progid:dximagetransform.microsoft.gradient(startColorStr='#e3e3e3', EndColorStr='#ffffff');
+ -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#fafafa',EndColorStr='#efefef')";
+ box-shadow: inset 0 1px 1px white;
+}
+
+.multi-menu .item > .body {
+ border-bottom: 1px solid #dddddd;
+}
+
+.multi-menu .item > .body a {
+ display: block;
+ padding: 5px 20px;
+ text-decoration: none;
+ border-left: 2px solid transparent;
+ font-size: 13px;
+
+}
+
+.multi-menu .item > .body a:hover {
+ border-left: 2px solid #2F72AB;
+}
+
+.multi-menu .item > .body a.active {
+ border-left: 2px solid #2F72AB;
+}
\ No newline at end of file
diff --git "a/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/static/rbac/js/menu.js" "b/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/static/rbac/js/menu.js"
new file mode 100644
index 0000000000000000000000000000000000000000..0e24bf1c18a043ddee72e79821ff0d958365d807
--- /dev/null
+++ "b/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/static/rbac/js/menu.js"
@@ -0,0 +1,4 @@
+$('.multi-menu .title').click(function () {
+ $(this).next().removeClass('hide');
+ $(this).parent().siblings().find('.body').addClass('hide');
+});
diff --git "a/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/templates/breadcrumb.html" "b/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/templates/breadcrumb.html"
new file mode 100644
index 0000000000000000000000000000000000000000..7cdd9b6b3902d3601ecd631a4b193656fce62cd1
--- /dev/null
+++ "b/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/templates/breadcrumb.html"
@@ -0,0 +1,9 @@
+
+ {% for breadcrumb in breadcrumb_list %}
+ {% if forloop.last %}
+ - {{ breadcrumb.title }}
+ {% else %}
+ - {{ breadcrumb.title }}
+ {% endif %}
+ {% endfor %}
+
\ No newline at end of file
diff --git "a/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/templates/dao_hang_lan.html" "b/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/templates/dao_hang_lan.html"
new file mode 100644
index 0000000000000000000000000000000000000000..d651d80dcb630d24d0ba28b3964c130b8b4c00db
--- /dev/null
+++ "b/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/templates/dao_hang_lan.html"
@@ -0,0 +1,9 @@
+
+ {% for breadcumb in breadcrumb_list %}
+ {% if forloop.last %}
+ - {{ breadcumb.title }}
+ {% else %}
+ - {{ breadcumb.title }}
+ {% endif %}
+ {% endfor %}
+
\ No newline at end of file
diff --git "a/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/templates/distribute_permissions.html" "b/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/templates/distribute_permissions.html"
new file mode 100644
index 0000000000000000000000000000000000000000..551e2611e35f6839f68b0b59442681fc9f095e98
--- /dev/null
+++ "b/luffy_permission-\347\251\272\347\231\275\347\211\210/rabc/templates/distribute_permissions.html"
@@ -0,0 +1,243 @@
+{% extends 'layout.html' %}
+{% load mu_tage %}
+{% block css %}
+
+{% endblock %}
+
+{% block content %}
+
+{% 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 %}
+
+
+
+{% 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 @@
+
+
+
+
+
\ 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 %}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 名称 |
+ URL |
+ URL别名 |
+ 所属菜单 |
+ 操作 |
+
+
+
+ {% for p_permission in all_permission %}
+
+ {{ p_permission.title }} |
+ {{ p_permission.url }} |
+ {{ p_permission.name }} |
+ {{ p_permission.menu__title }} |
+ {# 编辑 #}
+
+ {# 删除 传的类名不能是大写 否则报错#}
+
+ |
+
+
+ {% for c_permission in p_permission.children %}
+
+ {{ c_permission.title }} |
+ {{ c_permission.url }} |
+ {{ c_permission.name }} |
+ |
+
+
+ |
+
+ {% endfor %}
+
+
+
+ {% endfor %}
+
+
+
+
+
+
+
+
+
+{% 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 %}
+
+
+
+
+
+
+ 待删除权限列表
+
+
+ 注意:数据库中存在,但路由系统中不存在的路由。
+
+
+
+
+
+ 序号 |
+ 名称 |
+ URL |
+ 别名 |
+ 父权限 |
+ 所属菜单 |
+ 操作 |
+
+
+
+ {% for form in del_formset %}
+
+
+ {{ form.id }}
+
+ {{ forloop.counter }} |
+ {{ form.title }} {{ form.title.errors.0 }} |
+ {{ form.url }} |
+ {{ form.name }} |
+ {{ form.parent }} |
+ {{ form.menu }} |
+
+
+
+
+ |
+
+ {% endfor %}
+
+
+
+
+
+
+{% 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 %}
+
+ {{ role.id }} |
+ {{ role.name }} |
+
+ |
+
+
+ {% endfor %}
+
+
+
+{% 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 @@
{{ row.age }} |
{{ row.email }} |
{{ row.company }} |
-
-
-
- |
-
- |
+ {% if request|has_permission:'customer_del' or request|has_permission:'customer_edit' %}
+
+
+ {% if request|has_permission:'customer_edit' %}
+
+
+ {% endif %}
+
+ {% if request|has_permission:'customer_del' %}
+
+ {% endif %}
+ |
+ {% 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 @@