Merge remote-tracking branch 'origin/master' into master
# Conflicts: # dvadmin-backend/apps/vadmin/system/urls.py # dvadmin-backend/apps/vadmin/system/views.pypull/2/head
						commit
						a80c52136b
					
				|  | @ -19,3 +19,4 @@ bin-release/ | |||
| docker_env/mysql/data/ | ||||
| docker_env/redis/data/ | ||||
| */.idea | ||||
| dvadmin-doc/docs/.vuepress/dist | ||||
|  |  | |||
							
								
								
									
										24
									
								
								README.md
								
								
								
								
							
							
						
						
									
										24
									
								
								README.md
								
								
								
								
							|  | @ -31,20 +31,24 @@ github地址:[https://github.com/liqianglog/django-vue-admin](https://github.c | |||
| 
 | ||||
| ## 内置功能 | ||||
| 
 | ||||
| ##### 预计3月底发布v1.0正式版本,个别功能开发中 [版本功能说明](https://gitee.com/liqianglog/django-vue-admin/wikis/releaseNote?sort_id=3615540) | ||||
| 
 | ||||
| 1.  用户管理:用户是系统操作者,该功能主要完成系统用户配置。 | ||||
| 2.  部门管理:配置系统组织机构(公司、部门、小组),树结构展现支持数据权限。 | ||||
| 3.  岗位管理:配置系统用户所属担任职务。 | ||||
| 4.  菜单管理:配置系统菜单,操作权限,按钮权限标识等。 | ||||
| 5.  角色管理:角色菜单权限分配、设置角色按机构进行数据范围权限划分。 | ||||
| 4.  菜单管理:配置系统菜单,操作权限,按钮权限标识、后端接口权限等。 | ||||
| 5.  角色管理:角色菜单权限分配、数据权限分配、设置角色按机构进行数据范围权限划分。 | ||||
| 6.  字典管理:对系统中经常使用的一些较为固定的数据进行维护。 | ||||
| 7.  参数管理:对系统动态配置常用参数。 | ||||
| 8.  操作日志:系统正常操作日志记录和查询;系统异常信息日志记录和查询。 | ||||
| 9.  登录日志:系统登录日志记录查询包含登录异常。 | ||||
| 10.  在线用户:当前系统中活跃用户状态监控。 | ||||
| 11.  定时任务:在线(添加、修改、删除)任务调度包含执行结果日志。 | ||||
| 12.  ~~代码生成:前后端代码的生成。~~ | ||||
| 13.  ~~服务监控:监视当前系统CPU、内存、磁盘、堆栈等相关信息。~~ | ||||
| 14.  ~~在线构建器:拖动表单元素生成相应的HTML代码。~~ | ||||
| 8.  文件管理:管理所有上传的和导出的文件。 | ||||
| 9.  通知公告:发布通知公告给所有人,进行消息的通知。 | ||||
| 10.  操作日志:系统正常操作日志记录和查询;系统异常信息日志记录和查询。 | ||||
| 11.  登录日志:系统登录日志记录查询包含登录异常。 | ||||
| 12.  在线用户:当前系统中活跃用户状态监控、用户强退功能。 | ||||
| 13.  定时任务:在线(添加、修改、删除)任务调度包含执行结果日志。 | ||||
| 14.  用户注册:新用户注册页面。 | ||||
| 15.  服务监控:监视当前系统CPU、内存、磁盘、堆栈、celery 当前状态等相关信息。 | ||||
| 16.  在线构建器:拖动表单元素生成相应的HTML代码。 | ||||
| 
 | ||||
| ## 在线体验 | ||||
| 
 | ||||
|  | @ -98,7 +102,7 @@ npm run build:prod | |||
| 	python3 manage.py makemigrations | ||||
| 	python3 manage.py migrate | ||||
| 5. 初始化数据 | ||||
| 	python3 manage.py initialization | ||||
| 	python3 manage.py init | ||||
| 6. 启动项目 | ||||
| 	python3 manage.py runserver 0.0.0.0:8000 | ||||
| 	 | ||||
|  |  | |||
|  | @ -6,6 +6,43 @@ | |||
| 
 | ||||
| version: "3" | ||||
| services: | ||||
|   dvadmin-ui: | ||||
|     container_name: dvadmin-ui | ||||
|     build: | ||||
|       context: ./ | ||||
|       dockerfile: ./docker_env/vue-ui/Dockerfile | ||||
|     environment: | ||||
|       TZ: Asia/Shanghai | ||||
|     volumes: | ||||
|       - "./dvadmin-ui:/dvadmin-ui" | ||||
|     command: | ||||
|       - /bin/bash | ||||
|       - -c | ||||
|       - | | ||||
|         cd /dvadmin-ui | ||||
|         npm install --registry=https://registry.npm.taobao.org | ||||
|         rm -rf /dvadmin-ui/dist | ||||
|         npm run build:prod | ||||
| 
 | ||||
| 
 | ||||
|   dvadmin-doc: | ||||
|     container_name: dvadmin-doc | ||||
|     build: | ||||
|       context: ./ | ||||
|       dockerfile: ./docker_env/vue-doc/Dockerfile | ||||
|     environment: | ||||
|       TZ: Asia/Shanghai | ||||
|     volumes: | ||||
|       - "./dvadmin-doc:/dvadmin-doc" | ||||
|     command: | ||||
|       - /bin/bash | ||||
|       - -c | ||||
|       - | | ||||
|         cd /dvadmin-doc | ||||
|         npm install --registry=https://registry.npm.taobao.org | ||||
|         rm -rf /dvadmin-doc/dist | ||||
|         npm run docs:build | ||||
| 
 | ||||
| 
 | ||||
|   dvadmin-redis: | ||||
|     image: redis:latest | ||||
|  |  | |||
|  | @ -1,59 +1,61 @@ | |||
| -----BEGIN CERTIFICATE----- | ||||
| MIIFiTCCBHGgAwIBAgIQCSthZmB3qh7J8+SexO9NvzANBgkqhkiG9w0BAQsFADBu | ||||
| MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 | ||||
| d3cuZGlnaWNlcnQuY29tMS0wKwYDVQQDEyRFbmNyeXB0aW9uIEV2ZXJ5d2hlcmUg | ||||
| RFYgVExTIENBIC0gRzEwHhcNMjEwMzA2MDAwMDAwWhcNMjIwMzA2MjM1OTU5WjAj | ||||
| MSEwHwYDVQQDExhhcGkuZGphbmdvLXZ1ZS1hZG1pbi5jb20wggEiMA0GCSqGSIb3 | ||||
| DQEBAQUAA4IBDwAwggEKAoIBAQDjV1vx/gUbM4FAS0jL+8EomI8l71vooU1NOaHp | ||||
| oAeEOFEaVOLwmB7ObPWhsl4bb2z+pA6081360bzu4d46ZsRV45IY5YafMLaSF+Fn | ||||
| sKZHc1db18yp60GSITJoEIrqDV+cmwaBlcdgvOi0MzcHpoAv5yJrarwYj2sruNfb | ||||
| +Whu6yPGY+ZEmJVKPcOxS67ckkBFyf0yfBci+0sYh1cTNxGx/oISnu8b290d2G0H | ||||
| cIIB8GmpZBcrQtvHXq59jTwhL0soX3s4ZsMIQZlHVnUVYfEGyl90i3pt9WGraDcI | ||||
| H3C1l4nG5+u7XsiBtPAhdLHUIp6+KAcXX+OeSP5Xv+Cn2IN7AgMBAAGjggJsMIIC | ||||
| aDAfBgNVHSMEGDAWgBRVdE+yck/1YLpQ0dfmUVyaAYca1zAdBgNVHQ4EFgQU5DlU | ||||
| Ojy2nTlzZ4fxjtbaHX+IoLkwIwYDVR0RBBwwGoIYYXBpLmRqYW5nby12dWUtYWRt | ||||
| aW4uY29tMA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYB | ||||
| BQUHAwIwPgYDVR0gBDcwNTAzBgZngQwBAgEwKTAnBggrBgEFBQcCARYbaHR0cDov | ||||
| L3d3dy5kaWdpY2VydC5jb20vQ1BTMIGABggrBgEFBQcBAQR0MHIwJAYIKwYBBQUH | ||||
| MAGGGGh0dHA6Ly9vY3NwLmRpZ2ljZXJ0LmNvbTBKBggrBgEFBQcwAoY+aHR0cDov | ||||
| L2NhY2VydHMuZGlnaWNlcnQuY29tL0VuY3J5cHRpb25FdmVyeXdoZXJlRFZUTFND | ||||
| QS1HMS5jcnQwCQYDVR0TBAIwADCCAQIGCisGAQQB1nkCBAIEgfMEgfAA7gB1ACl5 | ||||
| vvCeOTkh8FZzn2Old+W+V32cYAr4+U1dJlwlXceEAAABeAh+/14AAAQDAEYwRAIg | ||||
| YaqOZibfJ+3YCZ0J2J+nOKAcDcOnGLLLBG7DkU+T+EgCIEmuNiy7gZRDUBHQxCht | ||||
| 329qSdpzeGnKUNczDUzxtxe+AHUAIkVFB1lVJFaWP6Ev8fdthuAjJmOtwEt/XcaD | ||||
| XG7iDwIAAAF4CH7/QwAABAMARjBEAiB9i6rk7/0JQ3WB2Cktkt8UHbs2SSTQKcbY | ||||
| 71Pjr2gHNAIgLZbdCE34ldSfcH9ZQzer8T6bGNNZ5ARDA8Cjyh5ABM8wDQYJKoZI | ||||
| hvcNAQELBQADggEBAG2T1E+mZTcRge0ivp1mTLdhy2qKd4tw8WosFCU7wv8U6D8f | ||||
| DQV4OBOj/n0jXArAUHCcUhNNkxuwT1n9H1AOxVqrIqqUASIyqwCRukQudXBVI7rG | ||||
| bCSdjP8bmlFodBqpfbXnccwgzTzB4DGJrV44NGD0lJEUE/890EP+1Ay++y8k71jw | ||||
| Ns9dMdA+GKTmj6YxCI0BJnldpKN8dxNN/XGdAPJaf8u3zHgUN/CXLNbnwQTUWlSv | ||||
| 1qeFNBMMeUypWtpy4V9jJrqzvKKQQv8vbZgmZBIGhjq72fBK3DR2OofWjYT/ckIz | ||||
| tGbJfoef3qjhNeTxty+S5WoVwtHPr+3MUmk3j7o= | ||||
| MIIFoTCCBImgAwIBAgIQA4TN09XlucVnL4BLCuvHijANBgkqhkiG9w0BAQsFADBy | ||||
| MQswCQYDVQQGEwJDTjElMCMGA1UEChMcVHJ1c3RBc2lhIFRlY2hub2xvZ2llcywg | ||||
| SW5jLjEdMBsGA1UECxMURG9tYWluIFZhbGlkYXRlZCBTU0wxHTAbBgNVBAMTFFRy | ||||
| dXN0QXNpYSBUTFMgUlNBIENBMB4XDTIxMDMwMzAwMDAwMFoXDTIyMDMwMjIzNTk1 | ||||
| OVowIzEhMB8GA1UEAxMYYXBpLmRqYW5nby12dWUtYWRtaW4uY29tMIIBIjANBgkq | ||||
| hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAu5QSBTQbToLUu4wCYy/BNoinqFkXiTZE | ||||
| aV6/5PJIeNsz75fnAEuBpIATEHqRsY6L9HdYAvBiAEv6ufCZhzwWF7ph1ZMhg6ul | ||||
| foaQwoVCkbKi/zgwi3tvteda5vXQs4e8GvgZ6zkabQ4cZFjVpb3dA6huBbs20jLf | ||||
| YYXsXWsJEGF3JK5okQ08+u/h/q0lFDFa70S9hpQXMtSfCCW/AuEc/+tG7rnUul1o | ||||
| MXjpVnDOmg+CZfIYgi9D30/zd1DYFJOEwawl5FKLFQY7TOn3RlZ3SR4mNbbhIgHP | ||||
| L9S1xHGcm8UC7PKuOgh8+5Nl0aeeUB1liuzM/w5JbF4L4FoZW6ciNQIDAQABo4IC | ||||
| gDCCAnwwHwYDVR0jBBgwFoAUf9OZ86BHDjEAVlYijrfMnt3KAYowHQYDVR0OBBYE | ||||
| FHvXBhsuPta7SwvCVVgv9e/bZ9AeMCMGA1UdEQQcMBqCGGFwaS5kamFuZ28tdnVl | ||||
| LWFkbWluLmNvbTAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEG | ||||
| CCsGAQUFBwMCMD4GA1UdIAQ3MDUwMwYGZ4EMAQIBMCkwJwYIKwYBBQUHAgEWG2h0 | ||||
| dHA6Ly93d3cuZGlnaWNlcnQuY29tL0NQUzCBkgYIKwYBBQUHAQEEgYUwgYIwNAYI | ||||
| KwYBBQUHMAGGKGh0dHA6Ly9zdGF0dXNlLmRpZ2l0YWxjZXJ0dmFsaWRhdGlvbi5j | ||||
| b20wSgYIKwYBBQUHMAKGPmh0dHA6Ly9jYWNlcnRzLmRpZ2l0YWxjZXJ0dmFsaWRh | ||||
| dGlvbi5jb20vVHJ1c3RBc2lhVExTUlNBQ0EuY3J0MAkGA1UdEwQCMAAwggEEBgor | ||||
| BgEEAdZ5AgQCBIH1BIHyAPAAdgApeb7wnjk5IfBWc59jpXflvld9nGAK+PlNXSZc | ||||
| JV3HhAAAAXf48Te1AAAEAwBHMEUCIDjqPKTNX4EcFxayaLirTT1y98X9X1HP97bM | ||||
| IV0HpJmYAiEAjMdYYUqFuHLkSl4/bq5F/FPtt25AbKGhyolIVDWvsNoAdgAiRUUH | ||||
| WVUkVpY/oS/x922G4CMmY63AS39dxoNcbuIPAgAAAXf48TgFAAAEAwBHMEUCIBQM | ||||
| bXvVtAOXQfBjp+7HzsyWH51BZ2vyH1VyLpuGSs7dAiEAiyt4h7P7oRheoZKmn8wp | ||||
| CptaYocY509Dr8aFbCicWWAwDQYJKoZIhvcNAQELBQADggEBAJG3Ne57IlaucGjH | ||||
| y6j/zJsRnCsIrVNoPUROma+2FD7SauHT6U7iDLtNT5BIrBmDcEnYdqMAjJQoRJC1 | ||||
| VvXSkABEngUajpdpB0m8k9UVB5W+6Extt8TYyRLu1/Xpq0JHiOg+rPYK3UljYybG | ||||
| 2V9KWNhYd2G5yg0+1ZzvaC3zEFIfQJpuESio6hEbilT6FLeVC8TabL0/2tqE12n/ | ||||
| uWYU3Pr9AokD0OQkzN4BUswwIpYBfAXa6HLvj+V6tLOthxY0PLuOm7WiwU2MP0bz | ||||
| dq6LIFu0z8fkwBkkqXXtgSfCigqvRhybaKKF0FT4cdJUb0cfMhUshlzWpJ5EEskO | ||||
| 46xDUok= | ||||
| -----END CERTIFICATE----- | ||||
| -----BEGIN CERTIFICATE----- | ||||
| MIIEqjCCA5KgAwIBAgIQAnmsRYvBskWr+YBTzSybsTANBgkqhkiG9w0BAQsFADBh | ||||
| MIIErjCCA5agAwIBAgIQBYAmfwbylVM0jhwYWl7uLjANBgkqhkiG9w0BAQsFADBh | ||||
| MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 | ||||
| d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD | ||||
| QTAeFw0xNzExMjcxMjQ2MTBaFw0yNzExMjcxMjQ2MTBaMG4xCzAJBgNVBAYTAlVT | ||||
| MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j | ||||
| b20xLTArBgNVBAMTJEVuY3J5cHRpb24gRXZlcnl3aGVyZSBEViBUTFMgQ0EgLSBH | ||||
| MTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALPeP6wkab41dyQh6mKc | ||||
| oHqt3jRIxW5MDvf9QyiOR7VfFwK656es0UFiIb74N9pRntzF1UgYzDGu3ppZVMdo | ||||
| lbxhm6dWS9OK/lFehKNT0OYI9aqk6F+U7cA6jxSC+iDBPXwdF4rs3KRyp3aQn6pj | ||||
| pp1yr7IB6Y4zv72Ee/PlZ/6rK6InC6WpK0nPVOYR7n9iDuPe1E4IxUMBH/T33+3h | ||||
| yuH3dvfgiWUOUkjdpMbyxX+XNle5uEIiyBsi4IvbcTCh8ruifCIi5mDXkZrnMT8n | ||||
| wfYCV6v6kDdXkbgGRLKsR4pucbJtbKqIkUGxuZI2t7pfewKRc5nWecvDBZf3+p1M | ||||
| pA8CAwEAAaOCAU8wggFLMB0GA1UdDgQWBBRVdE+yck/1YLpQ0dfmUVyaAYca1zAf | ||||
| BgNVHSMEGDAWgBQD3lA1VtFMu2bwo+IbG8OXsj3RVTAOBgNVHQ8BAf8EBAMCAYYw | ||||
| HQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBIGA1UdEwEB/wQIMAYBAf8C | ||||
| AQAwNAYIKwYBBQUHAQEEKDAmMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdp | ||||
| Y2VydC5jb20wQgYDVR0fBDswOTA3oDWgM4YxaHR0cDovL2NybDMuZGlnaWNlcnQu | ||||
| Y29tL0RpZ2lDZXJ0R2xvYmFsUm9vdENBLmNybDBMBgNVHSAERTBDMDcGCWCGSAGG | ||||
| /WwBAjAqMCgGCCsGAQUFBwIBFhxodHRwczovL3d3dy5kaWdpY2VydC5jb20vQ1BT | ||||
| MAgGBmeBDAECATANBgkqhkiG9w0BAQsFAAOCAQEAK3Gp6/aGq7aBZsxf/oQ+TD/B | ||||
| SwW3AU4ETK+GQf2kFzYZkby5SFrHdPomunx2HBzViUchGoofGgg7gHW0W3MlQAXW | ||||
| M0r5LUvStcr82QDWYNPaUy4taCQmyaJ+VB+6wxHstSigOlSNF2a6vg4rgexixeiV | ||||
| 4YSB03Yqp2t3TeZHM9ESfkus74nQyW7pRGezj+TC44xCagCQQOzzNmzEAP2SnCrJ | ||||
| sNE2DpRVMnL8J6xBRdjmOsC3N6cQuKuRXbzByVBjCqAA8t1L0I+9wXJerLPyErjy | ||||
| rMKWaBFLmfK/AHNF4ZihwPGOc7w6UHczBZXH5RFzJNnww+WnKuTPI0HfnVH8lg== | ||||
| -----END CERTIFICATE----- | ||||
| QTAeFw0xNzEyMDgxMjI4MjZaFw0yNzEyMDgxMjI4MjZaMHIxCzAJBgNVBAYTAkNO | ||||
| MSUwIwYDVQQKExxUcnVzdEFzaWEgVGVjaG5vbG9naWVzLCBJbmMuMR0wGwYDVQQL | ||||
| ExREb21haW4gVmFsaWRhdGVkIFNTTDEdMBsGA1UEAxMUVHJ1c3RBc2lhIFRMUyBS | ||||
| U0EgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCgWa9X+ph+wAm8 | ||||
| Yh1Fk1MjKbQ5QwBOOKVaZR/OfCh+F6f93u7vZHGcUU/lvVGgUQnbzJhR1UV2epJa | ||||
| e+m7cxnXIKdD0/VS9btAgwJszGFvwoqXeaCqFoP71wPmXjjUwLT70+qvX4hdyYfO | ||||
| JcjeTz5QKtg8zQwxaK9x4JT9CoOmoVdVhEBAiD3DwR5fFgOHDwwGxdJWVBvktnoA | ||||
| zjdTLXDdbSVC5jZ0u8oq9BiTDv7jAlsB5F8aZgvSZDOQeFrwaOTbKWSEInEhnchK | ||||
| ZTD1dz6aBlk1xGEI5PZWAnVAba/ofH33ktymaTDsE6xRDnW97pDkimCRak6CEbfe | ||||
| 3dXw6OV5AgMBAAGjggFPMIIBSzAdBgNVHQ4EFgQUf9OZ86BHDjEAVlYijrfMnt3K | ||||
| AYowHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUwDgYDVR0PAQH/BAQD | ||||
| AgGGMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjASBgNVHRMBAf8ECDAG | ||||
| AQH/AgEAMDQGCCsGAQUFBwEBBCgwJjAkBggrBgEFBQcwAYYYaHR0cDovL29jc3Au | ||||
| ZGlnaWNlcnQuY29tMEIGA1UdHwQ7MDkwN6A1oDOGMWh0dHA6Ly9jcmwzLmRpZ2lj | ||||
| ZXJ0LmNvbS9EaWdpQ2VydEdsb2JhbFJvb3RDQS5jcmwwTAYDVR0gBEUwQzA3Bglg | ||||
| hkgBhv1sAQIwKjAoBggrBgEFBQcCARYcaHR0cHM6Ly93d3cuZGlnaWNlcnQuY29t | ||||
| L0NQUzAIBgZngQwBAgEwDQYJKoZIhvcNAQELBQADggEBAK3dVOj5dlv4MzK2i233 | ||||
| lDYvyJ3slFY2X2HKTYGte8nbK6i5/fsDImMYihAkp6VaNY/en8WZ5qcrQPVLuJrJ | ||||
| DSXT04NnMeZOQDUoj/NHAmdfCBB/h1bZ5OGK6Sf1h5Yx/5wR4f3TUoPgGlnU7EuP | ||||
| ISLNdMRiDrXntcImDAiRvkh5GJuH4YCVE6XEntqaNIgGkRwxKSgnU3Id3iuFbW9F | ||||
| UQ9Qqtb1GX91AJ7i4153TikGgYCdwYkBURD8gSVe8OAco6IfZOYt/TEwii1Ivi1C | ||||
| qnuUlWpsF1LdQNIdfbW3TSe0BhQa7ifbVIfvPWHYOu3rkg1ZeMo6XRU9B4n5VyJY | ||||
| RmE= | ||||
| -----END CERTIFICATE----- | ||||
|  | @ -1,27 +1,27 @@ | |||
| -----BEGIN RSA PRIVATE KEY----- | ||||
| MIIEpAIBAAKCAQEA41db8f4FGzOBQEtIy/vBKJiPJe9b6KFNTTmh6aAHhDhRGlTi | ||||
| 8Jgezmz1obJeG29s/qQOtPNd+tG87uHeOmbEVeOSGOWGnzC2khfhZ7CmR3NXW9fM | ||||
| qetBkiEyaBCK6g1fnJsGgZXHYLzotDM3B6aAL+cia2q8GI9rK7jX2/lobusjxmPm | ||||
| RJiVSj3DsUuu3JJARcn9MnwXIvtLGIdXEzcRsf6CEp7vG9vdHdhtB3CCAfBpqWQX | ||||
| K0Lbx16ufY08IS9LKF97OGbDCEGZR1Z1FWHxBspfdIt6bfVhq2g3CB9wtZeJxufr | ||||
| u17IgbTwIXSx1CKevigHF1/jnkj+V7/gp9iDewIDAQABAoIBAFH6kAjQ2WWIKp0V | ||||
| KMCJ3Yr2jHQY/rMB636kACtfTiaTKkfNAXLR4BX++4pd6AqLoSmn3jfJJIQMOs2H | ||||
| fFvh7/2qzOWWavefmM5QtzLtY+CTCpbvV/mUAHah6uvUv0sMHIS78FotORK8vEsy | ||||
| xq7HDyV2+xXyDLbsjLBc/NXxd4O7L9i6+6VrFFX4efowedLdudWG2GXyrq/6xT6E | ||||
| 0G1aDI1ViYoCYiP/Rm1ET8qVhtHBiQ2rHIYsTdUhkMubT29AvDBaxyi+syyeXmLu | ||||
| W/ZafdP37hm2f0DQXmlRr7Wr0Cni8oOSFAZj7IFhxuWKCaMVPxTeAUSJfFqiUN2X | ||||
| cm9Tv7kCgYEA/gOAt3zrMezkqSWr+S5m5/i8ClBJvZJ6Yp/tMg6AR+W0GH94hFZC | ||||
| u/dtFPI7nPNHTp19YNq2/TTfA81PmQMOVvQbg9eH2016XY+x0Z6i1vKdMEqddkcW | ||||
| 36hslgmY3cyXDL0WzZgX2aCl8uy8XViHkMaf1RPL10hqdXXcNoOOSPkCgYEA5R52 | ||||
| T8bn3spBSfaKooTwrHj2Varxxo9KbypJo0OzOFF5zPwJdypj9BCI9ajVnkIVjsSv | ||||
| snBdB4qoM/IYluXc2E801Ub+SbY+jx6HJemTy/zKqr1nJABlZcp1KgyQfMhUa4cA | ||||
| iqMJX3ggR7xdph73kW3s4eKeGLc5kkUQMQUpIRMCgYAVWS4EPdd2hrZhEO13L9Mu | ||||
| Q9Vp+H16FUl76H0C6/0UDdYpCO2UEbviGFVuoT0pX7jqfon/DeK7PSpRI3xBG+Sk | ||||
| ojd9ySt93vEd0+nZ+D8vWYykdmDtg+QEQB+ALKZQXdWEGJBGDzZR8BKCbCsYnUwn | ||||
| esoMGnHTUh7AaHttiXj34QKBgQCu4bR+qhz74bc55FPnPr+RdfbYZtWKsH6pIUb5 | ||||
| tkgKua3Vd58l9RY8CY7wq4D5/gkEYz6UXc20XvKKS8TXEPajqLlz/W9FBjTz+uI/ | ||||
| Xu0v63EqJ82dHixHKOSLRvHWPPaq6G3SZCVYWJGTD8UPcl2XBKelttrjlJ799Xcp | ||||
| Y34EPwKBgQDrPDgphCWQos/62qQ2NW0qpxphItlCM/w/j0s8Ff2qT82NKIM3Nr7U | ||||
| Ol9Fm0m4FepvryunWiAF+pD7m+SDAI1abm3MN7QB653w+2zu9B8mY0jU+uFjGCUQ | ||||
| 5uFXsTgbnAYev5V9fCKGRPwHXEIJsidg1jOpc5pGnOvvlTZ+uno6Gg== | ||||
| -----END RSA PRIVATE KEY----- | ||||
| MIIEowIBAAKCAQEAu5QSBTQbToLUu4wCYy/BNoinqFkXiTZEaV6/5PJIeNsz75fn | ||||
| AEuBpIATEHqRsY6L9HdYAvBiAEv6ufCZhzwWF7ph1ZMhg6ulfoaQwoVCkbKi/zgw | ||||
| i3tvteda5vXQs4e8GvgZ6zkabQ4cZFjVpb3dA6huBbs20jLfYYXsXWsJEGF3JK5o | ||||
| kQ08+u/h/q0lFDFa70S9hpQXMtSfCCW/AuEc/+tG7rnUul1oMXjpVnDOmg+CZfIY | ||||
| gi9D30/zd1DYFJOEwawl5FKLFQY7TOn3RlZ3SR4mNbbhIgHPL9S1xHGcm8UC7PKu | ||||
| Ogh8+5Nl0aeeUB1liuzM/w5JbF4L4FoZW6ciNQIDAQABAoIBAAEnd9Xq3GknAm6V | ||||
| /bTFCDQQ8rElPTEVsaWRVO5wdDQ0KxVkEqKMlGNh+1wMWQWl6iQKsPKxrnSwgv4u | ||||
| Zg9wNfWW6r+w7FGeVoIZC157Ce4SEpEt9BSDoawVnJhTtmFIakajNKufGhPGNLQE | ||||
| XOosaSX63RRxcrSn5fp4Y7wuaqucXzPV3MuRABrDTHugW1O37570HLwvY9Hmf2+N | ||||
| WIqEasCjeZ575EwTcqqVwB/j3BNqyrbkxP6aFszxYdMvlK/mpPhrShV6+QmuP02j | ||||
| OvRt9HM8knUVzsGJzuDk5V5VUGejih3VZO1BuqP1LFb1j4siWBoKpVQrP0wSJzaa | ||||
| 5Vru/wECgYEA9SygrrkPESbjSLYIJU4mRmC4zSqbUoWpvTgpK29nNmif7BSJ9bRr | ||||
| 2QSCIho58a0bl3a7GLwY0dnEyDYKF9nTQ8HqlkvwRwxdMql+0hU0o5hOBnljYoyM | ||||
| BBptFvoihCe2se+1FEQkunAFCDph00S5utz+8uTlHSFiSy/fQ4GOZwECgYEAw9xl | ||||
| kZOPSGNEd69F9gtkOAT0kWuazvePSoeYNldZ/MZyE0zE4Wyh5Dk8y5cBt3Pw0ZTr | ||||
| NN1dc24EkjcFIBop4Me5n5zKr4rH1XKsUQ2jaTurp/fVQwGo820n+ChO8cIEobHY | ||||
| p6wmKopnnDKOATMjZd8hg+Gck7qWoeTxk3XizzUCgYAFGGJWfz4S6y36Ct5seA1P | ||||
| lR8CFIqZ0nFOn2YrousQNGhubZbYZmF/ZxqVPtpJbYGPSkZlIzOY2N/AEW9wQ3Si | ||||
| idsoOHfL4jPlo6QhFZO8eqPUep1YJPeb9jiiK5ygBntDg2nN/ASPY1iXbS8vRtRd | ||||
| T850mdExI8p5KYuISZ7+AQKBgHF/ENhoErqW04ErbzYh6cRQksyF92KBsGY25uxu | ||||
| d/XzpP0sGlaq1bFjvagYbGU7aUx5qEatFE8kbL+x5GVy49uewSEOAaHxoNU+qz4Y | ||||
| 0h3T9yfRhKJcnuPY2DWEXiLYFEkCvxKCvmceZuXrocBuOs/4mfpLTamJkWplOdwC | ||||
| jxkVAoGBALU/996M9frxtjvzQdF3ncbKrDcptZN6s1hIBVk1t2PzcT0XgiOUZRqj | ||||
| jvUqZWg7MV6kovdjg7N2KSE0u9p2nysL4ejvZRKMNNBdaFJvOUcaYCMTHok1KfXp | ||||
| Bq75mMgfFLrY+huWzKdRWkEjqD6A05Us48iuikW5Ec32sI6mUzg9 | ||||
| -----END RSA PRIVATE KEY----- | ||||
|  | @ -1,59 +1,61 @@ | |||
| -----BEGIN CERTIFICATE----- | ||||
| MIIFlzCCBH+gAwIBAgIQDXgUgr0IFkhSkGrfB3BoCzANBgkqhkiG9w0BAQsFADBu | ||||
| MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 | ||||
| d3cuZGlnaWNlcnQuY29tMS0wKwYDVQQDEyRFbmNyeXB0aW9uIEV2ZXJ5d2hlcmUg | ||||
| RFYgVExTIENBIC0gRzEwHhcNMjEwMzA2MDAwMDAwWhcNMjIwMzA2MjM1OTU5WjAp | ||||
| MScwJQYDVQQDEx5kYWlseS5hcGkuZGphbmdvLXZ1ZS1hZG1pbi5jb20wggEiMA0G | ||||
| CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDIoHO8FAq7byt+gDDP2/QjOm/8YSFO | ||||
| s+AC0iyhMLx6NDRh9cIJE4U/VVpUrbXKspgO2lVN9c3Z28EhimgTj8wLl4uBXAHg | ||||
| mYS6KZSY1qewN6zagijo0uhI6qSuc+Qr4hZkTrVHhhdIM7G7z7+nMDovLcfZheyT | ||||
| +0emMhqrO5Oroq/+Ym0jbqBY7tLp7ODxdiG7ONNkIgR/t0cK1P5j16h97LUTHvJS | ||||
| QbXd9JpGROWQArwB7bthyW+BjOc8y/z5jyiE0wrrzcDoc707T2855VzeYnoJ/1t/ | ||||
| zNdTpJ/VtM6jk5NjqlqHZE7IPNUPdRQ3ysftVAgoHh/R+UtUs1LheUMbAgMBAAGj | ||||
| ggJ0MIICcDAfBgNVHSMEGDAWgBRVdE+yck/1YLpQ0dfmUVyaAYca1zAdBgNVHQ4E | ||||
| FgQUtkEWynD115BC1cCt+dVbYMINNIEwKQYDVR0RBCIwIIIeZGFpbHkuYXBpLmRq | ||||
| YW5nby12dWUtYWRtaW4uY29tMA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggr | ||||
| BgEFBQcDAQYIKwYBBQUHAwIwPgYDVR0gBDcwNTAzBgZngQwBAgEwKTAnBggrBgEF | ||||
| BQcCARYbaHR0cDovL3d3dy5kaWdpY2VydC5jb20vQ1BTMIGABggrBgEFBQcBAQR0 | ||||
| MHIwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmRpZ2ljZXJ0LmNvbTBKBggrBgEF | ||||
| BQcwAoY+aHR0cDovL2NhY2VydHMuZGlnaWNlcnQuY29tL0VuY3J5cHRpb25FdmVy | ||||
| eXdoZXJlRFZUTFNDQS1HMS5jcnQwCQYDVR0TBAIwADCCAQQGCisGAQQB1nkCBAIE | ||||
| gfUEgfIA8AB2ACl5vvCeOTkh8FZzn2Old+W+V32cYAr4+U1dJlwlXceEAAABeAiA | ||||
| 1B4AAAQDAEcwRQIgJNPwwa2Ckt6jT4iZkg+j7K4dx7Ilg6eo9lITNtas+jwCIQDU | ||||
| 6aY1CbJZQJCfgPbx61LGz6we0rSmw9KLukq2TFJlZgB2ACJFRQdZVSRWlj+hL/H3 | ||||
| bYbgIyZjrcBLf13Gg1xu4g8CAAABeAiA1HAAAAQDAEcwRQIhANyqViocLYtbkecx | ||||
| QnhZyr8LIHPq9Uw3RuiN21RPxY84AiBACIPopJaybo6lQhgQGFVwKayEP3ba+QTK | ||||
| E0REYDfHAzANBgkqhkiG9w0BAQsFAAOCAQEAHaYxBQYKYOpdJ3vEGX7ExR+kTjNM | ||||
| 83r74xAwV2nhbXIsTE0fwuwK7wGPzVyjVpqypIs93/18ehLhTF2Nr4dwloMMfsC+ | ||||
| HWM3mvtb6Y8v5xZ5duZuOeUUlSPlAniygFWB7XuBHJti01YtiwyRxtvELLk3pv3T | ||||
| W2B0NNajfWPqhSm2IShnOL2sxD2OKvDXIKwAjbDRjOTQlkZgH6UocvtKE0REXym7 | ||||
| RHaujJ+fhWwtOqhkshmtWQSha9J4r2/X4v2uS8VyvJ1Lr+UwnxWeYlQ0Zz6Xgqtc | ||||
| b0SD3GvHsA1mxnZJ0oPj3VA8MQkpMJtUjiNPypEjN4YH7UK+B5zXhoAB2A== | ||||
| MIIFrDCCBJSgAwIBAgIQDw9E1qRxoRsSagKtIUbGJzANBgkqhkiG9w0BAQsFADBy | ||||
| MQswCQYDVQQGEwJDTjElMCMGA1UEChMcVHJ1c3RBc2lhIFRlY2hub2xvZ2llcywg | ||||
| SW5jLjEdMBsGA1UECxMURG9tYWluIFZhbGlkYXRlZCBTU0wxHTAbBgNVBAMTFFRy | ||||
| dXN0QXNpYSBUTFMgUlNBIENBMB4XDTIxMDMyMDAwMDAwMFoXDTIyMDMxOTIzNTk1 | ||||
| OVowKTEnMCUGA1UEAxMeZGFpbHkuYXBpLmRqYW5nby12dWUtYWRtaW4uY29tMIIB | ||||
| IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyijP5M9nLFbIimHuhYl4cK7C | ||||
| e4SewgiERRThx+4/iLzFKMVHpSQ0GgcSN7e6tLlfgMzRcUbAnUsia4bzcp0UG+w0 | ||||
| Ny6OrFF7XuU71YQ3B+35NpfAvJGr7pw71aFpl1l+jz9iym4iw6yN5F8poq6TR7Gl | ||||
| PNhX1YWZ+Wy0MCDnvQ00MBsQ/42CGEPzE6ZdKJ3l19NY/9/djnxZE+OgMVR3cdCI | ||||
| I/Et0mahIWYaPGP14/nIzNfOcEZtJMHmgSGF/l9NyUdsrRRK7ltV87YWeU86e2Da | ||||
| hqW9v0oSOLepOzg4PB4wU2IJfykRMXfJNUG6iWjOMVPdqIFTXjJZvtvZg5J4GQID | ||||
| AQABo4IChTCCAoEwHwYDVR0jBBgwFoAUf9OZ86BHDjEAVlYijrfMnt3KAYowHQYD | ||||
| VR0OBBYEFOqwsoYN4FxXPwL2my2kdh/PuVB4MCkGA1UdEQQiMCCCHmRhaWx5LmFw | ||||
| aS5kamFuZ28tdnVlLWFkbWluLmNvbTAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYw | ||||
| FAYIKwYBBQUHAwEGCCsGAQUFBwMCMD4GA1UdIAQ3MDUwMwYGZ4EMAQIBMCkwJwYI | ||||
| KwYBBQUHAgEWG2h0dHA6Ly93d3cuZGlnaWNlcnQuY29tL0NQUzCBkgYIKwYBBQUH | ||||
| AQEEgYUwgYIwNAYIKwYBBQUHMAGGKGh0dHA6Ly9zdGF0dXNlLmRpZ2l0YWxjZXJ0 | ||||
| dmFsaWRhdGlvbi5jb20wSgYIKwYBBQUHMAKGPmh0dHA6Ly9jYWNlcnRzLmRpZ2l0 | ||||
| YWxjZXJ0dmFsaWRhdGlvbi5jb20vVHJ1c3RBc2lhVExTUlNBQ0EuY3J0MAkGA1Ud | ||||
| EwQCMAAwggEDBgorBgEEAdZ5AgQCBIH0BIHxAO8AdQBGpVXrdfqRIDC1oolp9PN9 | ||||
| ESxBdL79SbiFq/L8cP5tRwAAAXhNdRxuAAAEAwBGMEQCICntYjFg4csRL4bxiJvr | ||||
| ma95JmMzYRrLx84UgLbd1iWhAiB64xH69vjCf4JfVB+3G1UN6G4pphW4m/nYBA2E | ||||
| ElFuIgB2ACJFRQdZVSRWlj+hL/H3bYbgIyZjrcBLf13Gg1xu4g8CAAABeE11HF4A | ||||
| AAQDAEcwRQIhANsjDO2cASF5sGZCyjS8jz9qA+5N4WWFxG+tO4VyELjtAiAIqurr | ||||
| QbHF9fkBFDg995q5eR16ncpS1d75a0Nhis62PjANBgkqhkiG9w0BAQsFAAOCAQEA | ||||
| DADo2zekDxm3zbuHGAlQR17h4BtD3tRDy58J58L5CnL+VhNLAN2Fp4AQF1w4a4+z | ||||
| 89ZFOKn+RcwSwyYDFHqsKYa7QYL97z7GJ1ASPG79faO5osbo1SOrSdwzIjjUnSD5 | ||||
| V4Fr0Fw6NYkq72pJPZkPEeivGEG3MvhzTaFSTwkylDVx6wxzaPY/p9WJpbopKN/8 | ||||
| +2WSM0b6UB1cuOgfJlhcqYYFqAPO/2XLY60uPpKgboPFAznT8T2QSaYd7JXHndYJ | ||||
| IgTtXPr7hPOeXP9kDdUycCf3WOjp00gSk/guSujW4ZEaqCrJOkiMCbOrgyCIF7AK | ||||
| pzwp4H5aJpzHXqObsb5n3Q== | ||||
| -----END CERTIFICATE----- | ||||
| -----BEGIN CERTIFICATE----- | ||||
| MIIEqjCCA5KgAwIBAgIQAnmsRYvBskWr+YBTzSybsTANBgkqhkiG9w0BAQsFADBh | ||||
| MIIErjCCA5agAwIBAgIQBYAmfwbylVM0jhwYWl7uLjANBgkqhkiG9w0BAQsFADBh | ||||
| MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 | ||||
| d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD | ||||
| QTAeFw0xNzExMjcxMjQ2MTBaFw0yNzExMjcxMjQ2MTBaMG4xCzAJBgNVBAYTAlVT | ||||
| MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j | ||||
| b20xLTArBgNVBAMTJEVuY3J5cHRpb24gRXZlcnl3aGVyZSBEViBUTFMgQ0EgLSBH | ||||
| MTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALPeP6wkab41dyQh6mKc | ||||
| oHqt3jRIxW5MDvf9QyiOR7VfFwK656es0UFiIb74N9pRntzF1UgYzDGu3ppZVMdo | ||||
| lbxhm6dWS9OK/lFehKNT0OYI9aqk6F+U7cA6jxSC+iDBPXwdF4rs3KRyp3aQn6pj | ||||
| pp1yr7IB6Y4zv72Ee/PlZ/6rK6InC6WpK0nPVOYR7n9iDuPe1E4IxUMBH/T33+3h | ||||
| yuH3dvfgiWUOUkjdpMbyxX+XNle5uEIiyBsi4IvbcTCh8ruifCIi5mDXkZrnMT8n | ||||
| wfYCV6v6kDdXkbgGRLKsR4pucbJtbKqIkUGxuZI2t7pfewKRc5nWecvDBZf3+p1M | ||||
| pA8CAwEAAaOCAU8wggFLMB0GA1UdDgQWBBRVdE+yck/1YLpQ0dfmUVyaAYca1zAf | ||||
| BgNVHSMEGDAWgBQD3lA1VtFMu2bwo+IbG8OXsj3RVTAOBgNVHQ8BAf8EBAMCAYYw | ||||
| HQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBIGA1UdEwEB/wQIMAYBAf8C | ||||
| AQAwNAYIKwYBBQUHAQEEKDAmMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdp | ||||
| Y2VydC5jb20wQgYDVR0fBDswOTA3oDWgM4YxaHR0cDovL2NybDMuZGlnaWNlcnQu | ||||
| Y29tL0RpZ2lDZXJ0R2xvYmFsUm9vdENBLmNybDBMBgNVHSAERTBDMDcGCWCGSAGG | ||||
| /WwBAjAqMCgGCCsGAQUFBwIBFhxodHRwczovL3d3dy5kaWdpY2VydC5jb20vQ1BT | ||||
| MAgGBmeBDAECATANBgkqhkiG9w0BAQsFAAOCAQEAK3Gp6/aGq7aBZsxf/oQ+TD/B | ||||
| SwW3AU4ETK+GQf2kFzYZkby5SFrHdPomunx2HBzViUchGoofGgg7gHW0W3MlQAXW | ||||
| M0r5LUvStcr82QDWYNPaUy4taCQmyaJ+VB+6wxHstSigOlSNF2a6vg4rgexixeiV | ||||
| 4YSB03Yqp2t3TeZHM9ESfkus74nQyW7pRGezj+TC44xCagCQQOzzNmzEAP2SnCrJ | ||||
| sNE2DpRVMnL8J6xBRdjmOsC3N6cQuKuRXbzByVBjCqAA8t1L0I+9wXJerLPyErjy | ||||
| rMKWaBFLmfK/AHNF4ZihwPGOc7w6UHczBZXH5RFzJNnww+WnKuTPI0HfnVH8lg== | ||||
| QTAeFw0xNzEyMDgxMjI4MjZaFw0yNzEyMDgxMjI4MjZaMHIxCzAJBgNVBAYTAkNO | ||||
| MSUwIwYDVQQKExxUcnVzdEFzaWEgVGVjaG5vbG9naWVzLCBJbmMuMR0wGwYDVQQL | ||||
| ExREb21haW4gVmFsaWRhdGVkIFNTTDEdMBsGA1UEAxMUVHJ1c3RBc2lhIFRMUyBS | ||||
| U0EgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCgWa9X+ph+wAm8 | ||||
| Yh1Fk1MjKbQ5QwBOOKVaZR/OfCh+F6f93u7vZHGcUU/lvVGgUQnbzJhR1UV2epJa | ||||
| e+m7cxnXIKdD0/VS9btAgwJszGFvwoqXeaCqFoP71wPmXjjUwLT70+qvX4hdyYfO | ||||
| JcjeTz5QKtg8zQwxaK9x4JT9CoOmoVdVhEBAiD3DwR5fFgOHDwwGxdJWVBvktnoA | ||||
| zjdTLXDdbSVC5jZ0u8oq9BiTDv7jAlsB5F8aZgvSZDOQeFrwaOTbKWSEInEhnchK | ||||
| ZTD1dz6aBlk1xGEI5PZWAnVAba/ofH33ktymaTDsE6xRDnW97pDkimCRak6CEbfe | ||||
| 3dXw6OV5AgMBAAGjggFPMIIBSzAdBgNVHQ4EFgQUf9OZ86BHDjEAVlYijrfMnt3K | ||||
| AYowHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUwDgYDVR0PAQH/BAQD | ||||
| AgGGMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjASBgNVHRMBAf8ECDAG | ||||
| AQH/AgEAMDQGCCsGAQUFBwEBBCgwJjAkBggrBgEFBQcwAYYYaHR0cDovL29jc3Au | ||||
| ZGlnaWNlcnQuY29tMEIGA1UdHwQ7MDkwN6A1oDOGMWh0dHA6Ly9jcmwzLmRpZ2lj | ||||
| ZXJ0LmNvbS9EaWdpQ2VydEdsb2JhbFJvb3RDQS5jcmwwTAYDVR0gBEUwQzA3Bglg | ||||
| hkgBhv1sAQIwKjAoBggrBgEFBQcCARYcaHR0cHM6Ly93d3cuZGlnaWNlcnQuY29t | ||||
| L0NQUzAIBgZngQwBAgEwDQYJKoZIhvcNAQELBQADggEBAK3dVOj5dlv4MzK2i233 | ||||
| lDYvyJ3slFY2X2HKTYGte8nbK6i5/fsDImMYihAkp6VaNY/en8WZ5qcrQPVLuJrJ | ||||
| DSXT04NnMeZOQDUoj/NHAmdfCBB/h1bZ5OGK6Sf1h5Yx/5wR4f3TUoPgGlnU7EuP | ||||
| ISLNdMRiDrXntcImDAiRvkh5GJuH4YCVE6XEntqaNIgGkRwxKSgnU3Id3iuFbW9F | ||||
| UQ9Qqtb1GX91AJ7i4153TikGgYCdwYkBURD8gSVe8OAco6IfZOYt/TEwii1Ivi1C | ||||
| qnuUlWpsF1LdQNIdfbW3TSe0BhQa7ifbVIfvPWHYOu3rkg1ZeMo6XRU9B4n5VyJY | ||||
| RmE= | ||||
| -----END CERTIFICATE----- | ||||
|  |  | |||
|  | @ -1,27 +1,27 @@ | |||
| -----BEGIN RSA PRIVATE KEY----- | ||||
| MIIEpQIBAAKCAQEAyKBzvBQKu28rfoAwz9v0Izpv/GEhTrPgAtIsoTC8ejQ0YfXC | ||||
| CROFP1VaVK21yrKYDtpVTfXN2dvBIYpoE4/MC5eLgVwB4JmEuimUmNansDes2oIo | ||||
| 6NLoSOqkrnPkK+IWZE61R4YXSDOxu8+/pzA6Ly3H2YXsk/tHpjIaqzuTq6Kv/mJt | ||||
| I26gWO7S6ezg8XYhuzjTZCIEf7dHCtT+Y9eofey1Ex7yUkG13fSaRkTlkAK8Ae27 | ||||
| YclvgYznPMv8+Y8ohNMK683A6HO9O09vOeVc3mJ6Cf9bf8zXU6Sf1bTOo5OTY6pa | ||||
| h2ROyDzVD3UUN8rH7VQIKB4f0flLVLNS4XlDGwIDAQABAoIBAATB2TyydPaw0iUz | ||||
| wPSM0KMtNY6Udwe4uC0Y8rn3v+Bd8IgKHcm9TsGLspKjc9YUmgpwHum0VGdAELpM | ||||
| 397m3/2+YC53EgxTV5RafA2LuXoyN8UOpQ2wQpXICpOgZ96qg8FpJF9HzLGHmEVN | ||||
| zcuXFyobOcvsowl3QeGs+njo9r1xGVCZVo/c+XT95vU+o4bIeao5MyseVg7LLgXC | ||||
| EsTJIVLaRK3WDCaZAegXoiVJQlgLR6qWrY+97E2yxCIAVZejdiPiejwT3i5XEsxT | ||||
| w11FdaZXrCKYktid1b74tDwpHTSekevKWrzrT2QkgGv3VJfGHcvDeeQpyYGE13nd | ||||
| IsyTynECgYEA+8JfXOL3hXRBOSZJYysLkIYXhiPw/P8Ao69pgRDEKaA2YSoojHnE | ||||
| Rzo+v4cHw0x47WzLkjs/xf1ON3jBEEZ/2KG+FDpRXieC19xfvlEe1tf9RaFfdU0E | ||||
| R2n059d8R3CC7M+nMEwfkYZ9OtV1SSeQlf6GyhBT3XmLlnRMKWbwRh8CgYEAzAGW | ||||
| edCFYmTyzFBjxq8GARzvptCU/sAZBBFF18mz7jsFJhidxZ2nMS0tFZIy+yvg1dpE | ||||
| ElkILAzMt4v0lmHWBTRcHCllnAwu+o5JsBR1pqzj+Q84iWurgkWI+MG0g56CjyBS | ||||
| exJn8RL7JNt7QNUiiz1WB8oWa/knXXM/L8kui4UCgYEAsGWlabDBm2k0VfWkj+5W | ||||
| IQJDM0K1lJ6bdRTvyHXV7BCMaZIfbSXYR8vgsVPMNaO8Sybij+ghq/jqt+VM6Lls | ||||
| 1H2ncAbYgi8O9246S2ANSp11oTcLamX3LI5qAZOzSV7k7UYlr6p2qAFidzme/w3Q | ||||
| ubfn+2ZrTI/gJSABSTUN/yMCgYEAq7UWa1dIPWYMOk3bfSppmlw5liVvkvAq3hKP | ||||
| v62kxXplvgfwG5mzVJ/al5JjWKc46aZ5rxvC1hi74i1pY33bfqvwbz+kp3BVxkwm | ||||
| 146Q7AYPJ91Yz8mRJOfT/tRDVJkA+OjSo4X9eJpqSj52Aj6igaHRnGLK9nxSVsSe | ||||
| xWDGzWUCgYEAsk02rZvSc0XiddlQQ5vGNVezikbqtmrwQf32EUuxI8jklY6Ry7/M | ||||
| BQA46J4psF0xtH93MV5Dsz5HqyJM6OPeQ4ONlCYrhZ1yHHti+YFivKtUdeZCPkn7 | ||||
| ygz3P8kQhLlNtFomXqFK787jlC1rZuTC5IXA4SL5zq4ThWh7vnb65Sw= | ||||
| -----END RSA PRIVATE KEY----- | ||||
| MIIEowIBAAKCAQEAyijP5M9nLFbIimHuhYl4cK7Ce4SewgiERRThx+4/iLzFKMVH | ||||
| pSQ0GgcSN7e6tLlfgMzRcUbAnUsia4bzcp0UG+w0Ny6OrFF7XuU71YQ3B+35NpfA | ||||
| vJGr7pw71aFpl1l+jz9iym4iw6yN5F8poq6TR7GlPNhX1YWZ+Wy0MCDnvQ00MBsQ | ||||
| /42CGEPzE6ZdKJ3l19NY/9/djnxZE+OgMVR3cdCII/Et0mahIWYaPGP14/nIzNfO | ||||
| cEZtJMHmgSGF/l9NyUdsrRRK7ltV87YWeU86e2DahqW9v0oSOLepOzg4PB4wU2IJ | ||||
| fykRMXfJNUG6iWjOMVPdqIFTXjJZvtvZg5J4GQIDAQABAoIBAFYjOqXXe7IoTi2s | ||||
| mbnbf+6fgC2qLg0mHNnkkmmiif7E1EtRd/wVJ4AZmDkWd57ux5M1cl6OU58R9xoS | ||||
| 9+NTq9BT/lGu7ErfMy6VhT+upNYjn4cT9SND/Jrghhw6OSgskWEPFJSFhhmTCiiP | ||||
| Jcn0EbxAJNR+qDpKQXfGSiahtqxV01kNRU/j6YmVrQEoVif/9+LJmcs5Uy+gqA4a | ||||
| fQou8/QQjrmPHPOSSWZ8aZlPNt89+E4P+XIkf4rPxD8lrWd2ufDeCdm1As4qYQQD | ||||
| c/eeBh6qkrKijZZ8NRgonTaCYPXkkkHME4BgdP2gVCW/KMVfdM5pVVk7dctSs+6w | ||||
| VFfF5CsCgYEA/pXLQXt6PUlJAVSFodK8CndZY1pAbzLNVTsDAVuEAepwmEL7Tw0O | ||||
| nV4igsANdRxZxEdYWsY8CClNTNLNY92zaAbpsQXHxHqnXnl2ZGQi1Jb2eFR6zw+m | ||||
| 8Qyb6aca58Q95flHQY75/+IFWemj76p1aT7aIvpElMdkBUh1Ak92cv8CgYEAy0hu | ||||
| MqJga0/3UoMLhjhUVWGXI6NBpvWNv7FqSeQ2SDj0iBib7nyrlP41bCcyHFXryrXf | ||||
| YsbG4fq0mmyhQUz4++OP57lxXXBu3UvBd6qQUorWX9HVHy6ljun8PsJdNUGj9Q2v | ||||
| arH6Rv/emIx86IAOGjgIgK+YiNwiw/uEYgNzTOcCgYBryjh4zTMAZ9sFOSgrT/JV | ||||
| 7Bpounm1myjdAVNQa9MEjKKHlTSaT8j0UDsEaRRJlWtcc2ixZmVcf0A/WrGjquaf | ||||
| EO45CV1/jv72PS8nak5k/FX2tK4apWHlhZUt5Ja7spcSm+zTkRnAgY4Kd6X1f5Ke | ||||
| sQHi9Vu8Mn/izL7d748TOQKBgH75txuZoXBmeq3nfQNRnBvY4Xc5OoD3UJs0Tpfp | ||||
| HJ7wNI3uETheVy6xutzbfsmEQcxU3jvsvb3Zw4XR5MfNNJjiA7lSdCVRXW6NK0N8 | ||||
| HrnwTwd7IgxgLrmeHhl1fpMNdURUUAXtNc+zc28GEd+IXUazSVxYUobqOi0Apigy | ||||
| z4pxAoGBAPKd+WMUS94Ne7WMHDzcCcQKl2dJmBVj036qCtPgUL4yDyRDc/H1fQxI | ||||
| jr/+JueqktrJgJsOL4uygn0zzKIJyQIToufxOodUdmviRLaH2UskNUBUjIBqyDc0 | ||||
| pjPebC7sxg6HZQmVpgX4klj1IWDpudD+cCRGF9SIzKRvNEadLgOl | ||||
| -----END RSA PRIVATE KEY----- | ||||
|  | @ -1,59 +1,61 @@ | |||
| -----BEGIN CERTIFICATE----- | ||||
| MIIFmTCCBIGgAwIBAgIQCzI6tyKHzyI4bN6BJiBWZzANBgkqhkiG9w0BAQsFADBu | ||||
| MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 | ||||
| d3cuZGlnaWNlcnQuY29tMS0wKwYDVQQDEyRFbmNyeXB0aW9uIEV2ZXJ5d2hlcmUg | ||||
| RFYgVExTIENBIC0gRzEwHhcNMjEwMzA2MDAwMDAwWhcNMjIwMzA2MjM1OTU5WjAq | ||||
| MSgwJgYDVQQDEx9kYWlseS5kZW1lLmRqYW5nby12dWUtYWRtaW4uY29tMIIBIjAN | ||||
| BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwd2udVfp+a/7oaVwqOxQeu6hqcLY | ||||
| 78tdYoz20XJZN9/LmTFxRoOm/FT773gJ90Ot/TfiAVuxfhfNXSS6fVGdRi0DIMW8 | ||||
| OReUwmLtDCD87xz2LNjMz73/am1FYchUEIXc1R9mME2DOHozGuK1qhF9T2YM9jkU | ||||
| JL92OQ4eJ2EzbPLrXYoWFJIr050OT21xtgoTNlzi/+JqE8xuEDihjtsziT7KzgZl | ||||
| 5cSsJ7WAEio68oEXHhxPF4Xp/ziRDnmNA1Qd5+BZU/jUsQmDsMWAOpkV8EYG8GYI | ||||
| AVSr2TegtSgrS7eXxFh0JsfpSbY2x1Og15IwU3WIo18kEnUz5jNpfL7miQIDAQAB | ||||
| o4ICdTCCAnEwHwYDVR0jBBgwFoAUVXRPsnJP9WC6UNHX5lFcmgGHGtcwHQYDVR0O | ||||
| BBYEFNIBagOABbLoxHlUOLebkahQPO5tMCoGA1UdEQQjMCGCH2RhaWx5LmRlbWUu | ||||
| ZGphbmdvLXZ1ZS1hZG1pbi5jb20wDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQG | ||||
| CCsGAQUFBwMBBggrBgEFBQcDAjA+BgNVHSAENzA1MDMGBmeBDAECATApMCcGCCsG | ||||
| AQUFBwIBFhtodHRwOi8vd3d3LmRpZ2ljZXJ0LmNvbS9DUFMwgYAGCCsGAQUFBwEB | ||||
| BHQwcjAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEoGCCsG | ||||
| AQUFBzAChj5odHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20vRW5jcnlwdGlvbkV2 | ||||
| ZXJ5d2hlcmVEVlRMU0NBLUcxLmNydDAJBgNVHRMEAjAAMIIBBAYKKwYBBAHWeQIE | ||||
| AgSB9QSB8gDwAHUARqVV63X6kSAwtaKJafTzfREsQXS+/Um4havy/HD+bUcAAAF4 | ||||
| CIG3RgAABAMARjBEAiB5Ba4CnxlhBvIQo3CPXbMhIxpT+Z4ujAD87mL4yD+rSgIg | ||||
| WYu1d9u1lEIzth9PXL1U1O2H6gMK1pO+tLhUmkBIt6kAdwAiRUUHWVUkVpY/oS/x | ||||
| 922G4CMmY63AS39dxoNcbuIPAgAAAXgIgbdSAAAEAwBIMEYCIQD2rqMSWMVQSyep | ||||
| vkZ39MuKoNfZ3nfKYAJ1XB8awJLj6QIhAJEIOcdX9QhVH8pB8jr/HrInLzTt/BOT | ||||
| ArfsR+J/aqyVMA0GCSqGSIb3DQEBCwUAA4IBAQAcH2NGwZ4yAiOvXXP5W5+/9CHw | ||||
| EA9uyDx8LY0UoPzxUEuk6zHtZ+0nj9JvitH6UUhfP5qV+gzzSEIPnZePCf9VI6Y4 | ||||
| F6yCYU5baV/vv2w+ccZSADY7YMm/NadECWX4hhvhZRLRyShSuN2GceWj1hTWrT7S | ||||
| o9ZQ35KH5JcTL47VgoXgNNwIEqaJfAsTuFlAAn96DXzfS4KicNhBoAUTPW/VZn18 | ||||
| hG+G23tAWSwBkN2PTkLOnHMV+qmEKRIjH+eTxe5+XWY5KrmYH2am3eK92DiMAaI4 | ||||
| qaOAEhIN1RmIITZxgFfChaTadwR7jY27hG5HkvwRuV+fhsYnfYMiJUnoN34j | ||||
| MIIFsDCCBJigAwIBAgIQBbQIKLDxaNeKW6HjUJCFNjANBgkqhkiG9w0BAQsFADBy | ||||
| MQswCQYDVQQGEwJDTjElMCMGA1UEChMcVHJ1c3RBc2lhIFRlY2hub2xvZ2llcywg | ||||
| SW5jLjEdMBsGA1UECxMURG9tYWluIFZhbGlkYXRlZCBTU0wxHTAbBgNVBAMTFFRy | ||||
| dXN0QXNpYSBUTFMgUlNBIENBMB4XDTIxMDMyMDAwMDAwMFoXDTIyMDMxOTIzNTk1 | ||||
| OVowKjEoMCYGA1UEAxMfZGFpbHkuZGVtby5kamFuZ28tdnVlLWFkbWluLmNvbTCC | ||||
| ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKAOwxsoKm4vH/gv8h7OHYHI | ||||
| 5dQAAKm3tk1ZsyY9cMlSq/GIMSY15BZSwdSiwyI3vcCpmz2YCVRXpH8r0LNm/Ygu | ||||
| fjVeK1H+F6fQkGj7065ye1Z15PtgI6Dx9dhLlFlR3lZYm0MVwSIW2xgVqbL+WNKl | ||||
| 198afnP+/B/Klzjyud4wqAlzDcD8lIh8iL0LMY3HSHzSzr8xtYZLxUvEzcl+vRF9 | ||||
| a9GjTOgg01Ukk04zHXan7VInK1/lurQ+WuntfPFDe/jmlEid4/wvB/lCMi0KUSWd | ||||
| 0C9CCB+2q/Lsa0hr8v4DF1TS1/YGg/y0Ye1+DzpKLKv/mfe6py18Ca7FcnFoKVsC | ||||
| AwEAAaOCAogwggKEMB8GA1UdIwQYMBaAFH/TmfOgRw4xAFZWIo63zJ7dygGKMB0G | ||||
| A1UdDgQWBBQ14z4HfGEjC4tAPVnN/AvsXmgHYDAqBgNVHREEIzAhgh9kYWlseS5k | ||||
| ZW1vLmRqYW5nby12dWUtYWRtaW4uY29tMA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUE | ||||
| FjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwPgYDVR0gBDcwNTAzBgZngQwBAgEwKTAn | ||||
| BggrBgEFBQcCARYbaHR0cDovL3d3dy5kaWdpY2VydC5jb20vQ1BTMIGSBggrBgEF | ||||
| BQcBAQSBhTCBgjA0BggrBgEFBQcwAYYoaHR0cDovL3N0YXR1c2UuZGlnaXRhbGNl | ||||
| cnR2YWxpZGF0aW9uLmNvbTBKBggrBgEFBQcwAoY+aHR0cDovL2NhY2VydHMuZGln | ||||
| aXRhbGNlcnR2YWxpZGF0aW9uLmNvbS9UcnVzdEFzaWFUTFNSU0FDQS5jcnQwCQYD | ||||
| VR0TBAIwADCCAQUGCisGAQQB1nkCBAIEgfYEgfMA8QB3AEalVet1+pEgMLWiiWn0 | ||||
| 830RLEF0vv1JuIWr8vxw/m1HAAABeE1yhJEAAAQDAEgwRgIhAIdZiX5qq+KJjdtl | ||||
| 2Z9ejh5o9VHKyVVUgkJb0+S8aQGlAiEA5nEVffySiTcUogz+b7n34hmG2aW3YO02 | ||||
| UhMzyv7hoGcAdgAiRUUHWVUkVpY/oS/x922G4CMmY63AS39dxoNcbuIPAgAAAXhN | ||||
| coRmAAAEAwBHMEUCIDFWIi3mkGmkB/uuTCqJyPTz8/WS4vqvdAUWO+MuxuaoAiEA | ||||
| yP80fJCLnfso7VoJcWQT1l6bN6XL/jxip1OjXU0+dQMwDQYJKoZIhvcNAQELBQAD | ||||
| ggEBAB0vH0OMrwGOQHdRdaN9t+2Yc1xnBNcksHcCmVD09gO2clA06OqTiu77g8lw | ||||
| KwO2M5DmNFAA2onDxRVIL6auyLNdyK4X2m9i1eGnyAKro7d4owIlG30JdJ7uHzLG | ||||
| ROL9SR0ibNZwOhoKSfpy3a+fWngMjCdW8pAFJHfPbOf6lP/CpGwoBnLvm9a9ZG3K | ||||
| m2NmFN1/GPje25tXy0S/NaVFDVcJyfMeuVKqdwY9sbN7nOYGUury5NC5LWbgJ0T2 | ||||
| KWLcZc3LCa791kHLWVt/KI+9UgpM6Xiie0jUUIU92NaxBD/wY/jybPiogJkAz/sl | ||||
| TncbnwO2+WpN6jIy9ccs8ogUMTQ= | ||||
| -----END CERTIFICATE----- | ||||
| -----BEGIN CERTIFICATE----- | ||||
| MIIEqjCCA5KgAwIBAgIQAnmsRYvBskWr+YBTzSybsTANBgkqhkiG9w0BAQsFADBh | ||||
| MIIErjCCA5agAwIBAgIQBYAmfwbylVM0jhwYWl7uLjANBgkqhkiG9w0BAQsFADBh | ||||
| MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 | ||||
| d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD | ||||
| QTAeFw0xNzExMjcxMjQ2MTBaFw0yNzExMjcxMjQ2MTBaMG4xCzAJBgNVBAYTAlVT | ||||
| MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j | ||||
| b20xLTArBgNVBAMTJEVuY3J5cHRpb24gRXZlcnl3aGVyZSBEViBUTFMgQ0EgLSBH | ||||
| MTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALPeP6wkab41dyQh6mKc | ||||
| oHqt3jRIxW5MDvf9QyiOR7VfFwK656es0UFiIb74N9pRntzF1UgYzDGu3ppZVMdo | ||||
| lbxhm6dWS9OK/lFehKNT0OYI9aqk6F+U7cA6jxSC+iDBPXwdF4rs3KRyp3aQn6pj | ||||
| pp1yr7IB6Y4zv72Ee/PlZ/6rK6InC6WpK0nPVOYR7n9iDuPe1E4IxUMBH/T33+3h | ||||
| yuH3dvfgiWUOUkjdpMbyxX+XNle5uEIiyBsi4IvbcTCh8ruifCIi5mDXkZrnMT8n | ||||
| wfYCV6v6kDdXkbgGRLKsR4pucbJtbKqIkUGxuZI2t7pfewKRc5nWecvDBZf3+p1M | ||||
| pA8CAwEAAaOCAU8wggFLMB0GA1UdDgQWBBRVdE+yck/1YLpQ0dfmUVyaAYca1zAf | ||||
| BgNVHSMEGDAWgBQD3lA1VtFMu2bwo+IbG8OXsj3RVTAOBgNVHQ8BAf8EBAMCAYYw | ||||
| HQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBIGA1UdEwEB/wQIMAYBAf8C | ||||
| AQAwNAYIKwYBBQUHAQEEKDAmMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdp | ||||
| Y2VydC5jb20wQgYDVR0fBDswOTA3oDWgM4YxaHR0cDovL2NybDMuZGlnaWNlcnQu | ||||
| Y29tL0RpZ2lDZXJ0R2xvYmFsUm9vdENBLmNybDBMBgNVHSAERTBDMDcGCWCGSAGG | ||||
| /WwBAjAqMCgGCCsGAQUFBwIBFhxodHRwczovL3d3dy5kaWdpY2VydC5jb20vQ1BT | ||||
| MAgGBmeBDAECATANBgkqhkiG9w0BAQsFAAOCAQEAK3Gp6/aGq7aBZsxf/oQ+TD/B | ||||
| SwW3AU4ETK+GQf2kFzYZkby5SFrHdPomunx2HBzViUchGoofGgg7gHW0W3MlQAXW | ||||
| M0r5LUvStcr82QDWYNPaUy4taCQmyaJ+VB+6wxHstSigOlSNF2a6vg4rgexixeiV | ||||
| 4YSB03Yqp2t3TeZHM9ESfkus74nQyW7pRGezj+TC44xCagCQQOzzNmzEAP2SnCrJ | ||||
| sNE2DpRVMnL8J6xBRdjmOsC3N6cQuKuRXbzByVBjCqAA8t1L0I+9wXJerLPyErjy | ||||
| rMKWaBFLmfK/AHNF4ZihwPGOc7w6UHczBZXH5RFzJNnww+WnKuTPI0HfnVH8lg== | ||||
| QTAeFw0xNzEyMDgxMjI4MjZaFw0yNzEyMDgxMjI4MjZaMHIxCzAJBgNVBAYTAkNO | ||||
| MSUwIwYDVQQKExxUcnVzdEFzaWEgVGVjaG5vbG9naWVzLCBJbmMuMR0wGwYDVQQL | ||||
| ExREb21haW4gVmFsaWRhdGVkIFNTTDEdMBsGA1UEAxMUVHJ1c3RBc2lhIFRMUyBS | ||||
| U0EgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCgWa9X+ph+wAm8 | ||||
| Yh1Fk1MjKbQ5QwBOOKVaZR/OfCh+F6f93u7vZHGcUU/lvVGgUQnbzJhR1UV2epJa | ||||
| e+m7cxnXIKdD0/VS9btAgwJszGFvwoqXeaCqFoP71wPmXjjUwLT70+qvX4hdyYfO | ||||
| JcjeTz5QKtg8zQwxaK9x4JT9CoOmoVdVhEBAiD3DwR5fFgOHDwwGxdJWVBvktnoA | ||||
| zjdTLXDdbSVC5jZ0u8oq9BiTDv7jAlsB5F8aZgvSZDOQeFrwaOTbKWSEInEhnchK | ||||
| ZTD1dz6aBlk1xGEI5PZWAnVAba/ofH33ktymaTDsE6xRDnW97pDkimCRak6CEbfe | ||||
| 3dXw6OV5AgMBAAGjggFPMIIBSzAdBgNVHQ4EFgQUf9OZ86BHDjEAVlYijrfMnt3K | ||||
| AYowHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUwDgYDVR0PAQH/BAQD | ||||
| AgGGMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjASBgNVHRMBAf8ECDAG | ||||
| AQH/AgEAMDQGCCsGAQUFBwEBBCgwJjAkBggrBgEFBQcwAYYYaHR0cDovL29jc3Au | ||||
| ZGlnaWNlcnQuY29tMEIGA1UdHwQ7MDkwN6A1oDOGMWh0dHA6Ly9jcmwzLmRpZ2lj | ||||
| ZXJ0LmNvbS9EaWdpQ2VydEdsb2JhbFJvb3RDQS5jcmwwTAYDVR0gBEUwQzA3Bglg | ||||
| hkgBhv1sAQIwKjAoBggrBgEFBQcCARYcaHR0cHM6Ly93d3cuZGlnaWNlcnQuY29t | ||||
| L0NQUzAIBgZngQwBAgEwDQYJKoZIhvcNAQELBQADggEBAK3dVOj5dlv4MzK2i233 | ||||
| lDYvyJ3slFY2X2HKTYGte8nbK6i5/fsDImMYihAkp6VaNY/en8WZ5qcrQPVLuJrJ | ||||
| DSXT04NnMeZOQDUoj/NHAmdfCBB/h1bZ5OGK6Sf1h5Yx/5wR4f3TUoPgGlnU7EuP | ||||
| ISLNdMRiDrXntcImDAiRvkh5GJuH4YCVE6XEntqaNIgGkRwxKSgnU3Id3iuFbW9F | ||||
| UQ9Qqtb1GX91AJ7i4153TikGgYCdwYkBURD8gSVe8OAco6IfZOYt/TEwii1Ivi1C | ||||
| qnuUlWpsF1LdQNIdfbW3TSe0BhQa7ifbVIfvPWHYOu3rkg1ZeMo6XRU9B4n5VyJY | ||||
| RmE= | ||||
| -----END CERTIFICATE----- | ||||
|  |  | |||
|  | @ -1,27 +1,27 @@ | |||
| -----BEGIN RSA PRIVATE KEY----- | ||||
| MIIEpAIBAAKCAQEAwd2udVfp+a/7oaVwqOxQeu6hqcLY78tdYoz20XJZN9/LmTFx | ||||
| RoOm/FT773gJ90Ot/TfiAVuxfhfNXSS6fVGdRi0DIMW8OReUwmLtDCD87xz2LNjM | ||||
| z73/am1FYchUEIXc1R9mME2DOHozGuK1qhF9T2YM9jkUJL92OQ4eJ2EzbPLrXYoW | ||||
| FJIr050OT21xtgoTNlzi/+JqE8xuEDihjtsziT7KzgZl5cSsJ7WAEio68oEXHhxP | ||||
| F4Xp/ziRDnmNA1Qd5+BZU/jUsQmDsMWAOpkV8EYG8GYIAVSr2TegtSgrS7eXxFh0 | ||||
| JsfpSbY2x1Og15IwU3WIo18kEnUz5jNpfL7miQIDAQABAoIBABHmSOxWsKi4IfCb | ||||
| 2NoP76JaFB0be3Iwga/Ouh8+gpRRGnhLg1zyXOGhax2CJNFqs07U8Q4VDD9LLU/z | ||||
| SzC072OCVm6ZMzbGQZrtDVv4U8I0F1qurcJklYebDTPpDjH0Wh5nZsUA8yOszLkn | ||||
| w4QvVzWUg4/cV0rJTr4X2priM6BUaAKGWe8BH1DX69K7jgSyvEZhSLN/aSxLJpwy | ||||
| hfL8OSBeVAwciyr0MqoqSoVgcYdcxtGt5dePezpQi6glXf2bMhxYv3692EsbOgh4 | ||||
| eR24CO0xZJkp6AZN7BY4OaKwf3TmnJtIKg+ZhRwHTAMwHg9LDidsc/P1zMyvecPD | ||||
| RcRBYo0CgYEA/UqadAgNEmcoe8on9S0UtmPp1hXnh+z8EmvFHmZfSt/FxW1DHM0y | ||||
| c0hxsst/zIG8Q8B5W1HsLYbbBCvfG3RJDICbjBSRm+Aimz2HhIEtQl75YmXZ4srq | ||||
| jaiRsvXsbBjwr5Syol4XvZQH7TAYuZKKZbNTKayFVo6ADJMwgxBBe5MCgYEAw/Bl | ||||
| 8kpUAnPOiAAzIr+sANd11trUUDRsTk0KCN6GJHWK8Q1O7ec5xjRjdffkOhKUloJJ | ||||
| UuarxJoNKwrAbfa63aOP8h5jqqqXk41+Trj94qlbzCjL+o7hfezGQeY8HxdxmDAf | ||||
| cBCLFGroND9aU7pCKATtIft5A7C09Gs1mpZTPvMCgYEAyFbFq5jinfex8ZeH20h4 | ||||
| 5XpJbeeNZdlv1zIei1j1bkdoKiuttY4npT9bjsuenabPvdbzJeO6JphPixEYOqLT | ||||
| VGw0m6t5MA0r0hXspkV2AtUT81wT5moQ81KtSxtwkF95n6bBU+OQa4Y2bshoBf9+ | ||||
| L8qSsJegL0IuzcNtz3yADrkCgYEAo0qAG4j4NEcA0vSfqRDlrpnhWdpq4CCgNi0b | ||||
| 9MJGNrJCxZsasUdnLZhRX2nkqMT9UeVoaA9XDPR5jupZ7gqWNsnt15Cd7QhYZB6i | ||||
| KccfxrrvhthlDf3vTDt8CkVuy1aFU5ifSoxu6+ggdhJqG6b5JVLdsNlbQ8kLNTr3 | ||||
| pEotPCMCgYBmM0K9U1j4zO0L+/cpdDT8sYPpFUMdcEXCvLb/J9+v3kndbWhQbTyG | ||||
| UYulGyvmkTGpmYnwG5TEZbHroEI3qNG593Ae6AiUciKaTenH9f9HkWhIldJEua5g | ||||
| lKAA+18wOv5LbDFV4hUIaX4iDKBaKPiQu/Vi0HFy2SikiS+RUV10kQ== | ||||
| -----END RSA PRIVATE KEY----- | ||||
| MIIEpAIBAAKCAQEAoA7DGygqbi8f+C/yHs4dgcjl1AAAqbe2TVmzJj1wyVKr8Ygx | ||||
| JjXkFlLB1KLDIje9wKmbPZgJVFekfyvQs2b9iC5+NV4rUf4Xp9CQaPvTrnJ7VnXk | ||||
| +2AjoPH12EuUWVHeVlibQxXBIhbbGBWpsv5Y0qXX3xp+c/78H8qXOPK53jCoCXMN | ||||
| wPyUiHyIvQsxjcdIfNLOvzG1hkvFS8TNyX69EX1r0aNM6CDTVSSTTjMddqftUicr | ||||
| X+W6tD5a6e188UN7+OaUSJ3j/C8H+UIyLQpRJZ3QL0IIH7ar8uxrSGvy/gMXVNLX | ||||
| 9gaD/LRh7X4POkosq/+Z97qnLXwJrsVycWgpWwIDAQABAoIBABaP2NHdrhQnwWu/ | ||||
| T8km3dhFz5vm6jECVrN9nE1yJhFtqBOH0qx5C+9Xor9iDXv9JoWKLaTCPI0ZPkoM | ||||
| 4kI/wietrMMXb1IuAqX4YOWORgRrr9YmupdIBzhbPdVLsMbhzaPB9r+UnqEQXrmn | ||||
| ksB1WQ5MgWsPdYQit+XqrWQXgbrU9kAP5+aO2GKrlnWZqBgshUkd2Sq5rdgrK5nv | ||||
| kcmVBGClPsgOG2HgA+aJoFGLccoF8NMrBWaSc+zlHjiT8fP2YnMcDsX8Fw1tETbK | ||||
| P9jf9wd4b/2ezKL3TWJMkbTRnxBwDgARWFVrD9jZqLtw342YuGQnEhPJFFdepKpQ | ||||
| 3GtbyiECgYEA0KlSF3K+coEjCjBGSFD5ACmB5ipl/NFPXVjCG1vHGHRh/0WnXBPI | ||||
| zY3pRHFr9cJKLxQPe+4085yFXGTV7GHhH4nd1tEVxrH8ouNok0/WL4HHtvfGOq/H | ||||
| sKQsZKVaUXd+NTZmzoXXJsb9Jgnu6r4AS4QazP1FRxSbSToxbut1ezsCgYEAxF6f | ||||
| mAFz9p5ptNStJLXV53nTgNHK0Hk2cISu5aAUGQKA26VwnZTEo09Wt+WOGjzjTkSi | ||||
| +TCoFfG77aqFQ1AyuAYWWErcS4/1/p0SeINXdztx34CJM/OqJ/AtjdL+09xwUZe6 | ||||
| JeUWWPMJukkrFkjNkCjkdQlVxG+a3jMlmM016GECgYEAoJJ8QuEhH7qyvUdy/nmZ | ||||
| dH98oCPmggyM15fTH/yblP0S4L+4T8pFz7EyXmIuI1xVfC8iz0r7YrEDi5tpaFPW | ||||
| S0/r8EDMUjBr6um3cw2QFNT5XJsF5+mXcR6Vrwn0HBcpf0eTC8DBVezxqFEik3CN | ||||
| h49slG0e39lCurJWkjYOHTsCgYBeA/Oi4ic0DvoLErvm1IwZ7BDgHxFcKHxw+IWH | ||||
| +NFGfBVXk+jL+Vr/2U9qciRL2ZT2dxQT/ECtaPQRwM9WwAHYa0mtcgHwx3b+NROP | ||||
| 0UpCEprdZ/vIfMOdpXcZ7MgGhQbdeags1naRlaK1pqxTWf3ZJErk4dhHWSurcI9y | ||||
| jeVeYQKBgQCsIaGmX/xigoLaEucXOM4V34QU1gepJkDLDNEw4r9EoNHoBCwIaGxX | ||||
| CWCsyuOwnCWM2OJJth5a+1xPYul0jsh7HCShICpkMsktoq4UdYbBfVNQiqenI7L7 | ||||
| l6/mzU5Ds6KXKVh2FZ7O8zcup1BYs0pAHTZqF+P/1FjSu1jbGfezFg== | ||||
| -----END RSA PRIVATE KEY----- | ||||
|  | @ -1,59 +1,61 @@ | |||
| -----BEGIN CERTIFICATE----- | ||||
| MIIFizCCBHOgAwIBAgIQAn/QNFyusvPyPREjg5iJWzANBgkqhkiG9w0BAQsFADBu | ||||
| MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 | ||||
| d3cuZGlnaWNlcnQuY29tMS0wKwYDVQQDEyRFbmNyeXB0aW9uIEV2ZXJ5d2hlcmUg | ||||
| RFYgVExTIENBIC0gRzEwHhcNMjEwMzA2MDAwMDAwWhcNMjIwMzA2MjM1OTU5WjAk | ||||
| MSIwIAYDVQQDExlkZW1lLmRqYW5nby12dWUtYWRtaW4uY29tMIIBIjANBgkqhkiG | ||||
| 9w0BAQEFAAOCAQ8AMIIBCgKCAQEAk06Sqv+Al94VYBy4mKn4S/BYDxMdZxqC9YXM | ||||
| 1o4h4JB3bnpV2r9SFIcWu16uHs3RqSMMoR8+fhoaXRZLMZExV98nKkeAUhKWA5TJ | ||||
| kQ+GMe3+XFmzeB+TJJmXDeIJZyAPc8wfqWLZLjvAfkMPzCHyxmf6k+sN0bfT7kFr | ||||
| 0xhzDUhIpQp218BCUm4hyW2bqzwjHgzeg/TkHpaHNO7o0pR5/JEJs3jr3Hwsu0s0 | ||||
| kfuAlBnf7BcJIh65BmVxXVFrW4qytPUk1d6Zt76nWy5AZtTw33cqUtKH7HcDHNgT | ||||
| ICsP8ozKaQ23Tb62kCMPwskvXIFuFOgwYKkHTMhXKefglhYGiwIDAQABo4ICbTCC | ||||
| AmkwHwYDVR0jBBgwFoAUVXRPsnJP9WC6UNHX5lFcmgGHGtcwHQYDVR0OBBYEFL0O | ||||
| PlBNqYf3I4ypNWFDpJ1U2G3pMCQGA1UdEQQdMBuCGWRlbWUuZGphbmdvLXZ1ZS1h | ||||
| ZG1pbi5jb20wDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggr | ||||
| BgEFBQcDAjA+BgNVHSAENzA1MDMGBmeBDAECATApMCcGCCsGAQUFBwIBFhtodHRw | ||||
| Oi8vd3d3LmRpZ2ljZXJ0LmNvbS9DUFMwgYAGCCsGAQUFBwEBBHQwcjAkBggrBgEF | ||||
| BQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEoGCCsGAQUFBzAChj5odHRw | ||||
| Oi8vY2FjZXJ0cy5kaWdpY2VydC5jb20vRW5jcnlwdGlvbkV2ZXJ5d2hlcmVEVlRM | ||||
| U0NBLUcxLmNydDAJBgNVHRMEAjAAMIIBAgYKKwYBBAHWeQIEAgSB8wSB8ADuAHUA | ||||
| KXm+8J45OSHwVnOfY6V35b5XfZxgCvj5TV0mXCVdx4QAAAF4CH/v+AAABAMARjBE | ||||
| AiAB+AshGhA6yvyvSV/q3jkTAyHxHKZACFnpAYEonFjS6gIgKayzGSgNkJbGJ1qp | ||||
| JqlVtA6dG53dG8bdUTmIiGF34k0AdQAiRUUHWVUkVpY/oS/x922G4CMmY63AS39d | ||||
| xoNcbuIPAgAAAXgIf+/JAAAEAwBGMEQCIC0/8V0lWjiV37EeIKAkH5zzvCpqO96s | ||||
| lLY5/FKsXLplAiBOPzyGwXNAZ4HoFYAhGcd1jZE9eb0esgYUCq5d16njDDANBgkq | ||||
| hkiG9w0BAQsFAAOCAQEAldgl6ApHK14DitAxzT0ejbu2E87d0tcQy7TOJTMEZs5p | ||||
| UokcBd54SEgt2COh73MUmTBU1DVdOtkY9Ok1mDPQdWQvu3P90KRsIEPYLIEh0w6O | ||||
| 3SJmE0hXIcvC8u8ku36HyQnj1spHG9wKQBfH9Qdq9zti2wo2cAtmvF477H+a+wzD | ||||
| Y2iNY1ucgc1vDxwD6VVRg3iETqL7t8e1KHBMqDZ2EQvr0YHnms+D4VaFXA9WtRRg | ||||
| coSbdko2h+voGNuyJ3zvywN6zLnAfEqoyGEf9tzPDZbrkkp8BJGbGLvbc0PhPX6Q | ||||
| ++r7ty7YFDzX+XDiGu2y+X+BVTqiP+FpP0C0Zqhnng== | ||||
| MIIFoTCCBImgAwIBAgIQBL1afhbyouKA0yBDgDhq/zANBgkqhkiG9w0BAQsFADBy | ||||
| MQswCQYDVQQGEwJDTjElMCMGA1UEChMcVHJ1c3RBc2lhIFRlY2hub2xvZ2llcywg | ||||
| SW5jLjEdMBsGA1UECxMURG9tYWluIFZhbGlkYXRlZCBTU0wxHTAbBgNVBAMTFFRy | ||||
| dXN0QXNpYSBUTFMgUlNBIENBMB4XDTIxMDMyMDAwMDAwMFoXDTIyMDMxOTIzNTk1 | ||||
| OVowJDEiMCAGA1UEAxMZZGVtby5kamFuZ28tdnVlLWFkbWluLmNvbTCCASIwDQYJ | ||||
| KoZIhvcNAQEBBQADggEPADCCAQoCggEBAMk2tqLVSJyC/VTuWlZ+a+bjthUotJ/o | ||||
| yQcXMC6eu/KyHbWqh5Ccj2kLh/zf9uhcs/GcYl/H1hyIVuiC+SHGmGfCqQB96vLl | ||||
| uwwJDlM+y910xKmKV2S6DEFbXDZP76pShrpPs1nDkU5gftuGhX1S77pmMqjbOsG+ | ||||
| gZJAlAZKzT5xnGwpo4rkHc8xPY0ac29+9HXYDawpmySSdbfG+W0kape/wBexFmO+ | ||||
| KLt/oRk+QJbtPguLNLLlvZznf+fFp5UcmsVks/scg9fM1pnj3QQaCB8RXQQKkskm | ||||
| Hi67PGFJOeepNFkApzHO4sUM3ya2Rskzfs9DtTlCODn3XFSVJz7DyTsCAwEAAaOC | ||||
| An8wggJ7MB8GA1UdIwQYMBaAFH/TmfOgRw4xAFZWIo63zJ7dygGKMB0GA1UdDgQW | ||||
| BBSRBeJj2dUcPqhi3km5tbW5lZP3aTAkBgNVHREEHTAbghlkZW1vLmRqYW5nby12 | ||||
| dWUtYWRtaW4uY29tMA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcD | ||||
| AQYIKwYBBQUHAwIwPgYDVR0gBDcwNTAzBgZngQwBAgEwKTAnBggrBgEFBQcCARYb | ||||
| aHR0cDovL3d3dy5kaWdpY2VydC5jb20vQ1BTMIGSBggrBgEFBQcBAQSBhTCBgjA0 | ||||
| BggrBgEFBQcwAYYoaHR0cDovL3N0YXR1c2UuZGlnaXRhbGNlcnR2YWxpZGF0aW9u | ||||
| LmNvbTBKBggrBgEFBQcwAoY+aHR0cDovL2NhY2VydHMuZGlnaXRhbGNlcnR2YWxp | ||||
| ZGF0aW9uLmNvbS9UcnVzdEFzaWFUTFNSU0FDQS5jcnQwCQYDVR0TBAIwADCCAQIG | ||||
| CisGAQQB1nkCBAIEgfMEgfAA7gB1AEalVet1+pEgMLWiiWn0830RLEF0vv1JuIWr | ||||
| 8vxw/m1HAAABeE1whV0AAAQDAEYwRAIgPFX8oV29XVZMDi2tbEuBo2AuS4udT2I/ | ||||
| tMHo9EPNPOYCIGFeOpkGfPcG4szSvKEmUIYimb3vejH0QJ6qB3+T6E5kAHUAIkVF | ||||
| B1lVJFaWP6Ev8fdthuAjJmOtwEt/XcaDXG7iDwIAAAF4TXCFeAAABAMARjBEAiBC | ||||
| HxlN8ItLz/FW/gYrmGGXTVvxxnVKv9t5bsj2AsdmOQIgJVu8zYZVNjt7AHFusZWg | ||||
| ZYSY0Qd+11v1oXBHAi0OUAowDQYJKoZIhvcNAQELBQADggEBAEKj+pGihWMbm/Bm | ||||
| d+7Ra6gngG5N/c7S1cPzmOAlX3bWOFLqZRVPiC8Xa5uzLuqkYMiRIuIFUjZj2CwS | ||||
| gKVwEk3xIL76sMVURV17mhjV7jbhzCSIqnEVLpiGRsuEoHKW8UUAzBdAZjjk4D+Y | ||||
| LZKOQKcWojGTCyRJA5dRHy+sWtnZcHGaD36UHeVh0ctFhoVcc9Oxsh9T6W4NnMd/ | ||||
| CthO8fDic3643232J+6VF1vH5fkz1Q6UGbH+GbmkZ70Rv9YCl78zU77juBfTy9ht | ||||
| HJmcwLWF6Hef7Z+K2QnvT6H+cIb6OxSErshy9TlKgTRjVD7A3wTrri/dCJqfINVk | ||||
| FoBVzmQ= | ||||
| -----END CERTIFICATE----- | ||||
| -----BEGIN CERTIFICATE----- | ||||
| MIIEqjCCA5KgAwIBAgIQAnmsRYvBskWr+YBTzSybsTANBgkqhkiG9w0BAQsFADBh | ||||
| MIIErjCCA5agAwIBAgIQBYAmfwbylVM0jhwYWl7uLjANBgkqhkiG9w0BAQsFADBh | ||||
| MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 | ||||
| d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD | ||||
| QTAeFw0xNzExMjcxMjQ2MTBaFw0yNzExMjcxMjQ2MTBaMG4xCzAJBgNVBAYTAlVT | ||||
| MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j | ||||
| b20xLTArBgNVBAMTJEVuY3J5cHRpb24gRXZlcnl3aGVyZSBEViBUTFMgQ0EgLSBH | ||||
| MTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALPeP6wkab41dyQh6mKc | ||||
| oHqt3jRIxW5MDvf9QyiOR7VfFwK656es0UFiIb74N9pRntzF1UgYzDGu3ppZVMdo | ||||
| lbxhm6dWS9OK/lFehKNT0OYI9aqk6F+U7cA6jxSC+iDBPXwdF4rs3KRyp3aQn6pj | ||||
| pp1yr7IB6Y4zv72Ee/PlZ/6rK6InC6WpK0nPVOYR7n9iDuPe1E4IxUMBH/T33+3h | ||||
| yuH3dvfgiWUOUkjdpMbyxX+XNle5uEIiyBsi4IvbcTCh8ruifCIi5mDXkZrnMT8n | ||||
| wfYCV6v6kDdXkbgGRLKsR4pucbJtbKqIkUGxuZI2t7pfewKRc5nWecvDBZf3+p1M | ||||
| pA8CAwEAAaOCAU8wggFLMB0GA1UdDgQWBBRVdE+yck/1YLpQ0dfmUVyaAYca1zAf | ||||
| BgNVHSMEGDAWgBQD3lA1VtFMu2bwo+IbG8OXsj3RVTAOBgNVHQ8BAf8EBAMCAYYw | ||||
| HQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBIGA1UdEwEB/wQIMAYBAf8C | ||||
| AQAwNAYIKwYBBQUHAQEEKDAmMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdp | ||||
| Y2VydC5jb20wQgYDVR0fBDswOTA3oDWgM4YxaHR0cDovL2NybDMuZGlnaWNlcnQu | ||||
| Y29tL0RpZ2lDZXJ0R2xvYmFsUm9vdENBLmNybDBMBgNVHSAERTBDMDcGCWCGSAGG | ||||
| /WwBAjAqMCgGCCsGAQUFBwIBFhxodHRwczovL3d3dy5kaWdpY2VydC5jb20vQ1BT | ||||
| MAgGBmeBDAECATANBgkqhkiG9w0BAQsFAAOCAQEAK3Gp6/aGq7aBZsxf/oQ+TD/B | ||||
| SwW3AU4ETK+GQf2kFzYZkby5SFrHdPomunx2HBzViUchGoofGgg7gHW0W3MlQAXW | ||||
| M0r5LUvStcr82QDWYNPaUy4taCQmyaJ+VB+6wxHstSigOlSNF2a6vg4rgexixeiV | ||||
| 4YSB03Yqp2t3TeZHM9ESfkus74nQyW7pRGezj+TC44xCagCQQOzzNmzEAP2SnCrJ | ||||
| sNE2DpRVMnL8J6xBRdjmOsC3N6cQuKuRXbzByVBjCqAA8t1L0I+9wXJerLPyErjy | ||||
| rMKWaBFLmfK/AHNF4ZihwPGOc7w6UHczBZXH5RFzJNnww+WnKuTPI0HfnVH8lg== | ||||
| QTAeFw0xNzEyMDgxMjI4MjZaFw0yNzEyMDgxMjI4MjZaMHIxCzAJBgNVBAYTAkNO | ||||
| MSUwIwYDVQQKExxUcnVzdEFzaWEgVGVjaG5vbG9naWVzLCBJbmMuMR0wGwYDVQQL | ||||
| ExREb21haW4gVmFsaWRhdGVkIFNTTDEdMBsGA1UEAxMUVHJ1c3RBc2lhIFRMUyBS | ||||
| U0EgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCgWa9X+ph+wAm8 | ||||
| Yh1Fk1MjKbQ5QwBOOKVaZR/OfCh+F6f93u7vZHGcUU/lvVGgUQnbzJhR1UV2epJa | ||||
| e+m7cxnXIKdD0/VS9btAgwJszGFvwoqXeaCqFoP71wPmXjjUwLT70+qvX4hdyYfO | ||||
| JcjeTz5QKtg8zQwxaK9x4JT9CoOmoVdVhEBAiD3DwR5fFgOHDwwGxdJWVBvktnoA | ||||
| zjdTLXDdbSVC5jZ0u8oq9BiTDv7jAlsB5F8aZgvSZDOQeFrwaOTbKWSEInEhnchK | ||||
| ZTD1dz6aBlk1xGEI5PZWAnVAba/ofH33ktymaTDsE6xRDnW97pDkimCRak6CEbfe | ||||
| 3dXw6OV5AgMBAAGjggFPMIIBSzAdBgNVHQ4EFgQUf9OZ86BHDjEAVlYijrfMnt3K | ||||
| AYowHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUwDgYDVR0PAQH/BAQD | ||||
| AgGGMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjASBgNVHRMBAf8ECDAG | ||||
| AQH/AgEAMDQGCCsGAQUFBwEBBCgwJjAkBggrBgEFBQcwAYYYaHR0cDovL29jc3Au | ||||
| ZGlnaWNlcnQuY29tMEIGA1UdHwQ7MDkwN6A1oDOGMWh0dHA6Ly9jcmwzLmRpZ2lj | ||||
| ZXJ0LmNvbS9EaWdpQ2VydEdsb2JhbFJvb3RDQS5jcmwwTAYDVR0gBEUwQzA3Bglg | ||||
| hkgBhv1sAQIwKjAoBggrBgEFBQcCARYcaHR0cHM6Ly93d3cuZGlnaWNlcnQuY29t | ||||
| L0NQUzAIBgZngQwBAgEwDQYJKoZIhvcNAQELBQADggEBAK3dVOj5dlv4MzK2i233 | ||||
| lDYvyJ3slFY2X2HKTYGte8nbK6i5/fsDImMYihAkp6VaNY/en8WZ5qcrQPVLuJrJ | ||||
| DSXT04NnMeZOQDUoj/NHAmdfCBB/h1bZ5OGK6Sf1h5Yx/5wR4f3TUoPgGlnU7EuP | ||||
| ISLNdMRiDrXntcImDAiRvkh5GJuH4YCVE6XEntqaNIgGkRwxKSgnU3Id3iuFbW9F | ||||
| UQ9Qqtb1GX91AJ7i4153TikGgYCdwYkBURD8gSVe8OAco6IfZOYt/TEwii1Ivi1C | ||||
| qnuUlWpsF1LdQNIdfbW3TSe0BhQa7ifbVIfvPWHYOu3rkg1ZeMo6XRU9B4n5VyJY | ||||
| RmE= | ||||
| -----END CERTIFICATE----- | ||||
|  |  | |||
|  | @ -1,27 +1,27 @@ | |||
| -----BEGIN RSA PRIVATE KEY----- | ||||
| MIIEowIBAAKCAQEAk06Sqv+Al94VYBy4mKn4S/BYDxMdZxqC9YXM1o4h4JB3bnpV | ||||
| 2r9SFIcWu16uHs3RqSMMoR8+fhoaXRZLMZExV98nKkeAUhKWA5TJkQ+GMe3+XFmz | ||||
| eB+TJJmXDeIJZyAPc8wfqWLZLjvAfkMPzCHyxmf6k+sN0bfT7kFr0xhzDUhIpQp2 | ||||
| 18BCUm4hyW2bqzwjHgzeg/TkHpaHNO7o0pR5/JEJs3jr3Hwsu0s0kfuAlBnf7BcJ | ||||
| Ih65BmVxXVFrW4qytPUk1d6Zt76nWy5AZtTw33cqUtKH7HcDHNgTICsP8ozKaQ23 | ||||
| Tb62kCMPwskvXIFuFOgwYKkHTMhXKefglhYGiwIDAQABAoIBAACotbtFUI8qLTC0 | ||||
| fP1VDu+4CYzRUKzCnGdgy91oRJQh0VPEzfGGlzI3g7O4fre6KZmQg8cmW283ZEea | ||||
| VYfJPU4S74GFUSumbaL8EJ+XhDAty/+Gkmj59/yOVPPfWQKfGbKY7TAiz+BT4Btj | ||||
| s9Ewx0p5i9A+Ziqg04MZw9O6V9/TuzkKd0HoSNNEnTueEb4IZgvEbNQRWyvkBiY5 | ||||
| X2o5keDUIQY1/Psrd+HqCq6BngV+2p+dlmTtzkFm4SX5pVptvkasdj/GPQHCTIU+ | ||||
| DpS/dYV0T43pm7VpGz/3XSkPXPiIBkcAofY3VcMF4YV1CW1YnWDuuP8VMFoeG5B9 | ||||
| g4MrHzECgYEAw1ATxKZ3SB/PbnkaHRiwhh/tLXP/0SZokMRABsTcVFpK1xqOlX8i | ||||
| 1wYKk52XvV5LyYZQNiKgRGlSda3lv0H9nfibPo/EDbH/UerHnKAztas5vnHNeAAK | ||||
| LGq4QK8kJ/pplqi8C+bWmgA22Rx/kYaiCrtZUG/IRFUge4bCDp949BUCgYEAwRPt | ||||
| AX7eg9f0hxsmpqWhjBV2InzDGN2j+V3kSLwuzUZqTH6JQL9x6UgA5O3XmhMp1hMr | ||||
| ZkedM/7rvGxeo02t/l51CKSsjLkrW21zt1Rj4KY98Ay1ajAqmmMB2cE/G8AWRbbL | ||||
| EKRKRRyiC+umcX7fdCjsiSXNWQ1BzjFmFGx0mB8CgYAPAt+SFK1ESNWbiwk7xUMD | ||||
| +/4xqSG3RHly7vJw0r6QaSQpZiwhR1U5K4iykcEw18eBZKZTktO4jlO9IbFvwrWo | ||||
| Z4wfAdOyrcSO2jmfSxzOUKuufHarS218vnMM3aksvW1SHAPf8kz6JxwQEcWoPK3F | ||||
| n2Kc8Qp2XgiSFehiUVVthQKBgQCp1Uwhh6ZVFK179i7+YS0DmpEqbtHx2mv02lkG | ||||
| fbkxSWIRXTB/6qZZS8O1m1yNo5OmQYBoXE/0P6S+PhjUzmxhFlcdvjQlKG/x4Qnr | ||||
| Vejw32oV8CfXevzOho5HK4vGbiVpNwvR3KGTv0bu816Z8L6/X4wIa18AmP+sTpl7 | ||||
| F5dLgwKBgHymEzm+tzUetW6JX3zK38TwSqBp5oExano91yQrnl9DNnx1umojKrGr | ||||
| jmkYdvJbOXYGi9qo0cJeX/1bycA0ISEBFItWPp23WDK6rKKypC2kY2nYZKIQNWZl | ||||
| jYUrCYxu9KqMmpYPQfIpnjbWzjKN6OnFD1VJJDczEFqLUm1q79ba | ||||
| -----END RSA PRIVATE KEY----- | ||||
| MIIEogIBAAKCAQEAyTa2otVInIL9VO5aVn5r5uO2FSi0n+jJBxcwLp678rIdtaqH | ||||
| kJyPaQuH/N/26Fyz8ZxiX8fWHIhW6IL5IcaYZ8KpAH3q8uW7DAkOUz7L3XTEqYpX | ||||
| ZLoMQVtcNk/vqlKGuk+zWcORTmB+24aFfVLvumYyqNs6wb6BkkCUBkrNPnGcbCmj | ||||
| iuQdzzE9jRpzb370ddgNrCmbJJJ1t8b5bSRql7/AF7EWY74ou3+hGT5Alu0+C4s0 | ||||
| suW9nOd/58WnlRyaxWSz+xyD18zWmePdBBoIHxFdBAqSySYeLrs8YUk556k0WQCn | ||||
| Mc7ixQzfJrZGyTN+z0O1OUI4OfdcVJUnPsPJOwIDAQABAoIBAA8baQX7vnplyVBt | ||||
| nuG8lyxcL2kSR9FzwFgkcQ0nBNR5dAqWNZxxbMEFyR1+0UJr52S+CZLIZbZ5tBC7 | ||||
| +KmFCB9OObMcQR4ginUiXu14GwVTBYr3JI2e/FmR2vAG+2cN0Ci/4CberJO2Yf/o | ||||
| bzBUIESd9LLB1v0B6SeKarK4PgWwjrr/twowABRBhkkKFErfYZjfNh1mALXPNEUA | ||||
| 7z3a8abw+JWympIFKWxi3YXyLOJZaGawOPDhq+ZVv+7rXvIyAzUzpmwCprjZFL4Q | ||||
| hgN7IY7KjYK772Ffe0nwMbd3wbwYeAelM9fndH9dTMrQ1n6EcDBzla8Cwl6OVEk3 | ||||
| GpQqOfECgYEA+7qFHw75AOI3FFke/2VOJ58m0rrYJwDrLazlrzashi7qgJOBY6jp | ||||
| yjLgGCOcR9v8pRWkOw2VLy+dhdr16Xp/XYhuSa6O5EC7igtnUVx9xu+XAksZiB97 | ||||
| f4lm7F3uirEh7ewuqiRETI9o6V5iGTCSMSc21zlJ1zoxnLMSuMyCKTECgYEAzKDD | ||||
| PNJVZAiZJ25JKinkZlTyQ9VmQkfrvsIBWheN844uoSmmLR4PNwriZQtlURI58WA2 | ||||
| pe20aHJaleOJvzgW/OvcB+7mf/Ukn1mw6Ciusj6jXLXmmq8i80W0RMr1Rdbq8+dp | ||||
| DNZt0iDXEZXHEGqdkpkn/gsvYL+jeIiKyuJ9PisCgYAoZGF//lMORT45UaObr5G+ | ||||
| 4dbE8Z5Fg+w4xAmG9+rvDRAr2X9lknERNOCofu5QyYfcpYBYyXEqxSUtmVjkQfe1 | ||||
| 9nJb+FqNXaW6HOJTN9gm18MPZyWNph+W82FEhD4Gmy2qk79ZJcCf2FMpPy/Wguiy | ||||
| Ymx2VIb4tinHzyQt6wLnwQKBgAURSiR8dP7oM5rFYWx44x4hpmpFo6WqkE0GEvB/ | ||||
| OtW4RLFbDbF6WBgd3eNwt86dK/AtWM0dKOWZR2ME4olowzD6SlWr9etfT8vedcIa | ||||
| F9F0Oal3G8Hi6nOp20AE4rQbEXB+35wgx1F33LujwO1IJqTVxCbHciHsPQkkIIPL | ||||
| vhxHAoGAdwbRiK2OCmycedsD+L5qdxOYiL8JIAXLP+H7ZD0Jyx21UxQAmvza6fIx | ||||
| HygnDGzrTJoOPEWu5WmGs4i6mr1bChHpo85LVNfytsxbE59y3I0va1IlSUC6wjXP | ||||
| Yy3caUiBgxmzz4vhqCFdpLhT2SyyB4m13ggLmeyqLy88WnYCgiE= | ||||
| -----END RSA PRIVATE KEY----- | ||||
|  | @ -1,60 +1,61 @@ | |||
| -----BEGIN CERTIFICATE----- | ||||
| MIIFnzCCBIegAwIBAgIQDULdZ8Ko3AktSKrXM0T8azANBgkqhkiG9w0BAQsFADBu | ||||
| MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 | ||||
| d3cuZGlnaWNlcnQuY29tMS0wKwYDVQQDEyRFbmNyeXB0aW9uIEV2ZXJ5d2hlcmUg | ||||
| RFYgVExTIENBIC0gRzEwHhcNMjEwMzA2MDAwMDAwWhcNMjIwMzA2MjM1OTU5WjAf | ||||
| MR0wGwYDVQQDExRkamFuZ28tdnVlLWFkbWluLmNvbTCCASIwDQYJKoZIhvcNAQEB | ||||
| BQADggEPADCCAQoCggEBALPsn57ttIHmQQQSdtdOP+f07zelzXk6Y2Ta6mLdBx0z | ||||
| HZjoCH3CieDGyLs19B6dphURjI8TtRd6KkclUKwYHL4gzP1AzDOCNzOtizMRm/ad | ||||
| 3hS2H10oZHxOI6fec/ytb7b0Nu4EhZ8/GLsIGvs/hXBaadk8DP5gOLHsm28rlROT | ||||
| EGYraXYi5CTM/auRJcndTNp/v6VhQblqWxojAzlTxlcjwXkreqzhk3y9IN+1VYiV | ||||
| AEk2srVdbfjk6yB5tnKGErAxKPOBzrkzWvh3lIEwrZ/0wRsb/NFGW9g5QDCa8oXV | ||||
| HaJ8qq2dW4X7HOm88QO6xqZiFLldYoYv9psdrrNHd58CAwEAAaOCAoYwggKCMB8G | ||||
| A1UdIwQYMBaAFFV0T7JyT/VgulDR1+ZRXJoBhxrXMB0GA1UdDgQWBBR6M6BtHZ13 | ||||
| MWMDkoP/lLyUfEAcezA5BgNVHREEMjAwghRkamFuZ28tdnVlLWFkbWluLmNvbYIY | ||||
| d3d3LmRqYW5nby12dWUtYWRtaW4uY29tMA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUE | ||||
| FjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwPgYDVR0gBDcwNTAzBgZngQwBAgEwKTAn | ||||
| BggrBgEFBQcCARYbaHR0cDovL3d3dy5kaWdpY2VydC5jb20vQ1BTMIGABggrBgEF | ||||
| BQcBAQR0MHIwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmRpZ2ljZXJ0LmNvbTBK | ||||
| BggrBgEFBQcwAoY+aHR0cDovL2NhY2VydHMuZGlnaWNlcnQuY29tL0VuY3J5cHRp | ||||
| b25FdmVyeXdoZXJlRFZUTFNDQS1HMS5jcnQwCQYDVR0TBAIwADCCAQYGCisGAQQB | ||||
| 1nkCBAIEgfcEgfQA8gB3ACl5vvCeOTkh8FZzn2Old+W+V32cYAr4+U1dJlwlXceE | ||||
| AAABeAiEftAAAAQDAEgwRgIhALoCVuRcMRqM2wwuEsGGCy2mno/3t4qi3RZR2l4B | ||||
| sWZ2AiEApyQ2yCgb2UsEx0YAnjrejgPgj7tsCmwBAi5Vsl/vmccAdwAiRUUHWVUk | ||||
| VpY/oS/x922G4CMmY63AS39dxoNcbuIPAgAAAXgIhH8pAAAEAwBIMEYCIQCpvmUS | ||||
| hv244dpidw1cD6BNu3MPp7xii+63D0OtQa5cJgIhAMAS6PWmwy0g5naWQBj028Qt | ||||
| mh/UdGFSQhgQsPfyAjZUMA0GCSqGSIb3DQEBCwUAA4IBAQBVCd2ZGxA01PyIUokC | ||||
| 1rsjxPCtdvzdj4jcIBiXQw1AVSRrkq9L6TkQfF12wYLzTzLbiW/JmenIdVUC1O2N | ||||
| mc1Zd8jxqr/gC3RhdnzxV1ABA6jn44MYfdK5ZGXyG8wTBXMczfHRJhlhLsfdK78U | ||||
| BHkBbsKq3Q4rjOf/hV2TDBa77Grd66m0zfaTYcidja6wIZvnrzNl7Tf6rIgRnx8O | ||||
| /vo/IJhfkQzT9ZfyOfLMiiZUMzwKPQPpHBbJ3C3JSLq9fPeTm4/soN/4aKn1hU3m | ||||
| qJvfqBtzg4vafmj3p7BZD0LdSmYn8to+xq5gkt57/4Bfn+RAX7/dqx8pBjHXOj98 | ||||
| rjQN | ||||
| MIIFszCCBJugAwIBAgIQCGwikUrRfEUk8GbxRWLVIDANBgkqhkiG9w0BAQsFADBy | ||||
| MQswCQYDVQQGEwJDTjElMCMGA1UEChMcVHJ1c3RBc2lhIFRlY2hub2xvZ2llcywg | ||||
| SW5jLjEdMBsGA1UECxMURG9tYWluIFZhbGlkYXRlZCBTU0wxHTAbBgNVBAMTFFRy | ||||
| dXN0QXNpYSBUTFMgUlNBIENBMB4XDTIxMDMwMzAwMDAwMFoXDTIyMDMwMjIzNTk1 | ||||
| OVowHzEdMBsGA1UEAxMUZGphbmdvLXZ1ZS1hZG1pbi5jb20wggEiMA0GCSqGSIb3 | ||||
| DQEBAQUAA4IBDwAwggEKAoIBAQC0iitqUeTxkq5qabbVcB+7a+YArfKAJBRvcj+T | ||||
| VVdRkvEjcfGLvXIJUTvcUqJkRRYFbimdjB5q7CWCld8bgz/UOpIEmbdqn+WgzrNn | ||||
| WWZrRiN5ylHAsIaKlgYKh6gcftEco6OgkrM8oyq1gORRBIcSj95VcqpIeAUMVyCX | ||||
| R0h3dXnLCVe70ejr8w2cyHrSeS68mXw7LlAdfC0JAZTB/wxwcitSnnIVEbV6wMzG | ||||
| BD5Ka/WprnJgJa7Prb5KHiZh4UG4Es2JpIHALMYLIeKQCUCIP1NmW8Ale+nhY9kD | ||||
| tJeSEIY+/dRoDjpPkkIZalMp+5p0yDQ1LIO4pDZxnoI2vFLFAgMBAAGjggKWMIIC | ||||
| kjAfBgNVHSMEGDAWgBR/05nzoEcOMQBWViKOt8ye3coBijAdBgNVHQ4EFgQUru5P | ||||
| /0LuJj6hxqHWVYUN690wFNEwOQYDVR0RBDIwMIIUZGphbmdvLXZ1ZS1hZG1pbi5j | ||||
| b22CGHd3dy5kamFuZ28tdnVlLWFkbWluLmNvbTAOBgNVHQ8BAf8EBAMCBaAwHQYD | ||||
| VR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMD4GA1UdIAQ3MDUwMwYGZ4EMAQIB | ||||
| MCkwJwYIKwYBBQUHAgEWG2h0dHA6Ly93d3cuZGlnaWNlcnQuY29tL0NQUzCBkgYI | ||||
| KwYBBQUHAQEEgYUwgYIwNAYIKwYBBQUHMAGGKGh0dHA6Ly9zdGF0dXNlLmRpZ2l0 | ||||
| YWxjZXJ0dmFsaWRhdGlvbi5jb20wSgYIKwYBBQUHMAKGPmh0dHA6Ly9jYWNlcnRz | ||||
| LmRpZ2l0YWxjZXJ0dmFsaWRhdGlvbi5jb20vVHJ1c3RBc2lhVExTUlNBQ0EuY3J0 | ||||
| MAkGA1UdEwQCMAAwggEEBgorBgEEAdZ5AgQCBIH1BIHyAPAAdgBGpVXrdfqRIDC1 | ||||
| oolp9PN9ESxBdL79SbiFq/L8cP5tRwAAAXf475pDAAAEAwBHMEUCIHTgL1+oRWE+ | ||||
| REuWNRa5J1cflPKW63jk6/3ibF+Sm5peAiEAt74SK9Ka9QyMJfP57eDl3xA1Ctnb | ||||
| Bz6zTLIQFFicPGsAdgAiRUUHWVUkVpY/oS/x922G4CMmY63AS39dxoNcbuIPAgAA | ||||
| AXf475pNAAAEAwBHMEUCIQDOE36oL7MAxmHdEoI338jLW0xnBN8VeW9XyuTzIcq7 | ||||
| eQIgLwJTNfLqgw7TofY3dKqof5rkcuJWMmSI4aapUUBjFfIwDQYJKoZIhvcNAQEL | ||||
| BQADggEBAC9lYBZuCzle1tSaJ4nVfogwHf0B4lKjDI8ixEnrDaY0tAuYst4S7zoU | ||||
| 76dZcpdwQjVLtlLk5jyaNdN5ohsu9WpErq6N7bXKhbSPBavCPxP4sMWMvmeQQUtB | ||||
| UKqqRofXbx3WcWtsf1/Wlg3pyb0oyJ7kKt3iDG9OYEihQzEyG5Y72IE+HsbhTAWR | ||||
| zqxGnmMumQ+JTnxCCudPoVPk25i2BfndMbcY4N6YyJYuLwMojtMkAeWtRdMmqtiy | ||||
| lMb7EbWLYCHDyv892WTzie1BqZ7YcOaE59OChhmoYxiSXNHPCToIFECTz6BhPxlI | ||||
| T3LbIM4+81HNDebdR17NUE3zN44OjsA= | ||||
| -----END CERTIFICATE----- | ||||
| -----BEGIN CERTIFICATE----- | ||||
| MIIEqjCCA5KgAwIBAgIQAnmsRYvBskWr+YBTzSybsTANBgkqhkiG9w0BAQsFADBh | ||||
| MIIErjCCA5agAwIBAgIQBYAmfwbylVM0jhwYWl7uLjANBgkqhkiG9w0BAQsFADBh | ||||
| MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 | ||||
| d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD | ||||
| QTAeFw0xNzExMjcxMjQ2MTBaFw0yNzExMjcxMjQ2MTBaMG4xCzAJBgNVBAYTAlVT | ||||
| MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j | ||||
| b20xLTArBgNVBAMTJEVuY3J5cHRpb24gRXZlcnl3aGVyZSBEViBUTFMgQ0EgLSBH | ||||
| MTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALPeP6wkab41dyQh6mKc | ||||
| oHqt3jRIxW5MDvf9QyiOR7VfFwK656es0UFiIb74N9pRntzF1UgYzDGu3ppZVMdo | ||||
| lbxhm6dWS9OK/lFehKNT0OYI9aqk6F+U7cA6jxSC+iDBPXwdF4rs3KRyp3aQn6pj | ||||
| pp1yr7IB6Y4zv72Ee/PlZ/6rK6InC6WpK0nPVOYR7n9iDuPe1E4IxUMBH/T33+3h | ||||
| yuH3dvfgiWUOUkjdpMbyxX+XNle5uEIiyBsi4IvbcTCh8ruifCIi5mDXkZrnMT8n | ||||
| wfYCV6v6kDdXkbgGRLKsR4pucbJtbKqIkUGxuZI2t7pfewKRc5nWecvDBZf3+p1M | ||||
| pA8CAwEAAaOCAU8wggFLMB0GA1UdDgQWBBRVdE+yck/1YLpQ0dfmUVyaAYca1zAf | ||||
| BgNVHSMEGDAWgBQD3lA1VtFMu2bwo+IbG8OXsj3RVTAOBgNVHQ8BAf8EBAMCAYYw | ||||
| HQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBIGA1UdEwEB/wQIMAYBAf8C | ||||
| AQAwNAYIKwYBBQUHAQEEKDAmMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdp | ||||
| Y2VydC5jb20wQgYDVR0fBDswOTA3oDWgM4YxaHR0cDovL2NybDMuZGlnaWNlcnQu | ||||
| Y29tL0RpZ2lDZXJ0R2xvYmFsUm9vdENBLmNybDBMBgNVHSAERTBDMDcGCWCGSAGG | ||||
| /WwBAjAqMCgGCCsGAQUFBwIBFhxodHRwczovL3d3dy5kaWdpY2VydC5jb20vQ1BT | ||||
| MAgGBmeBDAECATANBgkqhkiG9w0BAQsFAAOCAQEAK3Gp6/aGq7aBZsxf/oQ+TD/B | ||||
| SwW3AU4ETK+GQf2kFzYZkby5SFrHdPomunx2HBzViUchGoofGgg7gHW0W3MlQAXW | ||||
| M0r5LUvStcr82QDWYNPaUy4taCQmyaJ+VB+6wxHstSigOlSNF2a6vg4rgexixeiV | ||||
| 4YSB03Yqp2t3TeZHM9ESfkus74nQyW7pRGezj+TC44xCagCQQOzzNmzEAP2SnCrJ | ||||
| sNE2DpRVMnL8J6xBRdjmOsC3N6cQuKuRXbzByVBjCqAA8t1L0I+9wXJerLPyErjy | ||||
| rMKWaBFLmfK/AHNF4ZihwPGOc7w6UHczBZXH5RFzJNnww+WnKuTPI0HfnVH8lg== | ||||
| -----END CERTIFICATE----- | ||||
| QTAeFw0xNzEyMDgxMjI4MjZaFw0yNzEyMDgxMjI4MjZaMHIxCzAJBgNVBAYTAkNO | ||||
| MSUwIwYDVQQKExxUcnVzdEFzaWEgVGVjaG5vbG9naWVzLCBJbmMuMR0wGwYDVQQL | ||||
| ExREb21haW4gVmFsaWRhdGVkIFNTTDEdMBsGA1UEAxMUVHJ1c3RBc2lhIFRMUyBS | ||||
| U0EgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCgWa9X+ph+wAm8 | ||||
| Yh1Fk1MjKbQ5QwBOOKVaZR/OfCh+F6f93u7vZHGcUU/lvVGgUQnbzJhR1UV2epJa | ||||
| e+m7cxnXIKdD0/VS9btAgwJszGFvwoqXeaCqFoP71wPmXjjUwLT70+qvX4hdyYfO | ||||
| JcjeTz5QKtg8zQwxaK9x4JT9CoOmoVdVhEBAiD3DwR5fFgOHDwwGxdJWVBvktnoA | ||||
| zjdTLXDdbSVC5jZ0u8oq9BiTDv7jAlsB5F8aZgvSZDOQeFrwaOTbKWSEInEhnchK | ||||
| ZTD1dz6aBlk1xGEI5PZWAnVAba/ofH33ktymaTDsE6xRDnW97pDkimCRak6CEbfe | ||||
| 3dXw6OV5AgMBAAGjggFPMIIBSzAdBgNVHQ4EFgQUf9OZ86BHDjEAVlYijrfMnt3K | ||||
| AYowHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUwDgYDVR0PAQH/BAQD | ||||
| AgGGMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjASBgNVHRMBAf8ECDAG | ||||
| AQH/AgEAMDQGCCsGAQUFBwEBBCgwJjAkBggrBgEFBQcwAYYYaHR0cDovL29jc3Au | ||||
| ZGlnaWNlcnQuY29tMEIGA1UdHwQ7MDkwN6A1oDOGMWh0dHA6Ly9jcmwzLmRpZ2lj | ||||
| ZXJ0LmNvbS9EaWdpQ2VydEdsb2JhbFJvb3RDQS5jcmwwTAYDVR0gBEUwQzA3Bglg | ||||
| hkgBhv1sAQIwKjAoBggrBgEFBQcCARYcaHR0cHM6Ly93d3cuZGlnaWNlcnQuY29t | ||||
| L0NQUzAIBgZngQwBAgEwDQYJKoZIhvcNAQELBQADggEBAK3dVOj5dlv4MzK2i233 | ||||
| lDYvyJ3slFY2X2HKTYGte8nbK6i5/fsDImMYihAkp6VaNY/en8WZ5qcrQPVLuJrJ | ||||
| DSXT04NnMeZOQDUoj/NHAmdfCBB/h1bZ5OGK6Sf1h5Yx/5wR4f3TUoPgGlnU7EuP | ||||
| ISLNdMRiDrXntcImDAiRvkh5GJuH4YCVE6XEntqaNIgGkRwxKSgnU3Id3iuFbW9F | ||||
| UQ9Qqtb1GX91AJ7i4153TikGgYCdwYkBURD8gSVe8OAco6IfZOYt/TEwii1Ivi1C | ||||
| qnuUlWpsF1LdQNIdfbW3TSe0BhQa7ifbVIfvPWHYOu3rkg1ZeMo6XRU9B4n5VyJY | ||||
| RmE= | ||||
| -----END CERTIFICATE----- | ||||
|  | @ -1,27 +1,27 @@ | |||
| -----BEGIN RSA PRIVATE KEY----- | ||||
| MIIEowIBAAKCAQEAs+yfnu20geZBBBJ2104/5/TvN6XNeTpjZNrqYt0HHTMdmOgI | ||||
| fcKJ4MbIuzX0Hp2mFRGMjxO1F3oqRyVQrBgcviDM/UDMM4I3M62LMxGb9p3eFLYf | ||||
| XShkfE4jp95z/K1vtvQ27gSFnz8Yuwga+z+FcFpp2TwM/mA4seybbyuVE5MQZitp | ||||
| diLkJMz9q5Elyd1M2n+/pWFBuWpbGiMDOVPGVyPBeSt6rOGTfL0g37VViJUASTay | ||||
| tV1t+OTrIHm2coYSsDEo84HOuTNa+HeUgTCtn/TBGxv80UZb2DlAMJryhdUdonyq | ||||
| rZ1bhfsc6bzxA7rGpmIUuV1ihi/2mx2us0d3nwIDAQABAoIBADEzNl7eP2r6DLNR | ||||
| XT/4/M6wEq4T38ETr1RH7KoGKMjaTnCempvRE6Tslr1ivpOUpnLCbr49NFrsJB16 | ||||
| XboBifKPw55JFs3LAM9X2GWpng1tE+pz9tWhkwDO2T8xPGRPBOpxk4e4otVuCpQy | ||||
| XjZwI0wa3TDzE9aHd1loCwT2VPiZ3As8rr0+4kIN6EyzneNb5Uys0LHMzHGHVBUl | ||||
| JY0fAwqrt7wi+AXSufcxX6uhwJOY0LAU0iiT3Y1CYP6IdTtwpyWW2DcYeuHtLK9Y | ||||
| oSnkHRXaJOcUHytDdRSXyJVD174r1wfSPCZ6DjXGc9ydwTQQg3ibTJrdn5gnaLZ9 | ||||
| /Lrk80ECgYEA3CrP4NlbfBestRuU2LfEQvyzVVfiVWv7NjHDbryVTQ3hu5dR2hr8 | ||||
| Q9acWwvg2virQVzSnECk4QsNydcaRriU0kq2Nf9Vzs8oTDZl7+K203L+Ry3bguUe | ||||
| r4q9v7mY6cCOIgE19H+BR2T21NVHHK3acR6WVO+95rlD0Aqe0FXmZmECgYEA0TUa | ||||
| y3Pbp7+kcUQIqdKwrYVCSgKQeco3VqtqlXDHjoD49tBP/WHJqJaGJ582bW3ozIYs | ||||
| 1Iol3wInjOy6iOIvRK2tJibb7tor/WxMO4R5NbMYSswyOwyO+gaz3hoQbu+m/S12 | ||||
| 8BwM9JN1QHq3mYqT0QHvamPW9asU2auONRq+nf8CgYBREeKh5Odu9ji+J33TnzdB | ||||
| g1N1pXrOAYjrF7/i0sYXLXllXf7h1PX29Nt2GxWdC9vjoY5bwuHzi+Jz5CTkzarf | ||||
| FGurzm2GTXmFNrKqdkzj54ACLbyaokt+UBQ2uNy5lhHAK7n2Ycz0wRSyoiYhRVMe | ||||
| PCkW9YBzqNxzirWX+UlxgQKBgGhZlajffDOa2noIlk2moquaaWsjBk9JNvsK+1nY | ||||
| 7CC/Ye8yDoPzL7PgiL/goTRJ+zFwx5Gn6qXmnDWlqpE2SJ94BYKfJVppBkIcr5WM | ||||
| SS0ozLgaS/+6DuLVTwg8de/vp5pnAAlZ5HhlyLlFvKhgP8Sjs3icng7hq7+6227P | ||||
| jT6fAoGBAMyPW7voNx29oPT04MMgAKdwyjR5sZv6vWhOW6KBOPkLUKPDfSfrVN0B | ||||
| H6JfetLZryHXgJioxBfLoLqIW+iMvW7UcCFD53I6nWpOzBtcPTjgeeIK0W4+f113 | ||||
| RrXOS29rrxKr0NXvnYx26v5deQ9+KlxAUgTuC+EjqsX8NnGW21Cv | ||||
| -----END RSA PRIVATE KEY----- | ||||
| MIIEowIBAAKCAQEAtIoralHk8ZKuamm21XAfu2vmAK3ygCQUb3I/k1VXUZLxI3Hx | ||||
| i71yCVE73FKiZEUWBW4pnYweauwlgpXfG4M/1DqSBJm3ap/loM6zZ1lma0YjecpR | ||||
| wLCGipYGCoeoHH7RHKOjoJKzPKMqtYDkUQSHEo/eVXKqSHgFDFcgl0dId3V5ywlX | ||||
| u9Ho6/MNnMh60nkuvJl8Oy5QHXwtCQGUwf8McHIrUp5yFRG1esDMxgQ+Smv1qa5y | ||||
| YCWuz62+Sh4mYeFBuBLNiaSBwCzGCyHikAlAiD9TZlvAJXvp4WPZA7SXkhCGPv3U | ||||
| aA46T5JCGWpTKfuadMg0NSyDuKQ2cZ6CNrxSxQIDAQABAoIBAA5RZOcOLp9/+Agl | ||||
| cSQVO9cD1B5arUA/XEWIZIVdP8sO4cPjXfosoJYflKVBAnL8TaZJmdBOU/071C+6 | ||||
| jhKjApVkvb7SqAqzOqVZrz2zh91bFyYqBvjGpyznf/wmzQzRe+kPC0OJTuCwugrh | ||||
| +Xl5Z/LvaP0S1nFf31qesE1/ED609pvWtdUWj2oop9zORBzjaGcXeOKNqX8XnQCp | ||||
| rJ487wcnuL8Nnuu+vuh8dC9o7zwjGrKwXhM3sijLp4q9VOF9fW2bYLyfLUR3FCFq | ||||
| JPrQXe1mY28w+uIlnEdPkwgGIJbzur601BuzU9ZH5MSl7iYV319MPz+rtizFJxLm | ||||
| OCg5hcMCgYEA7RrgQsrSj4fhi0VVkQ3fFeLJPQlvVcMK0OOYxP3cKQYSgXo79bQK | ||||
| i9yRCRVS2UTGh8B3MGbPr+sRINokeYtjWxGDOwAlkye9kRiCKzzZOrlwDAY/SEDZ | ||||
| HH5mVnv9UHtxCFSUub67IVWH7wCmoprKEK/loyvJFiE5jsxVmNZl3o8CgYEAwu1R | ||||
| nBsETJLuN5/fB9rW3NvjaHGT1B6LQ1uIBmsU6V71gBasawX/X3ENOoX1dQa2japp | ||||
| x58pjLJuP/t4WgZ41PBagij2G83VdFBdvrcVSk7B1yt8rudxmcvo1K6FR2FG7DMU | ||||
| 9kkb9JKFT3/FM7LT+z4xXxJ0AoNg6QD1IIT5Y2sCgYEAyQUvOxGQISY334bh+8AB | ||||
| 8iE7MidsoA5jfiRoIiOEY7eFOwbyDOcexeMzh7rvacs4cmGH655O2Lv34p1vrSiz | ||||
| DMO1OfFu6esYegqIWbYWCgar61XkkxJ/v/ueMhae9nwhoclr6mq9Zo6IV+Z6YIPR | ||||
| awJmM8fsjXmPvfSZYaHr7hsCgYAPzW99SU9q6cp4JfTNzTb4BreD4xlJ7AP8PPJl | ||||
| Gs9CMBmU/cGSl5ThZufco7mHeDjaeUNEFKooptp7Q2a5Xab0FFwyCyIQlPpGCLHg | ||||
| 4TTPplzelb7w6wBxqG9CtrdFVySJx4ZehQTIKgy2qjQRgeDfkGYuP++5uG7l1NcK | ||||
| gN066wKBgDg2F4yMx4SBWL3aBjIVd+Zilm+pkU1ZGC1XcuLnqSSMcoDy/JMszQC1 | ||||
| SEdDxgnCGlkWjtaxNPwfZTPU0SIoX5dcAx1EaHDJ+ibiIKGtM8forSCiP8fNz0oR | ||||
| SYNZaYVuDJb1SFk9vKJMuIIFWS+AM6rlcOpNu6A0+1MbstM4BvwS | ||||
| -----END RSA PRIVATE KEY----- | ||||
|  | @ -1,7 +1,7 @@ | |||
| ## 将HTTP请求全部重定向至HTTPS | ||||
| server { | ||||
|     listen       80; | ||||
|     server_name  api.django-vue-admin.com; | ||||
|     server_name  daily.api.django-vue-admin.com; | ||||
|     charset utf-8; | ||||
|     access_log /var/log/nginx/api-80.access.log; | ||||
|     error_log  /var/log/nginx/api-80.error.log; | ||||
|  | @ -9,11 +9,11 @@ server { | |||
| } | ||||
| server { | ||||
|         listen 443 ssl; | ||||
|         server_name api.django-vue-admin.com; | ||||
|         server_name daily.api.django-vue-admin.com; | ||||
|         root /dvadmin-backend/;#项目路径 | ||||
|         charset utf-8; | ||||
|         ssl_certificate    /nginx/keys/api.django-vue-admin.com.crt;#.pem证书路径 | ||||
|         ssl_certificate_key  /nginx/keys/api.django-vue-admin.com.key;#.key证书路径 | ||||
|         ssl_certificate    /nginx/keys/daily.api.django-vue-admin.com.crt;#.pem证书路径 | ||||
|         ssl_certificate_key  /nginx/keys/daily.api.django-vue-admin.com.key;#.key证书路径 | ||||
|         ssl_protocols TLSv1 TLSv1.1 TLSv1.2; | ||||
|         ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; | ||||
|         ssl_prefer_server_ciphers on; | ||||
|  | @ -21,7 +21,7 @@ server { | |||
|         ssl_session_timeout 10m; | ||||
|         error_page 497  https://$host$request_uri; | ||||
|         proxy_set_header Host $proxy_host; | ||||
|         proxy_set_header X-DTS-SCHEMA api; | ||||
|         proxy_set_header X-DTS-SCHEMA daily.api; | ||||
|         proxy_set_header X-Real-IP $remote_addr; | ||||
|         proxy_set_header X-Forwarded-For $remote_addr; | ||||
|         location / { | ||||
|  | @ -41,6 +41,6 @@ server { | |||
|             alias /dvadmin-backend/static; # your Django project's static files - amend as required | ||||
|         } | ||||
| 
 | ||||
|         access_log  /var/log/nginx/api-443.access.log; | ||||
|         error_log   /var/log/nginx/api-443.error.log; | ||||
|         access_log  /var/log/nginx/daily.api-443.access.log; | ||||
|         error_log   /var/log/nginx/daily.api-443.error.log; | ||||
|     } | ||||
|  |  | |||
|  | @ -25,10 +25,20 @@ server { | |||
|         proxy_set_header X-Real-IP $remote_addr; | ||||
|         proxy_set_header X-Forwarded-For $remote_addr; | ||||
|         location / { | ||||
|             try_files $uri $uri/ @router;#需要指向下面的@router否则会出现vue的路由在nginx中刷新出现404 | ||||
|             root   /dvadmin-ui/dist/; | ||||
|             add_header  Cache-Control  max-age=no-cache; | ||||
|             index  index.html index.php index.htm; | ||||
|         } | ||||
|         location ~* \.(css|js|png|jpg|jpeg|gif|gz|svg|mp4|ogg|ogv|webm|htc|xml|woff)$ { | ||||
|             access_log off; | ||||
|             add_header Cache-Control max-age=604800; | ||||
|             root   /dvadmin-ui/dist/; | ||||
|             index  index.html index.php index.htm; | ||||
|         } | ||||
| 
 | ||||
|         location @router { | ||||
|             rewrite ^.*$ /index.html last; | ||||
|         } | ||||
|         access_log  /var/log/nginx/daily.demo-443.access.log; | ||||
|         error_log   /var/log/nginx/daily.demo-443.error.log; | ||||
|     } | ||||
|  |  | |||
|  | @ -25,10 +25,20 @@ server { | |||
|         proxy_set_header X-Real-IP $remote_addr; | ||||
|         proxy_set_header X-Forwarded-For $remote_addr; | ||||
|         location / { | ||||
|             try_files $uri $uri/ @router;#需要指向下面的@router否则会出现vue的路由在nginx中刷新出现404 | ||||
|             root   /dvadmin-ui/dist/; | ||||
|             add_header  Cache-Control  max-age=no-cache; | ||||
|             index  index.html index.php index.htm; | ||||
|         } | ||||
|         location ~* \.(css|js|png|jpg|jpeg|gif|gz|svg|mp4|ogg|ogv|webm|htc|xml|woff)$ { | ||||
|             access_log off; | ||||
|             add_header Cache-Control max-age=604800; | ||||
|             root   /dvadmin-ui/dist/; | ||||
|             index  index.html index.php index.htm; | ||||
|         } | ||||
| 
 | ||||
|         location @router { | ||||
|             rewrite ^.*$ /index.html last; | ||||
|         } | ||||
|         access_log  /var/log/nginx/demo-443.access.log; | ||||
|         error_log   /var/log/nginx/demo-443.error.log; | ||||
|     } | ||||
|  |  | |||
|  | @ -0,0 +1,37 @@ | |||
| ## 将HTTP请求全部重定向至HTTPS | ||||
| server { | ||||
|     listen       80; | ||||
|     server_name  django-vue-admin.com; | ||||
|     charset utf-8; | ||||
|     access_log /var/log/nginx/www-80.access.log; | ||||
|     error_log  /var/log/nginx/www-80.error.log; | ||||
|     rewrite ^(.*)$ https://${server_name}$1 permanent; | ||||
| } | ||||
| server { | ||||
|         listen 443 ssl; | ||||
|         server_name django-vue-admin.com; | ||||
|         root /vadmin-doc/;#项目路径 | ||||
|         charset utf-8; | ||||
|         ssl_certificate    /nginx/keys/www.django-vue-admin.com.crt;#.pem证书路径 | ||||
|         ssl_certificate_key  /nginx/keys/www.django-vue-admin.com.key;#.key证书路径 | ||||
|         ssl_protocols TLSv1 TLSv1.1 TLSv1.2; | ||||
|         ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; | ||||
|         ssl_prefer_server_ciphers on; | ||||
|         ssl_session_cache shared:SSL:10m; | ||||
|         ssl_session_timeout 10m; | ||||
|         error_page 497  https://$host$request_uri; | ||||
|         proxy_set_header Host $proxy_host; | ||||
|         proxy_set_header X-DTS-SCHEMA www; | ||||
|         proxy_set_header X-Real-IP $remote_addr; | ||||
|         proxy_set_header X-Forwarded-For $remote_addr; | ||||
|         location / { | ||||
|             try_files $uri $uri/ @router;#需要指向下面的@router否则会出现vue的路由在nginx中刷新出现404 | ||||
|             root   /dvadmin-doc/docs/.vuepress/dist/; | ||||
|             index  index.html index.php index.htm; | ||||
|         } | ||||
|         location @router { | ||||
|             rewrite ^.*$ /index.html last; | ||||
|         } | ||||
|         access_log  /var/log/nginx/www-443.access.log; | ||||
|         error_log   /var/log/nginx/www-443.error.log; | ||||
|     } | ||||
|  | @ -25,10 +25,13 @@ server { | |||
|         proxy_set_header X-Real-IP $remote_addr; | ||||
|         proxy_set_header X-Forwarded-For $remote_addr; | ||||
|         location / { | ||||
|             root   /dvadmin-doc/dist/; | ||||
|             try_files $uri $uri/ @router;#需要指向下面的@router否则会出现vue的路由在nginx中刷新出现404 | ||||
|             root   /dvadmin-doc/docs/.vuepress/dist/; | ||||
|             index  index.html index.php index.htm; | ||||
|         } | ||||
| 
 | ||||
|         location @router { | ||||
|             rewrite ^.*$ /index.html last; | ||||
|         } | ||||
|         access_log  /var/log/nginx/www-443.access.log; | ||||
|         error_log   /var/log/nginx/www-443.error.log; | ||||
|     } | ||||
|  |  | |||
|  | @ -0,0 +1,5 @@ | |||
| FROM node:12 | ||||
| COPY ./dvadmin-ui/package.json / | ||||
| RUN npm install --registry=https://registry.npm.taobao.org | ||||
| #RUN npm run build:prod | ||||
| #CMD ["npm","run","dev"] | ||||
|  | @ -0,0 +1,5 @@ | |||
| FROM node:12 | ||||
| COPY ./dvadmin-ui/package.json / | ||||
| RUN npm install --registry=https://registry.npm.taobao.org | ||||
| #RUN npm run build:prod | ||||
| #CMD ["npm","run","dev"] | ||||
|  | @ -13,6 +13,7 @@ https://docs.djangoproject.com/en/1.11/ref/settings/ | |||
| # 导入全局环境变量 | ||||
| import datetime | ||||
| import os | ||||
| import sys | ||||
| 
 | ||||
| from mongoengine import connect | ||||
| 
 | ||||
|  | @ -20,7 +21,7 @@ from conf.env import * | |||
| 
 | ||||
| # Build paths inside the project like this: os.path.join(BASE_DIR, ...) | ||||
| BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) | ||||
| 
 | ||||
| sys.path.insert(0,os.path.join(BASE_DIR,'apps')) | ||||
| # Quick-start development settings - unsuitable for production | ||||
| # See https://docs.djangoproject.com/en/1.11/howto/deployment/checklist/ | ||||
| 
 | ||||
|  | @ -45,9 +46,9 @@ INSTALLED_APPS = [ | |||
|     'corsheaders', | ||||
|     'captcha', | ||||
|     # 自定义app | ||||
|     'apps.permission', | ||||
|     'apps.op_drf', | ||||
|     'apps.system', | ||||
|     'apps.vadmin.permission', | ||||
|     'apps.vadmin.op_drf', | ||||
|     'apps.vadmin.system', | ||||
| ] | ||||
| 
 | ||||
| MIDDLEWARE = [ | ||||
|  | @ -59,6 +60,7 @@ MIDDLEWARE = [ | |||
|     'django.contrib.auth.middleware.AuthenticationMiddleware', | ||||
|     'django.contrib.messages.middleware.MessageMiddleware', | ||||
|     'django.middleware.clickjacking.XFrameOptionsMiddleware', | ||||
|     'vadmin.op_drf.middleware.ApiLoggingMiddleware',  # 用于记录API访问日志 | ||||
| ] | ||||
| # 允许跨域源 | ||||
| CORS_ORIGIN_ALLOW_ALL = CORS_ORIGIN_ALLOW_ALL | ||||
|  | @ -117,7 +119,7 @@ USE_I18N = True | |||
| 
 | ||||
| USE_L10N = True | ||||
| 
 | ||||
| USE_TZ = True | ||||
| USE_TZ = False | ||||
| 
 | ||||
| # Static files (CSS, JavaScript, Images) | ||||
| # https://docs.djangoproject.com/en/1.11/howto/static-files/ | ||||
|  | @ -126,10 +128,15 @@ USE_TZ = True | |||
| """ | ||||
| # 访问静态文件的url地址前缀 | ||||
| STATIC_URL = '/static/' | ||||
| # 设置django的静态文件目录 | ||||
| # 收集静态文件,必须将 MEDIA_ROOT,STATICFILES_DIRS先注释 | ||||
| # python manage.py collectstatic | ||||
| # STATIC_ROOT=os.path.join(BASE_DIR,'static') | ||||
| # # 设置django的静态文件目录 | ||||
| STATICFILES_DIRS = [ | ||||
|     os.path.join(BASE_DIR, "static") | ||||
|     os.path.join(BASE_DIR, "static"), | ||||
| ] | ||||
| if not os.path.exists(os.path.join(BASE_DIR, 'media')): | ||||
|     os.makedirs(os.path.join(BASE_DIR, 'media')) | ||||
| # 访问上传文件的url地址前缀 | ||||
| MEDIA_URL = "/media/" | ||||
| # 项目中存储上传文件的根目录 | ||||
|  | @ -160,6 +167,10 @@ LOGGING = { | |||
|             'format': CONSOLE_LOG_FORMAT, | ||||
|             'datefmt': '%Y-%m-%d %H:%M:%S', | ||||
|         }, | ||||
|         'file': { | ||||
|             'format': CONSOLE_LOG_FORMAT, | ||||
|             'datefmt': '%Y-%m-%d %H:%M:%S', | ||||
|         }, | ||||
|     }, | ||||
|     'handlers': { | ||||
|         'file': { | ||||
|  | @ -189,7 +200,7 @@ LOGGING = { | |||
|     'loggers': { | ||||
|         # default日志 | ||||
|         '': { | ||||
|             'handlers': ['console'], | ||||
|             'handlers': ['console','error','file'], | ||||
|             'level': 'INFO', | ||||
|         }, | ||||
|         # 数据库相关日志 | ||||
|  | @ -247,9 +258,9 @@ JWT_AUTH = { | |||
|     'JWT_AUTH_HEADER_PREFIX': 'Bearer',  # JWT的Header认证头以'JWT '开始 | ||||
|     'JWT_AUTH_COOKIE': 'AUTH_JWT', | ||||
|     'JWT_VERIFY_EXPIRATION': True, | ||||
|     'JWT_PAYLOAD_HANDLER': 'utils.jwt_util.jwt_payload_handler', | ||||
|     'JWT_GET_USER_SECRET_KEY': 'utils.jwt_util.jwt_get_user_secret_key', | ||||
|     'JWT_RESPONSE_PAYLOAD_HANDLER': 'utils.jwt_util.jwt_response_payload_handler', | ||||
|     'JWT_PAYLOAD_HANDLER': 'apps.vadmin.utils.jwt_util.jwt_payload_handler', | ||||
|     'JWT_GET_USER_SECRET_KEY': 'apps.vadmin.utils.jwt_util.jwt_get_user_secret_key', | ||||
|     'JWT_RESPONSE_PAYLOAD_HANDLER': 'apps.vadmin.utils.jwt_util.jwt_response_payload_handler', | ||||
| } | ||||
| 
 | ||||
| # ================================================= # | ||||
|  | @ -261,23 +272,24 @@ REST_FRAMEWORK = { | |||
|     ), | ||||
| 
 | ||||
|     'DEFAULT_AUTHENTICATION_CLASSES': ( | ||||
|         'rest_framework_jwt.authentication.JSONWebTokenAuthentication', | ||||
|         'apps.vadmin.utils.authentication.RedisOpAuthJwtAuthentication', | ||||
|         # 'rest_framework_jwt.authentication.JSONWebTokenAuthentication', | ||||
|         'rest_framework.authentication.BasicAuthentication', | ||||
|         'rest_framework.authentication.SessionAuthentication', | ||||
|         'utils.authentication.RedisOpAuthJwtAuthentication' | ||||
| 
 | ||||
|     ), | ||||
| 
 | ||||
|     'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.AutoSchema', | ||||
|     'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination', | ||||
|     'DEFAULT_FILTER_BACKENDS': ('django_filters.rest_framework.DjangoFilterBackend',), | ||||
|     'EXCEPTION_HANDLER': 'utils.exceptions.op_exception_handler', | ||||
|     'EXCEPTION_HANDLER': 'apps.vadmin.utils.exceptions.op_exception_handler', | ||||
| } | ||||
| # ================================================= # | ||||
| # ************** 登录方式配置  ************** # | ||||
| # ================================================= # | ||||
| AUTHENTICATION_BACKENDS = ( | ||||
|     'utils.backends.CustomBackend', | ||||
|     'utils.backends.SessionAuthentication', | ||||
|     'apps.vadmin.utils.backends.CustomBackend', | ||||
|     'apps.vadmin.utils.backends.SessionAuthentication', | ||||
| ) | ||||
| AUTH_USER_MODEL = 'permission.UserProfile' | ||||
| # username_field | ||||
|  | @ -302,3 +314,7 @@ CAPTCHA_NOISE_FUNCTIONS = ( | |||
|                            ) | ||||
| # CAPTCHA_CHALLENGE_FUNCT = 'captcha.helpers.random_char_challenge' | ||||
| CAPTCHA_CHALLENGE_FUNCT = 'captcha.helpers.math_challenge' | ||||
| 
 | ||||
| API_LOG_ENABLE = True | ||||
| # API_LOG_METHODS = 'ALL' # ['POST', 'DELETE'] | ||||
| # API_LOG_METHODS = ['POST', 'DELETE'] # ['POST', 'DELETE'] | ||||
|  |  | |||
|  | @ -18,16 +18,11 @@ from captcha.conf import settings as ca_settings | |||
| from captcha.helpers import captcha_image_url, captcha_audio_url | ||||
| from captcha.models import CaptchaStore | ||||
| from django.conf import settings | ||||
| from django.conf.urls import url | ||||
| from django.contrib import admin | ||||
| from django.urls import re_path, include | ||||
| from django.views.static import serve | ||||
| from rest_framework.documentation import include_docs_urls | ||||
| from rest_framework.views import APIView | ||||
| 
 | ||||
| from apps.permission.views import GetUserProfileView, GetRouters | ||||
| from apps.op_drf.response import SuccessResponse | ||||
| from utils.login import LoginView, LogoutView | ||||
| from apps.vadmin.op_drf.response import SuccessResponse | ||||
| 
 | ||||
| 
 | ||||
| class CaptchaRefresh(APIView): | ||||
|  | @ -45,18 +40,6 @@ class CaptchaRefresh(APIView): | |||
| 
 | ||||
| 
 | ||||
| urlpatterns = [ | ||||
|     re_path('api-token-auth/', LoginView.as_view(), name='api_token_auth'), | ||||
|     re_path(r'^admin/', admin.site.urls), | ||||
|     url(r'docs/', include_docs_urls(title='接口文档')), | ||||
|     re_path(r'^permission/', include('apps.permission.urls')), | ||||
|     re_path(r'^system/', include('apps.system.urls')), | ||||
|     re_path(r'media/(?P<path>.*)', serve, {"document_root": settings.MEDIA_ROOT}), | ||||
|     re_path(r'^login/$', LoginView.as_view()), | ||||
|     re_path(r'^logout/$', LogoutView.as_view()), | ||||
|     re_path(r'^getInfo/$', GetUserProfileView.as_view()), | ||||
|     re_path(r'^getRouters/$', GetRouters.as_view()), | ||||
|     url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')), | ||||
|     url(r"captcha/refresh/$", CaptchaRefresh.as_view(), name="captcha-refresh"),  # 刷新验证码 | ||||
|     re_path('captcha/', include('captcha.urls')),  # 图片验证码 路由 | ||||
| 
 | ||||
|     re_path(r'^admin/', include('apps.vadmin.urls')), | ||||
| ] | ||||
|  |  | |||
|  | @ -1,102 +0,0 @@ | |||
| """ | ||||
| django中间件 | ||||
| """ | ||||
| 
 | ||||
| import json | ||||
| import datetime | ||||
| from django.utils.deprecation import MiddlewareMixin | ||||
| from mongoengine import DynamicDocument, StringField, IntField, DictField, DateTimeField | ||||
| from rest_framework_mongoengine.serializers import DocumentSerializer | ||||
| import logging | ||||
| from utils.decorators import exceptionHandler | ||||
| from utils.request_util import get_request_ip, get_request_data, get_request_path | ||||
| from .viewsets import CustomMongoModelViewSet | ||||
| from django.conf import settings | ||||
| logger = logging.getLogger(__name__) | ||||
| 
 | ||||
| 
 | ||||
| class ApiLog(DynamicDocument): | ||||
|     """ | ||||
|     API访问日志的Mongo模型 | ||||
|     """ | ||||
|     request_ip = StringField(verbose_name="request_ip", help_text="请求IP") | ||||
|     request_username = StringField(verbose_name="request_username", help_text="请求username") | ||||
|     request_method = StringField(verbose_name="request_method", help_text="请求方法") | ||||
|     request_path = StringField(verbose_name="request_path", help_text="请求路径") | ||||
|     request_body = DictField(verbose_name="request_body", help_text="请求参数") | ||||
|     response_code = IntField(verbose_name="response_code", help_text="响应状态码") | ||||
|     response_reason = StringField(verbose_name="response_reason", help_text="响应简述") | ||||
|     access_time = DateTimeField(verbose_name="access_time", help_text="访问时间") | ||||
| 
 | ||||
| 
 | ||||
| class ApiLogSerializer(DocumentSerializer): | ||||
|     """ | ||||
|     API访问日志的Mongo序列化器 | ||||
|     """ | ||||
|     class Meta: | ||||
|         model = ApiLog | ||||
|         fields = '__all__' | ||||
| 
 | ||||
| 
 | ||||
| class ApiLogModelViewSet(CustomMongoModelViewSet): | ||||
|     """ | ||||
|     API访问日志的CRUD视图 | ||||
|     """ | ||||
|     queryset = ApiLog.objects.all() | ||||
|     serializer_class = ApiLogSerializer | ||||
|     search_fields = ('request_ip', 'request_username', 'request_method', 'response_reason', 'source_system') | ||||
|     ordering = '-access_time'  # 默认排序 | ||||
| 
 | ||||
| 
 | ||||
| class ApiLoggingMiddleware(MiddlewareMixin): | ||||
|     """ | ||||
|     用于记录API访问日志中间件 | ||||
|     """ | ||||
|     def __init__(self, get_response=None): | ||||
|         super().__init__(get_response) | ||||
|         self.enable = op_settings.get_api_log_setting().get('enable', False) | ||||
|         self.methods = op_settings.get_api_log_setting().get('methods', set()) | ||||
| 
 | ||||
|     @classmethod | ||||
|     @exceptionHandler() | ||||
|     def __handle_request(cls, request): | ||||
|         request.request_ip = get_request_ip(request) | ||||
|         request.request_data = get_request_data(request) | ||||
|         request.access_time = datetime.datetime.now() | ||||
| 
 | ||||
|     @classmethod | ||||
|     @exceptionHandler(logger=logger) | ||||
|     def __handle_response(cls, request, response): | ||||
|         # request_data,request_ip由PermissionInterfaceMiddleware中间件中添加的属性 | ||||
|         body = getattr(request, 'request_data', {}) | ||||
|         # 请求含有password则用*替换掉(暂时先用于所有接口的password请求参数) | ||||
|         if isinstance(body, dict) and body.get('password', ''): | ||||
|             body['password'] = '*' * len(body['password']) | ||||
|         info = { | ||||
|             'request_ip': getattr(request, 'request_ip', 'unknown'), | ||||
|             'request_username': request.user.username, | ||||
|             'request_method': request.method, | ||||
|             'request_path': request.path, | ||||
|             'request_body': body, | ||||
|             'response_code': response.status_code, | ||||
|             'response_reason': response.reason_phrase, | ||||
|             'source_system': getattr(settings,'SOURCE_SYSTEM_NAME',None), | ||||
|             'access_time': request.access_time.strftime('%Y-%m-%d %H:%M:%S'), | ||||
|         } | ||||
|         log = ApiLog(**info) | ||||
|         log.save() | ||||
| 
 | ||||
|     def process_request(self, request): | ||||
|         self.__handle_request(request) | ||||
| 
 | ||||
|     def process_response(self, request, response): | ||||
|         """ | ||||
|         主要请求处理完之后记录 | ||||
|         :param request: | ||||
|         :param response: | ||||
|         :return: | ||||
|         """ | ||||
|         if self.enable: | ||||
|             if self.methods == 'ALL' or request.method in self.methods: | ||||
|                 self.__handle_response(request, response) | ||||
|         return response | ||||
|  | @ -1,287 +0,0 @@ | |||
| import logging | ||||
| import traceback | ||||
| from types import FunctionType, MethodType | ||||
| 
 | ||||
| from rest_framework.exceptions import APIException as DRFAPIException | ||||
| from rest_framework.request import Request | ||||
| from rest_framework.views import APIView | ||||
| 
 | ||||
| from utils import exceptions | ||||
| from utils.model_util import ModelRelateUtils | ||||
| from .logging.view_logger import CustomerRelationshipViewLogger | ||||
| from .response import SuccessResponse, ErrorResponse | ||||
| from .serializers import CustomModelSerializer | ||||
| 
 | ||||
| logger = logging.getLogger(__name__) | ||||
| 
 | ||||
| 
 | ||||
| def op_exception_handler(ex, context): | ||||
|     """ | ||||
|     统一异常拦截处理 | ||||
|     目的:(1)取消所有的500异常响应,统一响应为标准错误返回 | ||||
|         (2)准确显示错误信息 | ||||
|     :param ex: | ||||
|     :param context: | ||||
|     :return: | ||||
|     """ | ||||
|     msg = '' | ||||
|     if isinstance(ex, DRFAPIException): | ||||
|         # set_rollback() | ||||
|         msg = ex.detail | ||||
|     elif isinstance(ex, exceptions.APIException): | ||||
|         msg = ex.message | ||||
|     elif isinstance(ex, Exception): | ||||
|         logger.error(traceback.format_exc()) | ||||
|         msg = str(ex) | ||||
|     return ErrorResponse(msg=msg) | ||||
| 
 | ||||
| 
 | ||||
| class CustomAPIView(APIView): | ||||
|     """ | ||||
|     继承、增强DRF的APIView | ||||
|     """ | ||||
|     extra_permission_classes = () | ||||
|     # 仅当GET方法时会触发该权限的校验 | ||||
|     GET_permission_classes = () | ||||
| 
 | ||||
|     # 仅当POST方法时会触发该权限的校验 | ||||
|     POST_permission_classes = () | ||||
| 
 | ||||
|     # 仅当DELETE方法时会触发该权限的校验 | ||||
|     DELETE_permission_classes = () | ||||
| 
 | ||||
|     # 仅当PUT方法时会触发该权限的校验 | ||||
|     PUT_permission_classes = () | ||||
| 
 | ||||
|     view_logger_classes = () | ||||
| 
 | ||||
|     def initial(self, request: Request, *args, **kwargs): | ||||
|         super().initial(request, *args, **kwargs) | ||||
|         self.check_extra_permissions(request) | ||||
|         self.check_method_extra_permissions(request) | ||||
| 
 | ||||
|     def get_view_loggers(self, request: Request, *args, **kwargs): | ||||
|         logger_classes = self.view_logger_classes or [] | ||||
|         if not logger_classes: | ||||
|             return [] | ||||
|         view_loggers = [logger_class(view=self, request=request, *args, **kwargs) for logger_class in logger_classes] | ||||
|         return view_loggers | ||||
| 
 | ||||
|     def handle_logging(self, request: Request, *args, **kwargs): | ||||
|         view_loggers = self.get_view_loggers(request, *args, **kwargs) | ||||
|         method = request.method.lower() | ||||
|         for view_logger in view_loggers: | ||||
|             view_logger.handle(request, *args, **kwargs) | ||||
|             logger_fun = getattr(view_logger, f'handle_{method}', None) | ||||
|             if logger_fun and isinstance(logger_fun, (FunctionType, MethodType)): | ||||
|                 logger_fun(request, *args, **kwargs) | ||||
| 
 | ||||
|     def get_extra_permissions(self): | ||||
|         return [permission() for permission in self.extra_permission_classes] | ||||
| 
 | ||||
|     def check_extra_permissions(self, request: Request): | ||||
|         for permission in self.get_extra_permissions(): | ||||
|             if not permission.has_permission(request, self): | ||||
|                 self.permission_denied( | ||||
|                     request, message=getattr(permission, 'message', None) | ||||
|                 ) | ||||
| 
 | ||||
|     def get_method_extra_permissions(self): | ||||
|         _name = self.request.method.upper() | ||||
|         method_extra_permission_classes = getattr(self, f"{_name}_permission_classes", None) | ||||
|         if not method_extra_permission_classes: | ||||
|             return [] | ||||
|         return [permission() for permission in method_extra_permission_classes] | ||||
| 
 | ||||
|     def check_method_extra_permissions(self, request): | ||||
|         for permission in self.get_method_extra_permissions(): | ||||
|             if not permission.has_permission(request, self): | ||||
|                 self.permission_denied( | ||||
|                     request, message=getattr(permission, 'message', None) | ||||
|                 ) | ||||
| 
 | ||||
| 
 | ||||
| class BatchModelApIView(CustomAPIView): | ||||
|     """ | ||||
|     模型批量CRUD通用视图 | ||||
|     """ | ||||
|     model = None | ||||
|     serializer_class = None | ||||
|     POST_serializer_class = None | ||||
|     PUT_serializer_class = None | ||||
|     field_name = 'instanceId' | ||||
|     instanceId_list_param_name = 'instanceIdList' | ||||
|     instance_info_param_name = 'info' | ||||
| 
 | ||||
|     def get_serializer(self, *args, **kwargs): | ||||
|         if not self.request: | ||||
|             return None | ||||
|         serializer_class = getattr(self, f"{self.request.method}_serializer_class", None) or getattr(self, | ||||
|                                                                                                      'serializer_class') | ||||
|         serializer = serializer_class(*args, **kwargs) | ||||
|         if isinstance(serializer, CustomModelSerializer): | ||||
|             serializer.request = self.request | ||||
|         return serializer | ||||
| 
 | ||||
|     def get(self, request: Request = None, *args, **kwargs): | ||||
|         data = self.get_serializer(self.model.objects.filter(**{f'{self.field_name}__in': request.data}), | ||||
|                                    many=True).data | ||||
|         return SuccessResponse(data=data) | ||||
| 
 | ||||
|     def post(self, request: Request = None, *args, **kwargs): | ||||
|         data = [] | ||||
|         for info in request.data: | ||||
|             serializer = self.get_serializer(data=info) | ||||
|             serializer.is_valid(raise_exception=True) | ||||
|             serializer.save() | ||||
|             data.append(serializer.data) | ||||
|         return SuccessResponse(data=data) | ||||
| 
 | ||||
|     def put(self, request: Request = None, *args, **kwargs): | ||||
|         data = [] | ||||
|         instanceId_list = request.data.get(self.instanceId_list_param_name, []) | ||||
|         info = request.data.get(self.instance_info_param_name, {}) | ||||
|         for instanceId in instanceId_list: | ||||
|             serializer = self.get_serializer( | ||||
|                 instance=self.model.objects.get(**{f'{self.field_name}': instanceId}), | ||||
|                 data=info, | ||||
|                 partial=True | ||||
|             ) | ||||
|             serializer.is_valid(raise_exception=True) | ||||
|             serializer.save() | ||||
|         return SuccessResponse(data=instanceId_list) | ||||
| 
 | ||||
|     def delete(self, request: Request = None, *args, **kwargs): | ||||
|         self.model.objects.filter(**{f'{self.field_name}__in': request.data}).delete() | ||||
|         return SuccessResponse(data=request.data) | ||||
| 
 | ||||
| 
 | ||||
| class ModelRelationshipAPIView(CustomAPIView): | ||||
|     """ | ||||
|     模型关联关系通用CRUD视图 | ||||
|     """ | ||||
|     model = None | ||||
|     through_model = None | ||||
|     relationship_model = None | ||||
| 
 | ||||
|     relationship_serializer = None | ||||
|     field_name: str = None | ||||
|     from_field_name: str = 'instanceId' | ||||
|     to_field_name: str = None | ||||
|     relationship_field_values = () | ||||
| 
 | ||||
|     view_logger_classes = [CustomerRelationshipViewLogger, ] | ||||
| 
 | ||||
|     def get_relationship_data(self, instanceId: str): | ||||
|         relationship_model_field_name = self.relationship_field_values[0] | ||||
|         params = {} | ||||
|         params[self.field_name] = instanceId | ||||
|         business_key_dict = self.through_model.objects.filter(**params).values( | ||||
|             *self.relationship_field_values).distinct() | ||||
|         business_key_list = [ele[relationship_model_field_name] for ele in business_key_dict] | ||||
| 
 | ||||
|         params = {} | ||||
|         params[f"{self.to_field_name}__in"] = business_key_list | ||||
|         queryset = self.relationship_model.objects.filter(**params) | ||||
| 
 | ||||
|         data = ModelRelateUtils.model_to_dict(queryset, self.relationship_serializer, default=[]) | ||||
|         if 'creator' in self.relationship_field_values and 'ctime' in self.relationship_field_values: | ||||
|             for _index in range(len(data)): | ||||
|                 ele = data[_index] | ||||
|                 ele['relationship_creator'] = business_key_dict[_index]['creator'] | ||||
|                 ele['relationship_ctime'] = business_key_dict[_index]['ctime'] | ||||
|         return data | ||||
| 
 | ||||
|     def execute_method(self, execute: str, request: Request, instanceId: str, *args, **kwargs): | ||||
|         method = request.method.lower() | ||||
|         fun = None | ||||
|         if execute == 'before': | ||||
|             fun = getattr(self, f'before_{method}', None) | ||||
|         elif execute == 'handle': | ||||
|             fun = getattr(self, f'handle_{method}', None) | ||||
|         elif execute == 'after': | ||||
|             fun = getattr(self, f'after_{method}', None) | ||||
|         if fun and isinstance(fun, (FunctionType, MethodType)): | ||||
|             fun(request, instanceId, *args, **kwargs) | ||||
| 
 | ||||
|     def do_request(self, request: Request, instanceId: str, *args, **kwargs): | ||||
|         self.execute_method('before', request, instanceId, *args, **kwargs) | ||||
|         self.execute_method('handle', request, instanceId, *args, **kwargs) | ||||
|         self.execute_method('after', request, instanceId, *args, **kwargs) | ||||
|         self.handle_logging(request, instanceId=instanceId, *args, **kwargs) | ||||
|         data = self.get_relationship_data(instanceId) | ||||
|         return SuccessResponse(data) | ||||
| 
 | ||||
|     def get(self, request: Request, instanceId: str, *args, **kwargs): | ||||
|         return self.do_request(request, instanceId, *args, **kwargs) | ||||
| 
 | ||||
|     def post(self, request: Request, instanceId: str, *args, **kwargs): | ||||
|         return self.do_request(request, instanceId, *args, **kwargs) | ||||
| 
 | ||||
|     def put(self, request: Request, instanceId: str, *args, **kwargs): | ||||
|         return self.do_request(request, instanceId, *args, **kwargs) | ||||
| 
 | ||||
|     def delete(self, request: Request, instanceId: str, *args, **kwargs): | ||||
|         return self.do_request(request, instanceId, *args, **kwargs) | ||||
| 
 | ||||
| 
 | ||||
| class ModelRelationshipView(ModelRelationshipAPIView): | ||||
|     """ | ||||
|     模型关联关系通用CRUD视图 | ||||
|     """ | ||||
| 
 | ||||
|     def handle_get(self, request: Request, instanceId: str, *args, **kwargs): | ||||
|         data = self.get_relationship_data(instanceId) | ||||
|         return SuccessResponse(data) | ||||
| 
 | ||||
|     def handle_post(self, request: Request, instanceId: str, *args, **kwargs): | ||||
|         relationship_model_field_name = self.relationship_field_values[0] | ||||
|         params = {} | ||||
|         params[f"{self.to_field_name}__in"] = request.data | ||||
|         queryset = self.relationship_model.objects.filter(**params) | ||||
| 
 | ||||
|         exist_list = [getattr(ele, self.to_field_name) for ele in queryset] | ||||
|         bulk_info = [] | ||||
|         for _id in exist_list: | ||||
|             info = {} | ||||
|             info[relationship_model_field_name] = _id | ||||
|             info[self.field_name] = instanceId | ||||
|             info['creator'] = request.user.username | ||||
|             bulk_info.append(self.through_model(**info)) | ||||
|         self.through_model.objects.bulk_create(bulk_info) | ||||
|         data = self.get_relationship_data(instanceId) | ||||
|         return SuccessResponse(data) | ||||
| 
 | ||||
|     def handle_put(self, request: Request, instanceId: str, *args, **kwargs): | ||||
|         relationship_model_field_name = self.relationship_field_values[0] | ||||
| 
 | ||||
|         params1 = {} | ||||
|         params1[f"{self.field_name}"] = instanceId | ||||
|         params2 = {} | ||||
|         params2[f"{relationship_model_field_name}__in"] = request.data | ||||
| 
 | ||||
|         relationships = self.through_model.objects.filter(**params1).exclude(**params2) | ||||
|         relationships.delete() | ||||
| 
 | ||||
|         params = {} | ||||
|         params[f"{self.field_name}"] = instanceId | ||||
| 
 | ||||
|         instanceId_dict = self.through_model.objects.filter(**params).values(*self.relationship_field_values).distinct() | ||||
|         instanceId_list = [ele.get(relationship_model_field_name) for ele in instanceId_dict] | ||||
|         create_list = list(set(request.data).difference(set(instanceId_list))) | ||||
|         for _id in create_list: | ||||
|             info = {} | ||||
|             info[relationship_model_field_name] = _id | ||||
|             info[self.field_name] = instanceId | ||||
|             info['creator'] = request.user.username | ||||
|         data = self.get_relationship_data(instanceId) | ||||
|         return SuccessResponse(data) | ||||
| 
 | ||||
|     def handle_delete(self, request: Request, instanceId: str, *args, **kwargs): | ||||
|         relationship_model_field_name = self.relationship_field_values[0] | ||||
|         params = {} | ||||
|         params[f"{self.field_name}"] = instanceId | ||||
|         params[f"{relationship_model_field_name}__in"] = request.data | ||||
|         self.through_model.objects.filter(**params).delete() | ||||
|         data = self.get_relationship_data(instanceId) | ||||
|         return SuccessResponse(data) | ||||
|  | @ -1,75 +0,0 @@ | |||
| import logging | ||||
| import os | ||||
| 
 | ||||
| from django.core.management.base import BaseCommand | ||||
| from django.db import connection | ||||
| 
 | ||||
| from scripts import getSql | ||||
| 
 | ||||
| logger = logging.getLogger(__name__) | ||||
| 
 | ||||
| 
 | ||||
| class Command(BaseCommand): | ||||
|     """ | ||||
|     项目初始化命令: python manage.py initialization | ||||
|     """ | ||||
| 
 | ||||
|     def customSql(self, sql_list, model_name, table_name): | ||||
|         """ | ||||
|         批量执行sql | ||||
|         :param sql_list: | ||||
|         :param table_name: 表名 | ||||
|         :return: | ||||
|         """ | ||||
|         with connection.cursor() as cursor: | ||||
|             num = 0 | ||||
|             for ele in table_name.split(','): | ||||
|                 cursor.execute("select count(*) from {}".format(ele)) | ||||
|                 result = cursor.fetchone() | ||||
|                 num += result[0] | ||||
|             if num > 0: | ||||
|                 while True: | ||||
|                     inp = input(f'[{model_name}]模型已初始化完成,继续将清空[{table_name}]表中所有数据,是否继续初始化?【 Y/N 】') | ||||
|                     if inp.upper() == 'N': | ||||
|                         return False | ||||
|                     elif inp.upper() == 'Y': | ||||
|                         logger.info(f'正在清空[{table_name}]中数据...') | ||||
|                         cursor.execute("SET foreign_key_checks = 0") | ||||
|                         for ele in table_name.split(','): | ||||
|                             cursor.execute("truncate table {};".format(ele)) | ||||
|                         cursor.execute("SET foreign_key_checks = 1") | ||||
|                         connection.commit() | ||||
|                         logger.info(f'清空[{table_name}]中数据{result[0]}条') | ||||
|                         break | ||||
| 
 | ||||
|             for sql in sql_list: | ||||
|                 cursor.execute(sql) | ||||
|             connection.commit() | ||||
|             return True | ||||
| 
 | ||||
|     def init(self, sql_filename, model_name, table_name): | ||||
|         """ | ||||
|         初始化 | ||||
|         :param sql_filename: sql存放位置 | ||||
|         :param model_name: 模块名 | ||||
|         :param table_name: 表名 | ||||
|         :return: | ||||
|         """ | ||||
|         logger.info(f'正在初始化[{model_name}]中...') | ||||
|         if self.customSql(getSql(sql_filename), model_name, table_name): | ||||
|             logger.info(f'[{model_name}]初始化完成!') | ||||
|         else: | ||||
|             logger.info(f'已取消[{table_name}]初始化') | ||||
| 
 | ||||
|     def handle(self, *args, **options): | ||||
|         self.init(os.path.join('system', 'system_dictdata.sql'), '字典管理', 'system_dictdata') | ||||
|         self.init(os.path.join('system', 'system_dictdetails.sql'), '字典详情', 'system_dictdetails') | ||||
|         self.init(os.path.join('system', 'system_configsettings.sql'), '参数设置', 'system_configsettings') | ||||
|         self.init(os.path.join('permission', 'permission_post.sql'), '岗位管理', 'permission_post') | ||||
|         self.init(os.path.join('permission', 'permission_dept.sql'), '部门管理', 'permission_dept') | ||||
|         self.init(os.path.join('permission', 'permission_menu.sql'), '菜单管理', 'permission_menu') | ||||
|         self.init(os.path.join('permission', 'permission_role.sql'), '角色管理', | ||||
|                   ','.join(['permission_role', 'permission_role_dept', 'permission_role_menu'])) | ||||
|         self.init(os.path.join('permission', 'permission_userprofile.sql'), '用户管理', ','.join( | ||||
|             ['permission_userprofile_groups', 'permission_userprofile', 'permission_userprofile_role', | ||||
|              'permission_userprofile_post'])) | ||||
|  | @ -1,34 +0,0 @@ | |||
| import django_filters | ||||
| 
 | ||||
| from apps.system.models import DictDetails, DictData, ConfigSettings | ||||
| 
 | ||||
| 
 | ||||
| class DictDataFilter(django_filters.rest_framework.FilterSet): | ||||
|     """ | ||||
|     字典管理 简单过滤器 | ||||
|     """ | ||||
| 
 | ||||
|     class Meta: | ||||
|         model = DictData | ||||
|         fields = '__all__' | ||||
| 
 | ||||
| 
 | ||||
| class DictDetailsFilter(django_filters.rest_framework.FilterSet): | ||||
|     """ | ||||
|     字典详情 简单过滤器 | ||||
|     """ | ||||
|     dictType = django_filters.CharFilter(field_name='dict_data__dictType') | ||||
| 
 | ||||
|     class Meta: | ||||
|         model = DictDetails | ||||
|         fields = '__all__' | ||||
| 
 | ||||
| 
 | ||||
| class ConfigSettingsFilter(django_filters.rest_framework.FilterSet): | ||||
|     """ | ||||
|     参数设置 简单过滤器 | ||||
|     """ | ||||
| 
 | ||||
|     class Meta: | ||||
|         model = ConfigSettings | ||||
|         fields = '__all__' | ||||
|  | @ -0,0 +1,31 @@ | |||
| from logging import StreamHandler, getLevelName | ||||
| from logging.handlers import RotatingFileHandler | ||||
| from typing import Optional, IO | ||||
| 
 | ||||
| 
 | ||||
| class MyStreamHandler(StreamHandler): | ||||
| 
 | ||||
|     def __init__(self, stream: Optional[IO[str]] = ...) -> None: | ||||
|         print(222) | ||||
|         super().__init__(stream) | ||||
| 
 | ||||
|     def __repr__(self): | ||||
|         level = getLevelName(self.level) | ||||
|         name = getattr(self.stream, 'name', '') | ||||
|         #  bpo-36015: name can be an int | ||||
|         name = str(name) | ||||
|         if name: | ||||
|             name += ' ' | ||||
|         print(111) | ||||
|         return '<%s %s(%s)>' % (self.__class__.__name__, name, level) | ||||
| class MyRotatingFileHandler(RotatingFileHandler): | ||||
| 
 | ||||
|     def __init__(self, filename: str, mode: str = ..., maxBytes: int = ..., backupCount: int = ..., | ||||
|                  encoding: Optional[str] = ..., delay: bool = ...) -> None: | ||||
|         print(4444) | ||||
|         super().__init__(filename, mode, maxBytes, backupCount, encoding, delay) | ||||
| 
 | ||||
|     def __repr__(self): | ||||
|         level = getLevelName(self.level) | ||||
|         print(22) | ||||
|         return '<%s %s (%s)>' % (self.__class__.__name__, self.baseFilename, level) | ||||
|  | @ -6,7 +6,7 @@ logger = logging.getLogger(__name__) | |||
| 
 | ||||
| 
 | ||||
| class OpDrfConfig(AppConfig): | ||||
|     name = 'op_drf' | ||||
|     name = 'apps.vadmin.op_drf' | ||||
|     verbose_name = "OP DRF" | ||||
| 
 | ||||
|     def ready(self): | ||||
|  | @ -2,7 +2,7 @@ from django.contrib.auth import get_user_model | |||
| from django.db import models | ||||
| from django.db.models import SET_NULL | ||||
| 
 | ||||
| from utils.string_util import uuid_8, uuid_16, uuid_32, uuid_36 | ||||
| from ..utils.string_util import uuid_8, uuid_16, uuid_32, uuid_36 | ||||
| 
 | ||||
| 
 | ||||
| class IdField(models.CharField): | ||||
|  | @ -6,12 +6,11 @@ import logging | |||
| import operator | ||||
| from functools import reduce | ||||
| 
 | ||||
| from django.db.models import Q | ||||
| from django.utils import six | ||||
| from mongoengine.queryset import visitor | ||||
| from rest_framework.filters import BaseFilterBackend, SearchFilter, OrderingFilter | ||||
| 
 | ||||
| from apps.permission.models import Dept | ||||
| from ..permission.models import Dept | ||||
| 
 | ||||
| logger = logging.getLogger(__name__) | ||||
| 
 | ||||
|  | @ -102,45 +101,55 @@ class MongoAdvancedSearchFilter(BaseFilterBackend): | |||
| class DataLevelPermissionsFilter(BaseFilterBackend): | ||||
|     """ | ||||
|     数据 级权限过滤器 | ||||
|     0. 判断过滤的数据是否有创建人 "creator" 字段 | ||||
|     1. 判断用户是否为超级管理员角色 | ||||
|     2. 根据角色的最大权限进行数据过滤(会有多个角色,进行去重取最大权限) | ||||
|     3. 只为仅本人数据权限时只返回过滤本人数据 | ||||
|     4. 自定数据权限 获取部门,根据部门过滤 | ||||
|     0. 获取用户的部门id,没有部门则返回空 | ||||
|     1. 判断过滤的数据是否有创建人所在部门 "creator" 字段,没有则返回全部 | ||||
|     2. 如果用户没有关联角色则返回本部门数据 | ||||
|     3. 根据角色的最大权限进行数据过滤(会有多个角色,进行去重取最大权限) | ||||
|     3.1 判断用户是否为超级管理员角色/如果有1(所有数据) 则返回所有数据 | ||||
| 
 | ||||
|     4. 只为仅本人数据权限时只返回过滤本人数据,并且部门为自己本部门(考虑到用户会变部门,只能看当前用户所在的部门数据) | ||||
|     5. 自定数据权限 获取部门,根据部门过滤 | ||||
|     """ | ||||
|     project_resource_name: str = 'project__tenant__managers' | ||||
| 
 | ||||
|     def filter_queryset(self, request, queryset, view): | ||||
|         # 0. 判断过滤的数据是否有创建人 "creator" 字段 | ||||
|         if not hasattr(queryset.model, 'creator'): | ||||
|         # 0. 获取用户的部门id,没有部门则返回空 | ||||
|         user_dept_id = getattr(request.user, 'dept_id') | ||||
|         if not user_dept_id: | ||||
|             return queryset.none() | ||||
| 
 | ||||
|         # 1. 判断过滤的数据是否有创建人所在部门 "dept_belong_id" 字段 | ||||
|         if not hasattr(queryset.model, 'dept_belong_id'): | ||||
|             return queryset | ||||
|         # 1. 判断用户是否为超级管理员角色 | ||||
| 
 | ||||
|         # 2. 如果用户没有关联角色则返回本部门数据 | ||||
|         if not hasattr(request.user, 'role'): | ||||
|             return queryset.filter(creator=request.user) | ||||
|         role_list = request.user.role.all().values('id', 'admin', 'dataScope') | ||||
|         if True in list(set([ele.get('admin') for ele in role_list])): | ||||
|             return queryset | ||||
|             return queryset.filter(dept_belong_id=user_dept_id) | ||||
| 
 | ||||
|         # 2. 根据角色的最大权限进行数据过滤(会有多个角色,进行去重取最大权限) | ||||
|         dataScope_list = list(set([ele.get('dataScope') for ele in role_list])) | ||||
|         if '1' in dataScope_list:  # 返回所有数据 | ||||
|             return queryset | ||||
|         # 3. 根据所有角色 获取所有权限范围 | ||||
|         role_list = request.user.role.all().values('admin', 'dataScope') | ||||
|         dataScope_list = [] | ||||
|         for ele in role_list: | ||||
|             # 3.1 判断用户是否为超级管理员角色/如果有1(所有数据) 则返回所有数据 | ||||
|             if '1' == ele.get('dataScope') or ele.get('admin') == True: | ||||
|                 return queryset | ||||
|             dataScope_list.append(ele.get('dataScope')) | ||||
|         dataScope_list = list(set(dataScope_list)) | ||||
| 
 | ||||
|         # 3. 只为仅本人数据权限时只返回过滤本人数据 | ||||
|         # 4. 只为仅本人数据权限时只返回过滤本人数据,并且部门为自己本部门(考虑到用户会变部门,只能看当前用户所在的部门数据) | ||||
|         if dataScope_list == ['5']: | ||||
|             return queryset.filter(Q(creator=request.user)) | ||||
|             return queryset.filter(creator=request.user, dept_belong_id=request.user.dept_id) | ||||
| 
 | ||||
|         # 4. 自定数据权限 获取部门,根据部门过滤 | ||||
|         # 5. 自定数据权限 获取部门,根据部门过滤 | ||||
|         dept_list = [] | ||||
|         for ele in dataScope_list: | ||||
|             if ele == '2': | ||||
|                 dept_list.extend(request.user.role.all().values_list('dept__id', flat=True)) | ||||
|             elif ele == '3': | ||||
|                 dept_list.append(request.user.dept.id) | ||||
|                 dept_list.append(user_dept_id) | ||||
|             elif ele == '4': | ||||
|                 dept_list.extend(self.get_dept(request.user.dept.id, Dept.objects.all().values('id', 'parentId'))) | ||||
|                 dept_list.append(request.user.dept.id) | ||||
|         return queryset.filter(Q(creator=request.user) | Q(creator__dept__in=list(set(dept_list)))) | ||||
|                 dept_list.extend(self.get_dept(user_dept_id, Dept.objects.all().values('id', 'parentId'))) | ||||
|                 dept_list.append(user_dept_id) | ||||
|         return queryset.filter(dept_belong_id__in=list(set(dept_list))) | ||||
| 
 | ||||
|     def get_dept(self, id, dept_all_list, dept_list=[]): | ||||
|         """ | ||||
|  | @ -7,8 +7,8 @@ from rest_framework.settings import api_settings | |||
| from . import mixins | ||||
| from .pagination import Pagination, JsonPagination | ||||
| from .response import SuccessResponse | ||||
| from utils.jsonpath_util import get_jsonpath, filter_json, search_json | ||||
| from utils.sort_util import sortList | ||||
| from ..utils.jsonpath_util import get_jsonpath, filter_json, search_json | ||||
| from ..utils.sort_util import sortList | ||||
| from .views import CustomAPIView | ||||
| 
 | ||||
| 
 | ||||
|  | @ -16,11 +16,27 @@ class ViewLogger(object): | |||
|         super().__init__() | ||||
|         self.view = view | ||||
|         self.request = request | ||||
|         self.model = None | ||||
|         self.log_prefix: str = '' | ||||
|         if self.view and hasattr(self.view.get_queryset(), 'model'): | ||||
|             self.model: Model = self.view.get_queryset().model | ||||
|         elif self.view and hasattr(self.view.get_serializer(), 'Meta') and hasattr(self.view.get_serializer().Meta, | ||||
|                                                                                    'model'): | ||||
|             self.model: Model = self.view.get_serializer().Meta.model | ||||
|         if self.model: | ||||
|             request.session['model_name'] = getattr(self.model, '_meta').verbose_name | ||||
| 
 | ||||
|     def handle(self, request: Request, *args, **kwargs): | ||||
|         pass | ||||
| 
 | ||||
|     def logger(self, msg): | ||||
|         """ | ||||
| 
 | ||||
|         :param msg: | ||||
|         :return: logger | ||||
|         """ | ||||
|         self.request.session['request_msg'] = msg | ||||
|         return logger | ||||
| 
 | ||||
| class APIViewLogger(ViewLogger): | ||||
|     """ | ||||
|  | @ -36,7 +52,7 @@ class APIViewLogger(ViewLogger): | |||
|     """ | ||||
| 
 | ||||
|     def __init__(self, view=None, request=None, *args, **kwargs) -> None: | ||||
|         super().__init__() | ||||
|         super().__init__(view, request, *args, **kwargs) | ||||
|         self.view: APIView = view | ||||
|         self.request: Request = request | ||||
|         self.user = request.user | ||||
|  | @ -52,12 +68,7 @@ class ModelViewLogger(APIViewLogger): | |||
|     """ | ||||
| 
 | ||||
|     def __init__(self, view=None, request=None, *args, **kwargs) -> None: | ||||
|         super().__init__(view, request) | ||||
| 
 | ||||
|         if hasattr(self.view.get_queryset(), 'model'): | ||||
|             self.model: Model = self.view.get_queryset().model | ||||
|         elif hasattr(self.view.get_serializer(), 'Meta') and hasattr(self.view.get_serializer().Meta, 'model'): | ||||
|             self.model: Model = self.view.get_serializer().Meta.model | ||||
|         super().__init__(view, request, *args, **kwargs) | ||||
| 
 | ||||
| 
 | ||||
| class RelationshipViewLogger(APIViewLogger): | ||||
|  | @ -103,7 +114,7 @@ class CustomerRelationshipViewLogger(RelationshipViewLogger): | |||
|         model_name = getattr(self.view.model, '_meta').verbose_name | ||||
|         to_field_name = self.view.to_field_name | ||||
|         to_model_name = getattr(self.view.relationship_model, '_meta').verbose_name | ||||
|         logger.info( | ||||
|         self.logger( | ||||
|             f'{self.log_prefix}用户[username={operator}]新增, {model_name}实例[{to_field_name}={self.instanceId}]与{to_model_name}的关联关系') | ||||
| 
 | ||||
|     def handle_put(self, request: Request, *args, **kwargs): | ||||
|  | @ -114,7 +125,7 @@ class CustomerRelationshipViewLogger(RelationshipViewLogger): | |||
|         model_name = getattr(self.view.model, '_meta').verbose_name | ||||
|         to_field_name = self.view.to_field_name | ||||
|         to_model_name = getattr(self.view.relationship_model, '_meta').verbose_name | ||||
|         logger.info( | ||||
|         self.logger( | ||||
|             f'{self.log_prefix}用户[username={operator}]重置, {model_name}实例[{to_field_name}={self.instanceId}]与{to_model_name}的关联关系') | ||||
| 
 | ||||
|     def handle_delete(self, request: Request, *args, **kwargs): | ||||
|  | @ -125,7 +136,7 @@ class CustomerRelationshipViewLogger(RelationshipViewLogger): | |||
|         model_name = getattr(self.view.model, '_meta').verbose_name | ||||
|         to_field_name = self.view.to_field_name | ||||
|         to_model_name = getattr(self.view.relationship_model, '_meta').verbose_name | ||||
|         logger.info( | ||||
|         self.logger( | ||||
|             f'{self.log_prefix}用户[username={operator}]移除, {model_name}实例[{to_field_name}={self.instanceId}]与{to_model_name}的关联关系') | ||||
| 
 | ||||
| 
 | ||||
|  | @ -144,7 +155,7 @@ class CustomerModelViewLogger(ModelViewLogger): | |||
|         pass | ||||
|         operator = self.user.username | ||||
|         model_name = getattr(self.model, '_meta').verbose_name | ||||
|         logger.info(f'{self.log_prefix}用户[username={operator}]检索{model_name}:[{instance}]') | ||||
|         self.logger(f'{self.log_prefix}用户[username={operator}]检索{model_name}:[{instance}]') | ||||
| 
 | ||||
|     def handle_list(self, request: Request, *args, **kwargs): | ||||
|         """ | ||||
|  | @ -153,7 +164,7 @@ class CustomerModelViewLogger(ModelViewLogger): | |||
|         pass | ||||
|         operator = self.user.username | ||||
|         model_name = getattr(self.model, '_meta').verbose_name | ||||
|         logger.info(f'{self.log_prefix}用户[username={operator}]查询{model_name}') | ||||
|         self.logger(f'{self.log_prefix}用户[username={operator}]查询{model_name}') | ||||
| 
 | ||||
|     def handle_create(self, request: Request, instance: Model = None, *args, **kwargs): | ||||
|         """ | ||||
|  | @ -162,7 +173,7 @@ class CustomerModelViewLogger(ModelViewLogger): | |||
|         pass | ||||
|         operator = self.user.username | ||||
|         model_name = getattr(self.model, '_meta').verbose_name | ||||
|         logger.info(f'{self.log_prefix}用户[username={operator}]创建{model_name}:[{instance}]') | ||||
|         self.logger(f'{self.log_prefix}用户[username={operator}]创建{model_name}:[{instance}]') | ||||
| 
 | ||||
|     def handle_update(self, request: Request, instance: Model = None, *args, **kwargs): | ||||
|         """ | ||||
|  | @ -171,7 +182,7 @@ class CustomerModelViewLogger(ModelViewLogger): | |||
|         pass | ||||
|         operator = self.user.username | ||||
|         model_name = getattr(self.model, '_meta').verbose_name | ||||
|         logger.info(f'{self.log_prefix}用户[username={operator}]更新{model_name}:[{instance}]') | ||||
|         self.logger(f'{self.log_prefix}用户[username={operator}]更新{model_name}:[{instance}]') | ||||
| 
 | ||||
|     def handle_partial_update(self, request: Request, instance: Model = None, *args, **kwargs): | ||||
|         """ | ||||
|  | @ -180,7 +191,7 @@ class CustomerModelViewLogger(ModelViewLogger): | |||
|         pass | ||||
|         operator = self.user.username | ||||
|         model_name = getattr(self.model, '_meta').verbose_name | ||||
|         logger.info(f'{self.log_prefix}用户[username={operator}]部分更新{model_name}:[{instance}]') | ||||
|         self.logger(f'{self.log_prefix}用户[username={operator}]部分更新{model_name}:[{instance}]') | ||||
| 
 | ||||
|     def handle_destroy(self, request: Request, instance: Model = None, *args, **kwargs): | ||||
|         """ | ||||
|  | @ -189,4 +200,13 @@ class CustomerModelViewLogger(ModelViewLogger): | |||
|         pass | ||||
|         operator = self.user.username | ||||
|         model_name = getattr(self.model, '_meta').verbose_name | ||||
|         logger.info(f'{self.log_prefix}用户[username={operator}]删除{model_name}:[{instance}]') | ||||
|         self.logger(f'{self.log_prefix}用户[username={operator}]删除{model_name}:[{instance}]') | ||||
| 
 | ||||
|     def handle_other(self, request: Request, instance: Model = None, *args, **kwargs): | ||||
|         """ | ||||
|         仅 其他 请求才会触发此方法 | ||||
|         """ | ||||
|         pass | ||||
|         operator = self.user.username | ||||
|         model_name = getattr(self.model, '_meta').verbose_name | ||||
|         self.logger(f'{self.log_prefix}用户[username={operator}]其他请求{model_name}:[{instance}]') | ||||
|  | @ -0,0 +1,79 @@ | |||
| """ | ||||
| django中间件 | ||||
| """ | ||||
| 
 | ||||
| from django.conf import settings | ||||
| from django.contrib.auth.models import AnonymousUser | ||||
| from django.utils.deprecation import MiddlewareMixin | ||||
| 
 | ||||
| from apps.vadmin.system.models import OperationLog | ||||
| from ..utils.request_util import get_request_ip, get_request_data, get_request_path, get_browser, get_os, \ | ||||
|     get_login_location | ||||
| 
 | ||||
| 
 | ||||
| class ApiLoggingMiddleware(MiddlewareMixin): | ||||
|     """ | ||||
|     用于记录API访问日志中间件 | ||||
|     """ | ||||
| 
 | ||||
|     def __init__(self, get_response=None): | ||||
|         super().__init__(get_response) | ||||
|         self.enable = getattr(settings, 'API_LOG_ENABLE', None) or False | ||||
|         self.methods = getattr(settings, 'API_LOG_METHODS', None) or set() | ||||
| 
 | ||||
|     @classmethod | ||||
|     def __handle_request(cls, request): | ||||
|         request.request_ip = get_request_ip(request) | ||||
|         request.request_data = get_request_data(request) | ||||
|         request.request_path = get_request_path(request) | ||||
| 
 | ||||
|     @classmethod | ||||
|     def __handle_response(cls, request, response): | ||||
|         # request_data,request_ip由PermissionInterfaceMiddleware中间件中添加的属性 | ||||
|         body = getattr(request, 'request_data', {}) | ||||
|         # 请求含有password则用*替换掉(暂时先用于所有接口的password请求参数) | ||||
|         if isinstance(body, dict) and body.get('password', ''): | ||||
|             body['password'] = '*' * len(body['password']) | ||||
|         if not hasattr(response, 'data') or not isinstance(response.data, dict): | ||||
|             response.data = {} | ||||
|         info = { | ||||
|             'request_ip': getattr(request, 'request_ip', 'unknown'), | ||||
|             'creator': request.user, | ||||
|             'dept_belong_id': getattr(request.user, 'dept_id', None), | ||||
|             'request_method': request.method, | ||||
|             'request_path': request.request_path, | ||||
|             'request_body': body, | ||||
|             'response_code': response.data.get('code'), | ||||
|             'request_location': get_login_location(request), | ||||
|             'request_os': get_os(request), | ||||
|             'request_browser': get_browser(request), | ||||
|             'request_msg': request.session.get('request_msg'), | ||||
|             'status': True if response.data.get('code') in [200, 204] else False, | ||||
|             'json_result': {"code": response.data.get('code'), "msg": response.data.get('msg')}, | ||||
|             'request_modular': request.session.get('model_name'), | ||||
|         } | ||||
|         if isinstance(request.user, AnonymousUser): | ||||
|             info['creator'] = None | ||||
|         log = OperationLog(**info) | ||||
|         log.save() | ||||
| 
 | ||||
|     def process_request(self, request): | ||||
|         self.__handle_request(request) | ||||
| 
 | ||||
|     def process_response(self, request, response): | ||||
|         """ | ||||
|         主要请求处理完之后记录 | ||||
|         :param request: | ||||
|         :param response: | ||||
|         :return: | ||||
|         """ | ||||
|         if self.enable: | ||||
|             if self.methods == 'ALL' or request.method in self.methods: | ||||
|                 self.__handle_response(request, response) | ||||
|         return response | ||||
| 
 | ||||
| 
 | ||||
| class PermissionModeMiddleware(MiddlewareMixin): | ||||
|     """ | ||||
|     权限模式拦截判断 | ||||
|     """ | ||||
|  | @ -1,3 +1,4 @@ | |||
| from django.db import transaction | ||||
| from rest_framework import mixins | ||||
| from rest_framework import serializers | ||||
| from rest_framework import status | ||||
|  | @ -5,6 +6,8 @@ from rest_framework.relations import ManyRelatedField, RelatedField, PrimaryKeyR | |||
| from rest_framework.request import Request | ||||
| 
 | ||||
| from .response import SuccessResponse | ||||
| from ..utils.export_excel import excel_to_data, export_excel_save_model | ||||
| from ..utils.request_util import get_verbose_name | ||||
| 
 | ||||
| 
 | ||||
| class CreateModelMixin(mixins.CreateModelMixin): | ||||
|  | @ -33,10 +36,10 @@ class ListModelMixin(mixins.ListModelMixin): | |||
|     list_serializer_class = None | ||||
| 
 | ||||
|     def list(self, request: Request, *args, **kwargs): | ||||
|         queryset = self.filter_queryset(self.get_queryset()) | ||||
|         page = self.paginate_queryset(queryset) | ||||
|         if hasattr(self, 'handle_logging'): | ||||
|             self.handle_logging(request, *args, **kwargs) | ||||
|         queryset = self.filter_queryset(self.get_queryset()) | ||||
|         page = self.paginate_queryset(queryset) | ||||
|         if page is not None: | ||||
|             if getattr(self, 'values_queryset', None): | ||||
|                 return self.get_paginated_response(page) | ||||
|  | @ -91,11 +94,25 @@ class DestroyModelMixin(mixins.DestroyModelMixin): | |||
|     """ | ||||
|     destroy_serializer_class = None | ||||
| 
 | ||||
|     def get_object_list(self): | ||||
|         queryset = self.filter_queryset(self.get_queryset()) | ||||
|         lookup_url_kwarg = self.lookup_url_kwarg or self.lookup_field | ||||
|         assert lookup_url_kwarg in self.kwargs, ( | ||||
|                 'Expected view %s to be called with a URL keyword argument ' | ||||
|                 'named "%s". Fix your URL conf, or set the `.lookup_field` ' | ||||
|                 'attribute on the view correctly.' % | ||||
|                 (self.__class__.__name__, lookup_url_kwarg) | ||||
|         ) | ||||
|         filter_kwargs = {f"{self.lookup_field}__in": self.kwargs[lookup_url_kwarg].split(',')} | ||||
|         obj = queryset.filter(**filter_kwargs) | ||||
|         self.check_object_permissions(self.request, obj) | ||||
|         return obj | ||||
| 
 | ||||
|     def destroy(self, request: Request, *args, **kwargs): | ||||
|         instance = self.get_object() | ||||
|         self.perform_destroy(instance) | ||||
|         instance = self.get_object_list() | ||||
|         if hasattr(self, 'handle_logging'): | ||||
|             self.handle_logging(request, instance=instance, *args, **kwargs) | ||||
|         self.perform_destroy(instance) | ||||
|         return SuccessResponse(status=status.HTTP_204_NO_CONTENT) | ||||
| 
 | ||||
|     def perform_destroy(self, instance): | ||||
|  | @ -271,3 +288,75 @@ class TableSerializerMixin: | |||
|                     info['type'] = 'select' | ||||
|             column.append(info) | ||||
|         return column | ||||
| 
 | ||||
| 
 | ||||
| class ImportSerializerMixin: | ||||
|     """ | ||||
|     自定义导出模板、导入功能 | ||||
|     """ | ||||
|     # 导入字段 | ||||
|     import_field_data = {} | ||||
|     # 导入序列化器 | ||||
|     import_serializer_class = None | ||||
| 
 | ||||
|     @transaction.atomic  # Django 事物 | ||||
|     def importTemplate(self, request: Request, *args, **kwargs): | ||||
|         """ | ||||
|         用户导人模板 | ||||
|         :param request: | ||||
|         :param args: | ||||
|         :param kwargs: | ||||
|         :return: | ||||
|         """ | ||||
|         assert self.import_field_data, ( | ||||
|                 "'%s' 请配置对应的导出模板字段。" | ||||
|                 % self.__class__.__name__ | ||||
|         ) | ||||
|         # 导出模板 | ||||
|         if request.method == 'GET': | ||||
|             # 示例数据 | ||||
|             return SuccessResponse( | ||||
|                 export_excel_save_model(request, self.import_field_data.values(), [], '导入用户数据模板.xls')) | ||||
|         updateSupport = request.data.get('updateSupport') | ||||
|         # 从excel中组织对应的数据结构,然后使用序列化器保存 | ||||
|         data = excel_to_data(request.data.get('file_url'), self.import_field_data) | ||||
|         unique_list = [ele.attname for ele in self.get_queryset().model._meta.get_fields() if | ||||
|                        hasattr(ele, 'unique') and ele.unique == True] | ||||
|         for ele in data: | ||||
|             # 获取 unique 字段 | ||||
|             filter_dic = {i: ele.get(i) for i in list(set(self.import_field_data.keys()) & set(unique_list))} | ||||
|             instance = self.get_queryset().filter(**filter_dic).first() | ||||
|             if instance and not updateSupport: | ||||
|                 continue | ||||
|             if not filter_dic: | ||||
|                 instance = None | ||||
|             serializer = self.import_serializer_class(instance, data=ele) | ||||
|             serializer.is_valid(raise_exception=True) | ||||
|             serializer.save() | ||||
|         return SuccessResponse(msg=f"导入成功!") | ||||
| 
 | ||||
| 
 | ||||
| class ExportSerializerMixin: | ||||
|     """ | ||||
|     自定义导出功能 | ||||
|     """ | ||||
|     # 导出字段 | ||||
|     export_field_data = [] | ||||
|     # 导出序列化器 | ||||
|     export_serializer_class = None | ||||
| 
 | ||||
|     def export(self, request: Request, *args, **kwargs): | ||||
|         """ | ||||
|         导出功能 | ||||
|         :param request: | ||||
|         :param args: | ||||
|         :param kwargs: | ||||
|         :return: | ||||
|         """ | ||||
|         assert self.export_field_data, ( | ||||
|                 "'%s' 请配置对应的导出模板字段。" | ||||
|                 % self.__class__.__name__ | ||||
|         ) | ||||
|         data = self.export_serializer_class(self.get_queryset(), many=True).data | ||||
|         return SuccessResponse(export_excel_save_model(request, self.export_field_data, data, | ||||
|                                                        f'导出{get_verbose_name(self.get_queryset())}.xls')) | ||||
|  | @ -27,6 +27,7 @@ class CoreModel(models.Model): | |||
|     creator = models.ForeignKey(to='permission.UserProfile', related_query_name='creator_query', null=True, | ||||
|                                 verbose_name='创建者', on_delete=SET_NULL, db_constraint=False)  # 创建者 | ||||
|     modifier = ModifierCharField()  # 修改者 | ||||
|     dept_belong_id = models.CharField(max_length=64, verbose_name="数据归属部门", null=True, blank=True) | ||||
|     update_datetime = UpdateDateTimeField()  # 修改时间 | ||||
|     create_datetime = CreateDateTimeField()  # 创建时间 | ||||
| 
 | ||||
|  | @ -15,6 +15,8 @@ class CustomModelSerializer(ModelSerializer): | |||
|     modifier_field_name = 'modifier' | ||||
|     # 创建人的审计字段名称, 默认creator, 继承使用时可自定义覆盖 | ||||
|     creator_field_name = 'creator' | ||||
|     # 数据所属部门字段 | ||||
|     dept_belong_id_field_name = 'dept_belong_id' | ||||
|     # 添加默认时间返回格式 | ||||
|     create_datetime = serializers.DateTimeField(format="%Y-%m-%d %H:%M:%S", required=False, read_only=True) | ||||
|     update_datetime = serializers.DateTimeField(format="%Y-%m-%d %H:%M:%S", required=False, read_only=True) | ||||
|  | @ -33,6 +35,8 @@ class CustomModelSerializer(ModelSerializer): | |||
|                 validated_data[self.modifier_field_name] = username | ||||
|             if self.creator_field_name in self.fields.fields: | ||||
|                 validated_data[self.creator_field_name] = self.request.user | ||||
|             if self.dept_belong_id_field_name in self.fields.fields: | ||||
|                 validated_data[self.dept_belong_id_field_name] = getattr(self.request.user,'dept_id',None) | ||||
|         return super().create(validated_data) | ||||
| 
 | ||||
|     def update(self, instance, validated_data): | ||||
|  | @ -0,0 +1,101 @@ | |||
| import logging | ||||
| import traceback | ||||
| from types import FunctionType, MethodType | ||||
| 
 | ||||
| from rest_framework.exceptions import APIException as DRFAPIException | ||||
| from rest_framework.request import Request | ||||
| from rest_framework.views import APIView | ||||
| 
 | ||||
| from ..utils import exceptions | ||||
| from ..utils.model_util import ModelRelateUtils | ||||
| from .logging.view_logger import CustomerRelationshipViewLogger | ||||
| from .response import SuccessResponse, ErrorResponse | ||||
| from .serializers import CustomModelSerializer | ||||
| 
 | ||||
| logger = logging.getLogger(__name__) | ||||
| 
 | ||||
| 
 | ||||
| def op_exception_handler(ex, context): | ||||
|     """ | ||||
|     统一异常拦截处理 | ||||
|     目的:(1)取消所有的500异常响应,统一响应为标准错误返回 | ||||
|         (2)准确显示错误信息 | ||||
|     :param ex: | ||||
|     :param context: | ||||
|     :return: | ||||
|     """ | ||||
|     msg = '' | ||||
|     if isinstance(ex, DRFAPIException): | ||||
|         # set_rollback() | ||||
|         msg = ex.detail | ||||
|     elif isinstance(ex, exceptions.APIException): | ||||
|         msg = ex.message | ||||
|     elif isinstance(ex, Exception): | ||||
|         logger.error(traceback.format_exc()) | ||||
|         msg = str(ex) | ||||
|     return ErrorResponse(msg=msg) | ||||
| 
 | ||||
| 
 | ||||
| class CustomAPIView(APIView): | ||||
|     """ | ||||
|     继承、增强DRF的APIView | ||||
|     """ | ||||
|     extra_permission_classes = () | ||||
|     # 仅当GET方法时会触发该权限的校验 | ||||
|     GET_permission_classes = () | ||||
| 
 | ||||
|     # 仅当POST方法时会触发该权限的校验 | ||||
|     POST_permission_classes = () | ||||
| 
 | ||||
|     # 仅当DELETE方法时会触发该权限的校验 | ||||
|     DELETE_permission_classes = () | ||||
| 
 | ||||
|     # 仅当PUT方法时会触发该权限的校验 | ||||
|     PUT_permission_classes = () | ||||
| 
 | ||||
|     view_logger_classes = () | ||||
| 
 | ||||
|     def initial(self, request: Request, *args, **kwargs): | ||||
|         super().initial(request, *args, **kwargs) | ||||
|         self.check_extra_permissions(request) | ||||
|         self.check_method_extra_permissions(request) | ||||
| 
 | ||||
|     def get_view_loggers(self, request: Request, *args, **kwargs): | ||||
|         logger_classes = self.view_logger_classes or [] | ||||
|         if not logger_classes: | ||||
|             return [] | ||||
|         view_loggers = [logger_class(view=self, request=request, *args, **kwargs) for logger_class in logger_classes] | ||||
|         return view_loggers | ||||
| 
 | ||||
|     def handle_logging(self, request: Request, *args, **kwargs): | ||||
|         view_loggers = self.get_view_loggers(request, *args, **kwargs) | ||||
|         method = request.method.lower() | ||||
|         for view_logger in view_loggers: | ||||
|             view_logger.handle(request, *args, **kwargs) | ||||
|             logger_fun = getattr(view_logger, f'handle_{method}', f'handle_other') | ||||
|             if logger_fun and isinstance(logger_fun, (FunctionType, MethodType)): | ||||
|                 logger_fun(request, *args, **kwargs) | ||||
| 
 | ||||
|     def get_extra_permissions(self): | ||||
|         return [permission() for permission in self.extra_permission_classes] | ||||
| 
 | ||||
|     def check_extra_permissions(self, request: Request): | ||||
|         for permission in self.get_extra_permissions(): | ||||
|             if not permission.has_permission(request, self): | ||||
|                 self.permission_denied( | ||||
|                     request, message=getattr(permission, 'message', None) | ||||
|                 ) | ||||
| 
 | ||||
|     def get_method_extra_permissions(self): | ||||
|         _name = self.request.method.upper() | ||||
|         method_extra_permission_classes = getattr(self, f"{_name}_permission_classes", None) | ||||
|         if not method_extra_permission_classes: | ||||
|             return [] | ||||
|         return [permission() for permission in method_extra_permission_classes] | ||||
| 
 | ||||
|     def check_method_extra_permissions(self, request): | ||||
|         for permission in self.get_method_extra_permissions(): | ||||
|             if not permission.has_permission(request, self): | ||||
|                 self.permission_denied( | ||||
|                     request, message=getattr(permission, 'message', None) | ||||
|                 ) | ||||
|  | @ -11,7 +11,7 @@ from rest_framework.request import Request | |||
| from rest_framework.settings import api_settings | ||||
| from rest_framework.viewsets import ViewSetMixin | ||||
| 
 | ||||
| from utils.exceptions import APIException | ||||
| from ..utils.exceptions import APIException | ||||
| from . import mixins | ||||
| from .filters import MongoSearchFilter, MongoOrderingFilter, AdvancedSearchFilter, MongoAdvancedSearchFilter | ||||
| from .generics import GenericAPIView | ||||
|  | @ -201,7 +201,9 @@ class MongoModelViewSet(mixins.CreateModelMixin, | |||
|     pass | ||||
| 
 | ||||
| 
 | ||||
| class CustomModelViewSet(ModelViewSet, mixins.TableSerializerMixin): | ||||
| class CustomModelViewSet(ModelViewSet, mixins.TableSerializerMixin, | ||||
|                          mixins.ImportSerializerMixin, | ||||
|                          mixins.ExportSerializerMixin): | ||||
|     """ | ||||
|     自定义的ModelViewSet: | ||||
|     (1)默认分页器就为统一分页器op_drf.pagination.Pagination | ||||
|  | @ -2,5 +2,5 @@ from django.apps import AppConfig | |||
| 
 | ||||
| 
 | ||||
| class PermissionConfig(AppConfig): | ||||
|     name = 'system' | ||||
|     name = 'apps.vadmin.permission' | ||||
|     verbose_name = "权限管理" | ||||
|  | @ -1,12 +1,13 @@ | |||
| import django_filters | ||||
| 
 | ||||
| from apps.permission.models import Menu, Dept, Post, Role, UserProfile | ||||
| from ..permission.models import Menu, Dept, Post, Role, UserProfile | ||||
| 
 | ||||
| 
 | ||||
| class MenuFilter(django_filters.rest_framework.FilterSet): | ||||
|     """ | ||||
|     菜单管理 简单序过滤器 | ||||
|     """ | ||||
|     name = django_filters.CharFilter(lookup_expr='icontains') | ||||
| 
 | ||||
|     class Meta: | ||||
|         model = Menu | ||||
|  | @ -17,6 +18,7 @@ class DeptFilter(django_filters.rest_framework.FilterSet): | |||
|     """ | ||||
|     部门管理 简单序过滤器 | ||||
|     """ | ||||
|     deptName = django_filters.CharFilter(lookup_expr='icontains') | ||||
| 
 | ||||
|     class Meta: | ||||
|         model = Dept | ||||
|  | @ -27,6 +29,7 @@ class PostFilter(django_filters.rest_framework.FilterSet): | |||
|     """ | ||||
|     岗位管理 简单序过滤器 | ||||
|     """ | ||||
|     postName = django_filters.CharFilter(lookup_expr='icontains') | ||||
| 
 | ||||
|     class Meta: | ||||
|         model = Post | ||||
|  | @ -37,6 +40,7 @@ class RoleFilter(django_filters.rest_framework.FilterSet): | |||
|     """ | ||||
|     角色管理 简单序过滤器 | ||||
|     """ | ||||
|     roleName = django_filters.CharFilter(lookup_expr='icontains') | ||||
| 
 | ||||
|     class Meta: | ||||
|         model = Role | ||||
|  | @ -47,7 +51,10 @@ class UserProfileFilter(django_filters.rest_framework.FilterSet): | |||
|     """ | ||||
|     用户管理 简单序过滤器 | ||||
|     """ | ||||
|     username = django_filters.CharFilter(lookup_expr='icontains') | ||||
|     mobile = django_filters.CharFilter(lookup_expr='icontains') | ||||
|     deptId = django_filters.CharFilter(field_name='dept__id') | ||||
| 
 | ||||
|     class Meta: | ||||
|         model = UserProfile | ||||
|         exclude = ('secret', 'password',) | ||||
|  | @ -0,0 +1,102 @@ | |||
| import logging | ||||
| import os | ||||
| 
 | ||||
| from django.core.management.base import BaseCommand | ||||
| from django.db import connection | ||||
| 
 | ||||
| from ....scripts import getSql | ||||
| 
 | ||||
| logger = logging.getLogger(__name__) | ||||
| 
 | ||||
| 
 | ||||
| class Command(BaseCommand): | ||||
|     """ | ||||
|     项目初始化命令: python manage.py initialization | ||||
|     """ | ||||
| 
 | ||||
|     def customSql(self, sql_list, model_name, table_name, is_yes): | ||||
|         """ | ||||
|         批量执行sql | ||||
|         :param sql_list: | ||||
|         :param table_name: 表名 | ||||
|         :return: | ||||
|         """ | ||||
|         with connection.cursor() as cursor: | ||||
|             num = 0 | ||||
|             for ele in table_name.split(','): | ||||
|                 cursor.execute("select count(*) from {}".format(ele)) | ||||
|                 result = cursor.fetchone() | ||||
|                 num += result[0] | ||||
|             if num > 0: | ||||
|                 while True: | ||||
|                     if is_yes is None: | ||||
|                         inp = input(f'[{model_name}]模型已初始化完成,继续将清空[{table_name}]表中所有数据,是否继续初始化?【 Y/N 】') | ||||
|                     else: | ||||
|                         inp = 'Y' if is_yes == True else 'N' | ||||
|                     if inp.upper() == 'N': | ||||
|                         return False | ||||
|                     elif inp.upper() == 'Y': | ||||
|                         logger.info(f'正在清空[{table_name}]中数据...') | ||||
|                         cursor.execute("SET foreign_key_checks = 0") | ||||
|                         for ele in table_name.split(','): | ||||
|                             cursor.execute("truncate table {};".format(ele)) | ||||
|                         cursor.execute("SET foreign_key_checks = 1") | ||||
|                         connection.commit() | ||||
|                         logger.info(f'清空[{table_name}]中数据{result[0]}条') | ||||
|                         break | ||||
| 
 | ||||
|             for sql in sql_list: | ||||
|                 try: | ||||
|                     cursor.execute(sql) | ||||
|                 except Exception as e: | ||||
|                     print(e) | ||||
|             connection.commit() | ||||
|             return True | ||||
| 
 | ||||
|     def init(self, sql_filename, model_name, table_name, is_yes): | ||||
|         """ | ||||
|         初始化 | ||||
|         :param sql_filename: sql存放位置 | ||||
|         :param model_name: 模块名 | ||||
|         :param table_name: 表名 | ||||
|         :return: | ||||
|         """ | ||||
|         logger.info(f'正在初始化[{model_name}]中...') | ||||
|         if self.customSql(getSql(sql_filename), model_name, table_name, is_yes): | ||||
|             logger.info(f'[{model_name}]初始化完成!') | ||||
|         else: | ||||
|             logger.info(f'已取消[{table_name}]初始化') | ||||
| 
 | ||||
|     def add_arguments(self, parser): | ||||
|         parser.add_argument('init_name', nargs='*', type=str, ) | ||||
|         parser.add_argument('-y', nargs='*') | ||||
|         parser.add_argument('-Y', nargs='*') | ||||
|         parser.add_argument('-n', nargs='*') | ||||
|         parser.add_argument('-N', nargs='*') | ||||
| 
 | ||||
|     def handle(self, *args, **options): | ||||
|         init_dict = { | ||||
|             'system_dictdata': [os.path.join('system', 'system_dictdata.sql'), '字典管理', 'system_dictdata'], | ||||
|             'system_dictdetails': [os.path.join('system', 'system_dictdetails.sql'), '字典详情', 'system_dictdetails'], | ||||
|             'system_configsettings': [os.path.join('system', 'system_configsettings.sql'), '参数设置', | ||||
|                                       'system_configsettings'], | ||||
|             'permission_post': [os.path.join('permission', 'permission_post.sql'), '岗位管理', 'permission_post'], | ||||
|             'permission_dept': [os.path.join('permission', 'permission_dept.sql'), '部门管理', 'permission_dept'], | ||||
|             'permission_menu': [os.path.join('permission', 'permission_menu.sql'), '菜单管理', 'permission_menu'], | ||||
|             'permission_role': [os.path.join('permission', 'permission_role.sql'), '角色管理', | ||||
|                                 ','.join(['permission_role', 'permission_role_dept', 'permission_role_menu'])], | ||||
|             'permission_userprofile': [os.path.join('permission', 'permission_userprofile.sql'), '用户管理', ','.join( | ||||
|                 ['permission_userprofile_groups', 'permission_userprofile', 'permission_userprofile_role', | ||||
|                  'permission_userprofile_post'])] | ||||
|         } | ||||
|         init_name = options.get('init_name') | ||||
|         is_yes = None | ||||
|         if isinstance(options.get('y'), list) or isinstance(options.get('Y'), list): | ||||
|             is_yes = True | ||||
|         if isinstance(options.get('n'), list) or isinstance(options.get('N'), list): | ||||
|             is_yes = False | ||||
|         if init_name: | ||||
|             [self.init(*init_dict[ele], is_yes=is_yes) for ele in init_name if ele in init_dict] | ||||
|         else: | ||||
|             for ele in init_dict.values(): | ||||
|                 self.init(*ele, is_yes=is_yes) | ||||
|  | @ -1,7 +1,7 @@ | |||
| from django.db.models import CASCADE | ||||
| from django.db.models import CharField, IntegerField, ForeignKey | ||||
| 
 | ||||
| from apps.op_drf.models import CoreModel | ||||
| from ...op_drf.models import CoreModel | ||||
| 
 | ||||
| 
 | ||||
| class Dept(CoreModel): | ||||
|  | @ -1,6 +1,6 @@ | |||
| from django.db.models import IntegerField, ForeignKey, CharField, CASCADE | ||||
| 
 | ||||
| from apps.op_drf.models import CoreModel | ||||
| from ...op_drf.models import CoreModel | ||||
| 
 | ||||
| 
 | ||||
| class Menu(CoreModel): | ||||
|  | @ -1,6 +1,6 @@ | |||
| from django.db.models import IntegerField, BooleanField, CharField, TextField | ||||
| 
 | ||||
| from apps.op_drf.models import CoreModel | ||||
| from ...op_drf.models import CoreModel | ||||
| 
 | ||||
| 
 | ||||
| class Post(CoreModel): | ||||
|  | @ -1,6 +1,6 @@ | |||
| from django.db.models import IntegerField, BooleanField, CharField, TextField, ManyToManyField | ||||
| 
 | ||||
| from apps.op_drf.models import CoreModel | ||||
| from ...op_drf.models import CoreModel | ||||
| 
 | ||||
| 
 | ||||
| class Role(CoreModel): | ||||
|  | @ -3,7 +3,7 @@ from uuid import uuid4 | |||
| from django.contrib.auth.models import UserManager, AbstractUser | ||||
| from django.db.models import IntegerField, ForeignKey, CharField, TextField, ManyToManyField, CASCADE | ||||
| 
 | ||||
| from apps.op_drf.fields import CreateDateTimeField, UpdateDateTimeField | ||||
| from ...op_drf.fields import CreateDateTimeField, UpdateDateTimeField | ||||
| 
 | ||||
| 
 | ||||
| class UserProfile(AbstractUser): | ||||
|  | @ -24,6 +24,7 @@ class UserProfile(AbstractUser): | |||
|     post = ManyToManyField(to='Post', verbose_name='关联岗位', db_constraint=False) | ||||
|     role = ManyToManyField(to='Role', verbose_name='关联角色', db_constraint=False) | ||||
|     dept = ForeignKey(to='Dept', verbose_name='归属部门', on_delete=CASCADE, db_constraint=False, null=True, blank=True) | ||||
|     dept_belong_id = CharField(max_length=64, verbose_name="数据归属部门", null=True, blank=True) | ||||
|     create_datetime = CreateDateTimeField() | ||||
|     update_datetime = UpdateDateTimeField() | ||||
| 
 | ||||
|  | @ -1,8 +1,10 @@ | |||
| from rest_framework import serializers | ||||
| from rest_framework.fields import empty | ||||
| from rest_framework.validators import UniqueValidator | ||||
| 
 | ||||
| from apps.op_drf.serializers import CustomModelSerializer | ||||
| from apps.permission.models import Menu, Dept, Post, Role, UserProfile | ||||
| from ..op_drf.serializers import CustomModelSerializer | ||||
| from ..permission.models import Menu, Dept, Post, Role, UserProfile | ||||
| from ..system.models import MessagePush | ||||
| 
 | ||||
| 
 | ||||
| # ================================================= # | ||||
|  | @ -212,7 +214,7 @@ class UserProfileSerializer(CustomModelSerializer): | |||
|     admin = serializers.SerializerMethodField(read_only=True) | ||||
|     deptId = serializers.IntegerField(source='dept.id', read_only=True) | ||||
|     # 未读通知数量 | ||||
|     # unread_msg_count = serializers.SerializerMethodField(read_only=True) | ||||
|     unread_msg_count = serializers.SerializerMethodField(read_only=True) | ||||
| 
 | ||||
|     def get_admin(self, obj: UserProfile): | ||||
|         role_list = obj.role.all().values_list('admin', flat=True) | ||||
|  | @ -220,12 +222,8 @@ class UserProfileSerializer(CustomModelSerializer): | |||
|             return True | ||||
|         return False | ||||
| 
 | ||||
|     # def get_unread_msg_count(self, obj: UserProfile): | ||||
|     #     UserProfile.objects.all() | ||||
|     #     role_list = obj.role.all().values_list('admin', flat=True) | ||||
|     #     if True in list(set(role_list)): | ||||
|     #         return True | ||||
|     #     return False | ||||
|     def get_unread_msg_count(self, obj: UserProfile): | ||||
|         return MessagePush.objects.filter(status='2').exclude(user=obj,messagepushuser_message_push__is_read=True).count() | ||||
| 
 | ||||
|     class Meta: | ||||
|         model = UserProfile | ||||
|  | @ -288,3 +286,25 @@ class UserProfileCreateUpdateSerializer(CustomModelSerializer): | |||
|         model = UserProfile | ||||
|         exclude = ('password', 'secret', 'user_permissions', 'groups', 'is_superuser', 'date_joined') | ||||
|         read_only_fields = ('dept',) | ||||
| 
 | ||||
| class UserProfileImportSerializer(CustomModelSerializer): | ||||
| 
 | ||||
|     def save(self, **kwargs): | ||||
|         data = super().save(**kwargs) | ||||
|         data.set_password(self.initial_data.get('password', None)) | ||||
|         data.save() | ||||
|         return data | ||||
| 
 | ||||
|     def run_validation(self, data={}): | ||||
|         # 把excel 数据进行格式转换 | ||||
|         if type(data) is dict: | ||||
|             data['role'] = str(data['role']).split(',') | ||||
|             data['post'] = str(data['post']).split(',') | ||||
|             data['gender'] = {'男': '0', '女': '1', '未知': '2'}.get(data['gender']) | ||||
|             data['is_active'] = {'启用': True, '禁用': False}.get(data['is_active']) | ||||
|         return super().run_validation(data) | ||||
| 
 | ||||
| 
 | ||||
|     class Meta: | ||||
|         model = UserProfile | ||||
|         exclude = ('password', 'secret', 'user_permissions', 'groups', 'is_superuser', 'date_joined') | ||||
|  | @ -1,7 +1,7 @@ | |||
| from django.urls import re_path | ||||
| from rest_framework.routers import DefaultRouter | ||||
| 
 | ||||
| from apps.permission.views import MenuModelViewSet, DeptModelViewSet, PostModelViewSet, RoleModelViewSet, \ | ||||
| from ..permission.views import MenuModelViewSet, DeptModelViewSet, PostModelViewSet, RoleModelViewSet, \ | ||||
|     UserProfileModelViewSet | ||||
| 
 | ||||
| router = DefaultRouter() | ||||
|  | @ -29,13 +29,16 @@ urlpatterns = [ | |||
|     # 用户自己重置密码 | ||||
|     re_path('user/profile/updatePwd/', UserProfileModelViewSet.as_view({'put': 'update_pwd'})), | ||||
|     # 获取、更新用户个人信息 | ||||
|     re_path('user/profile/', UserProfileModelViewSet.as_view({'get': 'profile','put': 'put_profile'})), | ||||
|     re_path('user/profile/', UserProfileModelViewSet.as_view({'get': 'profile', 'put': 'put_profile'})), | ||||
|     # 导出用户 | ||||
|     re_path('user/export/', UserProfileModelViewSet.as_view({'get': 'export',})), | ||||
|     re_path('user/export/', UserProfileModelViewSet.as_view({'get': 'export', })), | ||||
|     # 导出角色 | ||||
|     re_path('role/export/', RoleModelViewSet.as_view({'get': 'export',})), | ||||
|     re_path('role/export/', RoleModelViewSet.as_view({'get': 'export', })), | ||||
|     # 导出岗位 | ||||
|     re_path('post/export/', PostModelViewSet.as_view({'get': 'export',})), | ||||
|     re_path('post/export/', PostModelViewSet.as_view({'get': 'export', })), | ||||
|     # 用户导入模板下载及导入 | ||||
|     re_path('user/importTemplate/', | ||||
|             UserProfileModelViewSet.as_view({'get': 'importTemplate', 'post': 'importTemplate'})), | ||||
| 
 | ||||
| ] | ||||
| urlpatterns += router.urls | ||||
|  | @ -2,16 +2,18 @@ from django.contrib.auth import authenticate | |||
| from rest_framework.request import Request | ||||
| from rest_framework.views import APIView | ||||
| 
 | ||||
| from apps.op_drf.viewsets import CustomModelViewSet | ||||
| from apps.permission.filters import MenuFilter, DeptFilter, PostFilter, RoleFilter, UserProfileFilter | ||||
| from apps.permission.models import Role, Menu, Dept, Post, UserProfile | ||||
| from apps.permission.serializers import UserProfileSerializer, MenuSerializer, RoleSerializer, \ | ||||
| from ..op_drf.filters import DataLevelPermissionsFilter | ||||
| from ..op_drf.viewsets import CustomModelViewSet | ||||
| from ..permission.filters import MenuFilter, DeptFilter, PostFilter, RoleFilter, UserProfileFilter | ||||
| from ..permission.models import Role, Menu, Dept, Post, UserProfile | ||||
| from ..permission.serializers import UserProfileSerializer, MenuSerializer, RoleSerializer, \ | ||||
|     MenuCreateUpdateSerializer, DeptSerializer, DeptCreateUpdateSerializer, PostSerializer, PostCreateUpdateSerializer, \ | ||||
|     RoleCreateUpdateSerializer, DeptTreeSerializer, MenuTreeSerializer, UserProfileCreateUpdateSerializer, \ | ||||
|     PostSimpleSerializer, RoleSimpleSerializer, ExportUserProfileSerializer, ExportRoleSerializer, ExportPostSerializer | ||||
| from apps.op_drf.filters import DataLevelPermissionsFilter | ||||
| from utils.export_excel import export_excel_save_model | ||||
| from utils.response import SuccessResponse, ErrorResponse | ||||
|     PostSimpleSerializer, RoleSimpleSerializer, ExportUserProfileSerializer, ExportRoleSerializer, ExportPostSerializer, \ | ||||
|     UserProfileImportSerializer | ||||
| from ..system.models import DictDetails | ||||
| from ..utils.export_excel import export_excel_save_model, excel_to_data | ||||
| from ..utils.response import SuccessResponse, ErrorResponse | ||||
| 
 | ||||
| 
 | ||||
| class GetUserProfileView(APIView): | ||||
|  | @ -21,7 +23,7 @@ class GetUserProfileView(APIView): | |||
| 
 | ||||
|     def get(self, request, format=None): | ||||
|         user_dict = UserProfileSerializer(request.user).data | ||||
|         permissions_list = ["*:*:*"] if user_dict.get('admin') else Menu.objects.filter( | ||||
|         permissions_list = ['*:*:*'] if user_dict.get('admin') else Menu.objects.filter( | ||||
|             role__userprofile=request.user).values_list('perms', flat=True) | ||||
|         return SuccessResponse({ | ||||
|             'permissions': [ele for ele in permissions_list if ele], | ||||
|  | @ -46,25 +48,27 @@ class GetRouters(APIView): | |||
| 
 | ||||
|     def get(self, request, format=None): | ||||
|         # data = GetUserInfoSerializer(request.user).data | ||||
|         menus = Menu.objects.filter(role__userprofile=request.user).exclude(menuType="2").values('id', 'name', | ||||
|         menus = Menu.objects.filter(role__userprofile=request.user).exclude(menuType='2').values('id', 'name', | ||||
|                                                                                                  'web_path', | ||||
|                                                                                                  'visible', 'status', | ||||
|                                                                                                  'isFrame', | ||||
|                                                                                                  'component_path', | ||||
|                                                                                                  'icon', 'parentId', | ||||
|                                                                                                  'isCache').distinct() | ||||
|         # data = '{"msg":"操作成功","code":200,"data":[{"name":"System","path":"/system","hidden":false,"redirect":"noRedirect","component":"Layout","alwaysShow":true,"meta":{"title":"系统管理","icon":"system","noCache":false},"children":[{"name":"User","path":"user","hidden":false,"component":"permission/user/index","meta":{"title":"用户管理","icon":"user","noCache":false}},{"name":"Role","path":"role","hidden":false,"component":"permission/role/index","meta":{"title":"角色管理","icon":"peoples","noCache":false}},{"name":"Menu","path":"menu","hidden":false,"component":"permission/menu/index","meta":{"title":"菜单管理","icon":"tree-table","noCache":false}},{"name":"Dept","path":"dept","hidden":false,"component":"permission/dept/index","meta":{"title":"部门管理","icon":"tree","noCache":false}},{"name":"Post","path":"post","hidden":false,"component":"permission/post/index","meta":{"title":"岗位管理","icon":"post","noCache":false}},{"name":"Dict","path":"dict","hidden":false,"component":"system/dict/index","meta":{"title":"字典管理","icon":"dict","noCache":false}},{"name":"Config","path":"config","hidden":false,"component":"system/config/index","meta":{"title":"参数设置","icon":"edit","noCache":false}},{"name":"Notice","path":"notice","hidden":false,"component":"system/notice/index","meta":{"title":"通知公告","icon":"message","noCache":false}},{"name":"Log","path":"log","hidden":false,"redirect":"noRedirect","component":"ParentView","alwaysShow":true,"meta":{"title":"日志管理","icon":"log","noCache":false},"children":[{"name":"Operlog","path":"operlog","hidden":false,"component":"monitor/operlog/index","meta":{"title":"操作日志","icon":"form","noCache":false}},{"name":"Logininfor","path":"logininfor","hidden":false,"component":"monitor/logininfor/index","meta":{"title":"登录日志","icon":"logininfor","noCache":false}}]}]},{"name":"Monitor","path":"/monitor","hidden":false,"redirect":"noRedirect","component":"Layout","alwaysShow":true,"meta":{"title":"系统监控","icon":"monitor","noCache":false},"children":[{"name":"Online","path":"online","hidden":false,"component":"monitor/online/index","meta":{"title":"在线用户","icon":"online","noCache":false}},{"name":"Job","path":"job","hidden":false,"component":"monitor/job/index","meta":{"title":"定时任务","icon":"job","noCache":false}},{"name":"Druid","path":"druid","hidden":false,"component":"monitor/druid/index","meta":{"title":"数据监控","icon":"druid","noCache":false}},{"name":"Server","path":"server","hidden":false,"component":"monitor/server/index","meta":{"title":"服务监控","icon":"server","noCache":false}},{"name":"Cache","path":"cache","hidden":false,"component":"monitor/cache/index","meta":{"title":"缓存监控","icon":"redis","noCache":false}}]},{"name":"Tool","path":"/tool","hidden":false,"redirect":"noRedirect","component":"Layout","alwaysShow":true,"meta":{"title":"系统工具","icon":"tool","noCache":false},"children":[{"name":"Build","path":"build","hidden":false,"component":"tool/build/index","meta":{"title":"表单构建","icon":"build","noCache":false}},{"name":"Gen","path":"gen","hidden":false,"component":"tool/gen/index","meta":{"title":"代码生成","icon":"code","noCache":false}},{"name":"Swagger","path":"swagger","hidden":false,"component":"tool/swagger/index","meta":{"title":"系统接口","icon":"swagger","noCache":false}}]},{"name":"Http://ruoyi.vip","path":"http://ruoyi.vip","hidden":false,"component":"Layout","meta":{"title":"若依官网","icon":"guide","noCache":false}}]}' | ||||
|         # data = '{'msg':'操作成功','code':200,'data':[{'name':'System','path':'/system','hidden':false,'redirect':'noRedirect','component':'Layout','alwaysShow':true,'meta':{'title':'系统管理','icon':'system','noCache':false},'children':[{'name':'User','path':'user','hidden':false,'component':'permission/user/index','meta':{'title':'用户管理','icon':'user','noCache':false}},{'name':'Role','path':'role','hidden':false,'component':'permission/role/index','meta':{'title':'角色管理','icon':'peoples','noCache':false}},{'name':'Menu','path':'menu','hidden':false,'component':'permission/menu/index','meta':{'title':'菜单管理','icon':'tree-table','noCache':false}},{'name':'Dept','path':'dept','hidden':false,'component':'permission/dept/index','meta':{'title':'部门管理','icon':'tree','noCache':false}},{'name':'Post','path':'post','hidden':false,'component':'permission/post/index','meta':{'title':'岗位管理','icon':'post','noCache':false}},{'name':'Dict','path':'dict','hidden':false,'component':'system/dict/index','meta':{'title':'字典管理','icon':'dict','noCache':false}},{'name':'Config','path':'config','hidden':false,'component':'system/config/index','meta':{'title':'参数设置','icon':'edit','noCache':false}},{'name':'Notice','path':'notice','hidden':false,'component':'system/notice/index','meta':{'title':'通知公告','icon':'message','noCache':false}},{'name':'Log','path':'log','hidden':false,'redirect':'noRedirect','component':'ParentView','alwaysShow':true,'meta':{'title':'日志管理','icon':'log','noCache':false},'children':[{'name':'Operlog','path':'operlog','hidden':false,'component':'monitor/operlog/index','meta':{'title':'操作日志','icon':'form','noCache':false}},{'name':'Logininfor','path':'logininfor','hidden':false,'component':'monitor/logininfor/index','meta':{'title':'登录日志','icon':'logininfor','noCache':false}}]}]},{'name':'Monitor','path':'/monitor','hidden':false,'redirect':'noRedirect','component':'Layout','alwaysShow':true,'meta':{'title':'系统监控','icon':'monitor','noCache':false},'children':[{'name':'Online','path':'online','hidden':false,'component':'monitor/online/index','meta':{'title':'在线用户','icon':'online','noCache':false}},{'name':'Job','path':'job','hidden':false,'component':'monitor/job/index','meta':{'title':'定时任务','icon':'job','noCache':false}},{'name':'Druid','path':'druid','hidden':false,'component':'monitor/druid/index','meta':{'title':'数据监控','icon':'druid','noCache':false}},{'name':'Server','path':'server','hidden':false,'component':'monitor/server/index','meta':{'title':'服务监控','icon':'server','noCache':false}},{'name':'Cache','path':'cache','hidden':false,'component':'monitor/cache/index','meta':{'title':'缓存监控','icon':'redis','noCache':false}}]},{'name':'Tool','path':'/tool','hidden':false,'redirect':'noRedirect','component':'Layout','alwaysShow':true,'meta':{'title':'系统工具','icon':'tool','noCache':false},'children':[{'name':'Build','path':'build','hidden':false,'component':'tool/build/index','meta':{'title':'表单构建','icon':'build','noCache':false}},{'name':'Gen','path':'gen','hidden':false,'component':'tool/gen/index','meta':{'title':'代码生成','icon':'code','noCache':false}},{'name':'Swagger','path':'swagger','hidden':false,'component':'tool/swagger/index','meta':{'title':'系统接口','icon':'swagger','noCache':false}}]},{'name':'Http://ruoyi.vip','path':'http://ruoyi.vip','hidden':false,'component':'Layout','meta':{'title':'若依官网','icon':'guide','noCache':false}}]}' | ||||
|         # data = json.loads(data) | ||||
|         data = [] | ||||
|         sys_show_hide = DictDetails.get_default_dictValue('sys_show_hide') | ||||
|         for ele in menus: | ||||
|             data.append({ | ||||
|                 'id': ele.get('id'), | ||||
|                 'name': ''.join([i.capitalize() for i in ele.get('web_path', '').split('/')]), | ||||
|                 'name': ele.get('web_path', '').split('/')[-1] and ele.get('web_path', '').split('/')[-1].capitalize(), | ||||
|                 'path': ele.get('web_path'), | ||||
|                 'hidden': True if ele.get('visible') != '1' else False, | ||||
|                 'redirect': ele.get('web_path') if ele.get('isFrame') == '1' else 'noRedirect', | ||||
|                 'component': ele.get('component_path') or 'Layout', | ||||
|                 'meta': {"title": ele.get('name'), "icon": ele.get('icon'), "noCache": ele.get('isCache')}, | ||||
|                 'meta': {'title': ele.get('name'), 'icon': ele.get('icon'), | ||||
|                          'noCache': True if ele.get('isCache') == sys_show_hide else False}, | ||||
|                 'parentId': ele.get('parentId') | ||||
|             }) | ||||
|         return SuccessResponse(data) | ||||
|  | @ -252,6 +256,15 @@ class UserProfileModelViewSet(CustomModelViewSet): | |||
|     update_serializer_class = UserProfileCreateUpdateSerializer | ||||
|     filter_class = UserProfileFilter | ||||
|     extra_filter_backends = [DataLevelPermissionsFilter] | ||||
|     # 导出 | ||||
|     export_serializer_class = ExportUserProfileSerializer | ||||
|     export_field_data = ['用户序号', '登录名称', '用户名称', '用户邮箱', '手机号码', '用户性别', '帐号状态', '最后登录时间', '部门名称', '部门负责人'] | ||||
|     # 导入 | ||||
|     import_serializer_class = UserProfileImportSerializer | ||||
|     import_field_data = {'username': '登录账号', 'name': '用户名称', 'email': '用户邮箱', 'mobile': '手机号码', | ||||
|                          'gender': '用户性别(男/女/未知)', | ||||
|                          'is_active': '帐号状态(启用/禁用)', 'password': '登录密码', 'dept': '部门ID', 'role': '角色ID', | ||||
|                          'post': '岗位ID'} | ||||
|     # update_extra_permission_classes = (IsManagerPermission,) | ||||
|     # destroy_extra_permission_classes = (IsManagerPermission,) | ||||
|     # create_extra_permission_classes = (IsManagerPermission,) | ||||
|  | @ -364,15 +377,3 @@ class UserProfileModelViewSet(CustomModelViewSet): | |||
|         if hasattr(self, 'handle_logging'): | ||||
|             self.handle_logging(request, instance=instance, *args, **kwargs) | ||||
|         return SuccessResponse(serializer.data) | ||||
| 
 | ||||
|     def export(self, request: Request, *args, **kwargs): | ||||
|         """ | ||||
|         导出用户 | ||||
|         :param request: | ||||
|         :param args: | ||||
|         :param kwargs: | ||||
|         :return: | ||||
|         """ | ||||
|         field_data = ['用户序号', '登录名称', '用户名称', '用户邮箱', '手机号码', '用户性别', '帐号状态', '最后登录时间', '部门名称', '部门负责人'] | ||||
|         data = ExportUserProfileSerializer(UserProfile.objects.all(), many=True).data | ||||
|         return SuccessResponse(export_excel_save_model(request, field_data, data, '导出用户数据.xls')) | ||||
|  | @ -7,7 +7,8 @@ def getSql(filename): | |||
|     :param filename: 例如:os.path.join('permission','permission_dept.sql') | ||||
|     :return: | ||||
|     """ | ||||
|     pwd = os.path.join(os.getcwd(), 'scripts', filename) | ||||
|     abspath = os.path.abspath(os.path.join(os.path.abspath(os.path.dirname(__file__)), "..")) | ||||
|     pwd = os.path.join(abspath, 'scripts', filename) | ||||
|     with open(pwd,'rb') as fp: | ||||
|         content = fp.read().decode('utf8') | ||||
|     return [ele for ele in content.split('\n') if not ele.startswith('--') and ele] | ||||
|     return [ele for ele in content.split('\n') if not ele.startswith('--') and ele.strip(' ')] | ||||
|  | @ -0,0 +1,42 @@ | |||
| -- ---------------------------- | ||||
| -- 部门管理 初始化sql | ||||
| -- Table structure for permission_dept | ||||
| -- ---------------------------- | ||||
| -- DROP TABLE IF EXISTS `permission_dept`; | ||||
| -- CREATE TABLE `permission_dept` ( | ||||
| --   `id` int(11) NOT NULL AUTO_INCREMENT, | ||||
| --   `description` longtext, | ||||
| --   `creator` varchar(255) DEFAULT NULL, | ||||
| --   `modifier` varchar(255) DEFAULT NULL, | ||||
| --   `update_datetime` datetime(6) DEFAULT NULL, | ||||
| --   `create_datetime` datetime(6) DEFAULT NULL, | ||||
| --   `deptName` varchar(64) NOT NULL, | ||||
| --   `orderNum` int(11) NOT NULL, | ||||
| --   `owner` varchar(32) DEFAULT NULL, | ||||
| --   `phone` varchar(32) DEFAULT NULL, | ||||
| --   `email` varchar(32) DEFAULT NULL, | ||||
| --   `status` varchar(8) DEFAULT NULL, | ||||
| --   `parentId_id` int(11) DEFAULT NULL, | ||||
| --   PRIMARY KEY (`id`), | ||||
| --   KEY `permission_dept_parentId_id_43a4fd49` (`parentId_id`) USING BTREE | ||||
| -- ) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; | ||||
| 
 | ||||
| -- ---------------------------- | ||||
| -- Records of permission_dept | ||||
| -- ---------------------------- | ||||
| INSERT INTO `permission_dept` (id, description, modifier, update_datetime, create_datetime, deptName, orderNum, owner, phone, email, status, creator_id, parentId_id, dept_belong_id) VALUES (1, '', 'admin', '2021-02-27 07:26:20.518695', '2021-02-27 15:18:39.000000', 'XX创新科技', 1, NULL, '15888888888', 'cxkj@qq.com', '1', 1,NULL, 1); | ||||
| INSERT INTO `permission_dept` (id, description, modifier, update_datetime, create_datetime, deptName, orderNum, owner, phone, email, status, creator_id, parentId_id, dept_belong_id) VALUES (2, '', 'admin', '2021-02-27 07:25:09.041807', '2021-02-27 07:25:09.041853', '北京总公司', 1, NULL, NULL, NULL, '1', 1, 1, 1); | ||||
| INSERT INTO `permission_dept` (id, description, modifier, update_datetime, create_datetime, deptName, orderNum, owner, phone, email, status, creator_id, parentId_id, dept_belong_id) VALUES (3, '', 'admin', '2021-02-27 07:26:14.418894', '2021-02-27 07:25:25.195849', '上海分公司', 2, NULL, NULL, NULL, '1', 1, 1, 1); | ||||
| INSERT INTO `permission_dept` (id, description, modifier, update_datetime, create_datetime, deptName, orderNum, owner, phone, email, status, creator_id, parentId_id, dept_belong_id) VALUES (4, '', 'admin', '2021-02-27 07:26:01.993095', '2021-02-27 07:25:38.904644', '杭州分公司', 4, NULL, NULL, NULL, '1', 1, 1, 1); | ||||
| INSERT INTO `permission_dept` (id, description, modifier, update_datetime, create_datetime, deptName, orderNum, owner, phone, email, status, creator_id, parentId_id, dept_belong_id) VALUES (5, '', 'admin', '2021-02-27 07:28:15.854856', '2021-02-27 07:25:54.379081', '深圳分公司', 3, NULL, NULL, NULL, '0', 1, 1, 1); | ||||
| INSERT INTO `permission_dept` (id, description, modifier, update_datetime, create_datetime, deptName, orderNum, owner, phone, email, status, creator_id, parentId_id, dept_belong_id) VALUES (6, '', 'admin', '2021-02-27 07:26:37.589741', '2021-02-27 07:26:37.589780', '研发部门', 1, NULL, NULL, NULL, '1', 1, 2, 1); | ||||
| INSERT INTO `permission_dept` (id, description, modifier, update_datetime, create_datetime, deptName, orderNum, owner, phone, email, status, creator_id, parentId_id, dept_belong_id) VALUES (7, '', 'admin', '2021-02-27 07:26:47.781467', '2021-02-27 07:26:47.781511', '市场部门', 2, NULL, NULL, NULL, '1', 1, 2, 1); | ||||
| INSERT INTO `permission_dept` (id, description, modifier, update_datetime, create_datetime, deptName, orderNum, owner, phone, email, status, creator_id, parentId_id, dept_belong_id) VALUES (8, '', 'admin', '2021-02-27 07:26:57.059878', '2021-02-27 07:26:57.059923', '测试部门', 3, NULL, NULL, NULL, '1', 1, 2, 1); | ||||
| INSERT INTO `permission_dept` (id, description, modifier, update_datetime, create_datetime, deptName, orderNum, owner, phone, email, status, creator_id, parentId_id, dept_belong_id) VALUES (9, '', 'admin', '2021-02-27 07:27:06.088134', '2021-02-27 07:27:06.088178', '财务部门', 4, NULL, NULL, NULL, '1', 1, 2, 1); | ||||
| INSERT INTO `permission_dept` (id, description, modifier, update_datetime, create_datetime, deptName, orderNum, owner, phone, email, status, creator_id, parentId_id, dept_belong_id) VALUES (10, '', 'admin', '2021-02-27 07:27:15.287731', '2021-02-27 07:27:15.287772', '运维部门', 5, NULL, NULL, NULL, '1', 1, 2, 1); | ||||
| INSERT INTO `permission_dept` (id, description, modifier, update_datetime, create_datetime, deptName, orderNum, owner, phone, email, status, creator_id, parentId_id, dept_belong_id) VALUES (11, '', 'admin', '2021-02-27 07:27:24.834369', '2021-02-27 07:27:24.834413', '市场部门', 1, NULL, NULL, NULL, '1', 1, 3, 1); | ||||
| INSERT INTO `permission_dept` (id, description, modifier, update_datetime, create_datetime, deptName, orderNum, owner, phone, email, status, creator_id, parentId_id, dept_belong_id) VALUES (12, '', 'admin', '2021-02-27 07:27:34.161898', '2021-02-27 07:27:34.161944', '财务部门', 2, NULL, NULL, NULL, '1', 1, 3, 1); | ||||
| INSERT INTO `permission_dept` (id, description, modifier, update_datetime, create_datetime, deptName, orderNum, owner, phone, email, status, creator_id, parentId_id, dept_belong_id) VALUES (13, '', 'admin', '2021-02-27 07:28:20.474025', '2021-02-27 07:27:47.938676', '市场部门', 1, NULL, NULL, NULL, '0', 1, 5, 1); | ||||
| INSERT INTO `permission_dept` (id, description, modifier, update_datetime, create_datetime, deptName, orderNum, owner, phone, email, status, creator_id, parentId_id, dept_belong_id) VALUES (14, '', 'admin', '2021-02-27 07:28:23.394188', '2021-02-27 07:27:53.794331', '财务部门', 2, NULL, NULL, NULL, '0', 1, 5, 1); | ||||
| INSERT INTO `permission_dept` (id, description, modifier, update_datetime, create_datetime, deptName, orderNum, owner, phone, email, status, creator_id, parentId_id, dept_belong_id) VALUES (15, '', 'admin', '2021-02-27 07:28:03.368497', '2021-02-27 07:28:03.368540', '市场部门', 1, NULL, NULL, NULL, '1', 1, 4, 1); | ||||
| INSERT INTO `permission_dept` (id, description, modifier, update_datetime, create_datetime, deptName, orderNum, owner, phone, email, status, creator_id, parentId_id, dept_belong_id) VALUES (16, '', 'admin', '2021-02-27 07:28:10.532392', '2021-02-27 07:28:10.532436', '财务部门', 2, NULL, NULL, NULL, '1', 1, 4, 1); | ||||
|  | @ -0,0 +1,121 @@ | |||
| -- ---------------------------- | ||||
| -- 菜单管理初始化sql | ||||
| -- Table structure for permission_menu | ||||
| -- ---------------------------- | ||||
| -- DROP TABLE IF EXISTS `permission_menu`; | ||||
| -- CREATE TABLE `permission_menu` ( | ||||
| --   `id` int(11) NOT NULL AUTO_INCREMENT, | ||||
| --   `description` longtext, | ||||
| --   `creator` varchar(255) DEFAULT NULL, | ||||
| --   `modifier` varchar(255) DEFAULT NULL, | ||||
| --   `update_datetime` datetime(6) DEFAULT NULL, | ||||
| --   `create_datetime` datetime(6) DEFAULT NULL, | ||||
| --   `menuType` varchar(8) NOT NULL, | ||||
| --   `icon` varchar(64) DEFAULT NULL, | ||||
| --   `name` varchar(64) NOT NULL, | ||||
| --   `orderNum` int(11) NOT NULL, | ||||
| --   `isFrame` varchar(8) NOT NULL, | ||||
| --   `web_path` varchar(128) DEFAULT NULL, | ||||
| --   `component_path` varchar(128) DEFAULT NULL, | ||||
| --   `interface_path` varchar(256) DEFAULT NULL, | ||||
| --   `interface_method` varchar(16) NOT NULL, | ||||
| --   `perms` varchar(256) DEFAULT NULL, | ||||
| --   `status` varchar(8) NOT NULL, | ||||
| --   `visible` varchar(8) NOT NULL, | ||||
| --   `isCache` varchar(8) NOT NULL, | ||||
| --   `parentId_id` int(11) DEFAULT NULL, | ||||
| --   PRIMARY KEY (`id`), | ||||
| --   KEY `permission_menu_parentId_id_df49c7ef_fk_permission_menu_id` (`parentId_id`), | ||||
| --   CONSTRAINT `permission_menu_parentId_id_df49c7ef_fk_permission_menu_id` FOREIGN KEY (`parentId_id`) REFERENCES `permission_menu` (`id`) | ||||
| -- ) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; | ||||
| 
 | ||||
| -- ---------------------------- | ||||
| -- Records of permission_menu | ||||
| -- ---------------------------- | ||||
| INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (1, '', 'admin', '2021-02-27 07:50:00.410101', '2021-02-27 07:41:28.660364', '0', 'system', '系统管理', 1, '1', '/system', '', '', 'GET', NULL, '1', '1', '1', 1, NULL, 1); | ||||
| INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (2, '', 'admin', '2021-02-27 07:51:14.500722', '2021-02-27 07:51:14.500768', '0', 'peoples', '权限管理', 2, '1', '/permission', '', '', 'GET', NULL, '1', '1', '1', 1, NULL, 1); | ||||
| INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (3, '', 'admin', '2021-03-16 14:50:55.740451', '2021-02-27 07:54:38.630670', '1', 'dict', '字典管理', 1, '1', 'dict', 'vadmin/system/dict/index', '', 'GET', '', '1', '1', '1', 1, 1, 1); | ||||
| INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (4, '', 'admin', '2021-03-16 14:51:07.813189', '2021-02-27 08:06:51.019173', '1', 'edit', '参数管理', 2, '1', '/system/config', 'vadmin/system/config/index', '', 'GET', '', '1', '1', '1', 1, 1, 1); | ||||
| INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (5, '', 'admin', '2021-03-16 14:51:36.950198', '2021-02-27 08:25:37.339270', '1', 'post', '岗位管理', 1, '1', '/permission/post', 'vadmin/permission/post/index', '', 'GET', '', '1', '1', '1', 1, 2, 1); | ||||
| INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (6, '', 'admin', '2021-03-16 14:52:06.412883', '2021-02-27 08:26:48.454553', '1', 'tree', '部门管理', 2, '1', '/permission/dept', 'vadmin/permission/dept/index', '', 'GET', '', '1', '1', '1', 1, 2, 1); | ||||
| INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (7, '', 'admin', '2021-03-16 14:52:12.835100', '2021-02-27 08:28:20.411164', '1', 'tree-table', '菜单管理', 3, '1', '/permission/menu', 'vadmin/permission/menu/index', '', 'GET', '', '1', '1', '0', 1, 2, 1); | ||||
| INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (8, '', 'admin', '2021-03-16 14:52:31.046775', '2021-02-27 08:29:30.153361', '1', 'peoples', '角色管理', 4, '1', '/permission/role', 'vadmin/permission/role/index', '', 'GET', '', '1', '1', '1', 1, 2, 1); | ||||
| INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (9, '', 'admin', '2021-03-16 14:52:39.106512', '2021-02-27 08:30:14.030888', '1', 'user', '用户管理', 5, '1', '/permission/user', 'vadmin/permission/user/index', '', 'GET', '', '1', '1', '1', 1, 2, 1); | ||||
| INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (10, '', 'admin', '2021-02-27 08:37:24.948235', '2021-02-27 08:36:04.824117', '0', 'guide', 'dvAdmin官网', 9, '0', 'https://django-vue-admin.com', '', NULL, 'GET', NULL, '1', '1', '1', 1, NULL, 1); | ||||
| INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (11, '', 'admin', '2021-03-16 14:51:15.042512', '2021-02-27 16:17:36.685174', '1', 'job', '文件管理', 3, '1', '/system/savefile', 'vadmin/system/savefile/index', '', 'GET', '', '1', '1', '1', 1, 1, 1); | ||||
| INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (13, '', 'admin', '2021-03-03 14:41:08.227821', '2021-03-03 14:18:52.530449', '2', NULL, '用户新增', 1, '1', NULL, NULL, '/admin/permission/user/', 'POST', 'permission:user:post', '1', '1', '1', 1, 9, 1); | ||||
| INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (14, '', 'admin', '2021-03-03 14:43:34.207938', '2021-03-03 14:43:34.208093', '2', NULL, '用户修改', 2, '1', NULL, NULL, '/admin/permission/user/{id}/', 'PUT', 'permission:user:{id}:put', '1', '1', '1', 1, 9, 1); | ||||
| INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (15, '', 'admin', '2021-03-03 14:44:58.006289', '2021-03-03 14:44:58.006338', '2', NULL, '用户删除', 3, '1', '', NULL, '/admin/permission/user/{id}/', 'DELETE', 'permission:user:{id}:delete', '1', '1', '1', 1, 9, 1); | ||||
| INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (16, '', 'admin', '2021-03-03 14:45:50.575443', '2021-03-03 14:45:50.575507', '2', NULL, '用户导出', 4, '1', NULL, NULL, '/admin/permission/user/export/', 'GET', 'permission:user:export:get', '1', '1', '1', 1, 9, 1); | ||||
| INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (17, '', 'admin', '2021-03-03 14:51:14.157310', '2021-03-03 14:51:14.157447', '2', NULL, '用户导入', 5, '1', NULL, NULL, '/admin/permission/user/import/', 'POST', 'permission:user:import:post', '1', '1', '1', 1, 9, 1); | ||||
| INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (18, '', 'admin', '2021-03-03 14:51:51.220886', '2021-03-03 14:51:51.220933', '2', NULL, '重置密码', 6, '1', NULL, NULL, '/admin/permission/user/resetPwd/', 'PUT', 'permission:user:resetpwd:put', '1', '1', '1', 1, 9, 1); | ||||
| INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (19, '', 'admin', '2021-03-03 14:53:47.877063', '2021-03-03 14:53:47.877116', '2', NULL, '角色新增', 1, '1', NULL, NULL, '/admin/permission/role/', 'POST', 'permission:role:post', '1', '1', '1', 1, 8, 1); | ||||
| INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (20, '', 'admin', '2021-03-03 14:54:28.794968', '2021-03-03 14:54:28.795015', '2', NULL, '角色修改', 2, '1', NULL, NULL, '/admin/permission/role/{id}/', 'PUT', 'permission:role:{id}:put', '1', '1', '1', 1, 8, 1); | ||||
| INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (21, '', 'admin', '2021-03-03 14:58:00.798718', '2021-03-03 14:58:00.798813', '2', NULL, '删除角色', 3, '1', NULL, NULL, '/admin/permission/role/{id}/', 'DELETE', 'permission:role:{id}:delete', '1', '1', '1', 1, 8, 1); | ||||
| INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (22, '', 'admin', '2021-03-03 14:58:28.940577', '2021-03-03 14:58:28.940625', '2', NULL, '角色导出', 4, '1', NULL, NULL, '/admin/permission/role/export/', 'GET', 'permission:role:export:get', '1', '1', '1', 1, 8, 1); | ||||
| INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (23, '', 'admin', '2021-03-03 15:00:41.081771', '2021-03-03 15:00:41.081832', '2', NULL, '菜单新增', 1, '1', NULL, NULL, '/admin/permission/menus/', 'POST', 'permission:menus:post', '1', '1', '1', 1, 7, 1); | ||||
| INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (24, '', 'admin', '2021-03-03 15:01:03.178824', '2021-03-03 15:01:03.178874', '2', NULL, '菜单修改', 2, '1', NULL, NULL, '/admin/permission/menus/{id}/', 'PUT', 'permission:menus:{id}:put', '1', '1', '1', 1, 7, 1); | ||||
| INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (25, '', 'admin', '2021-03-03 15:02:56.123525', '2021-03-03 15:02:56.123571', '2', NULL, '菜单删除', 3, '1', NULL, NULL, '/admin/permission/menus/{id}/', 'DELETE', 'permission:menus:{id}:delete', '1', '1', '1', 1, 7, 1); | ||||
| INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (26, '', 'admin', '2021-03-03 15:04:35.191774', '2021-03-03 15:04:35.191856', '2', NULL, '部门新增', 1, '1', NULL, NULL, '/admin/permission/dept/', 'POST', 'permission:dept:post', '1', '1', '1', 1, 6, 1); | ||||
| INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (27, '', 'admin', '2021-03-03 15:04:56.963168', '2021-03-03 15:04:56.963214', '2', NULL, '部门修改', 2, '1', NULL, NULL, '/admin/permission/dept/{id}/', 'PUT', 'permission:dept:{id}:put', '1', '1', '1', 1, 6, 1); | ||||
| INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (28, '', 'admin', '2021-03-03 15:05:39.602577', '2021-03-03 15:05:39.602622', '2', NULL, '部门删除', 3, '1', NULL, NULL, '/admin/permission/dept/{id}/', 'DELETE', 'permission:dept:{id}:delete', '1', '1', '1', 1, 6, 1); | ||||
| INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (29, '', 'admin', '2021-03-03 15:06:50.095341', '2021-03-03 15:06:50.095388', '2', NULL, '岗位新增', 1, '1', NULL, NULL, '/admin/permission/post/', 'POST', 'permission:post:post', '1', '1', '1', 1, 5, 1); | ||||
| INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (30, '', 'admin', '2021-03-03 15:07:36.013313', '2021-03-03 15:07:36.013358', '2', NULL, '岗位修改', 2, '1', NULL, NULL, '/admin/permission/post/{id}/', 'PUT', 'permission:post:{id}:put', '1', '1', '1', 1, 5, 1); | ||||
| INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (31, '', 'admin', '2021-03-03 15:08:10.371530', '2021-03-03 15:08:10.371575', '2', NULL, '岗位删除', 3, '1', NULL, NULL, '/admin/permission/post/{id}/', 'DELETE', 'permission:post:{id}:delete', '1', '1', '1', 1, 5, 1); | ||||
| INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (32, '', 'admin', '2021-03-03 15:09:02.213084', '2021-03-03 15:09:02.213131', '2', NULL, '岗位导出', 4, '1', NULL, NULL, '/admin/permission/post/export/', 'GET', 'permission:post:export:get', '1', '1', '1', 1, 5, 1); | ||||
| INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (33, '', 'admin', '2021-03-03 15:11:37.616329', '2021-03-03 15:11:37.616415', '2', NULL, '字典新增', 1, '1', NULL, NULL, '/admin/system/dict/type/', 'POST', 'system:dict:type:post', '1', '1', '1', 1, 3, 1); | ||||
| INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (34, '', 'admin', '2021-03-03 15:12:47.237658', '2021-03-03 15:12:47.237713', '2', NULL, '字典修改', 2, '1', NULL, NULL, '/admin/system/dict/type/{id}/', 'PUT', 'system:dict:type:{id}:put', '1', '1', '1', 1, 3, 1); | ||||
| INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (35, '', 'admin', '2021-03-03 15:13:40.185174', '2021-03-03 15:13:40.185230', '2', NULL, '字典删除', 3, '1', NULL, NULL, '/admin/system/dict/type/{id}/', 'DELETE', 'system:dict:type:{id}:delete', '1', '1', '1', 1, 3, 1); | ||||
| INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (36, '', 'admin', '2021-03-03 15:15:12.950584', '2021-03-03 15:15:12.950684', '2', NULL, '字典导出', 4, '1', NULL, NULL, '/admin/system/dict/type/export/', 'GET', 'system:dict:type:export:get', '1', '1', '1', 1, 3, 1); | ||||
| INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (37, '', 'admin', '2021-03-03 15:16:54.709780', '2021-03-03 15:16:20.868146', '2', NULL, '清理缓存', 5, '1', NULL, NULL, '/admin/system/dict/type/clearCache/', 'DELETE', 'system:dict:type:clearcache:delete', '1', '1', '1', 1, 3, 1); | ||||
| INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (38, '', 'admin', '2021-03-03 15:17:54.232085', '2021-03-03 15:17:54.232166', '2', NULL, '参数新增', 1, '1', NULL, NULL, '/admin/system/config/', 'POST', 'system:config:post', '1', '1', '1', 1, 4, 1); | ||||
| INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (39, '', 'admin', '2021-03-03 15:18:37.088187', '2021-03-03 15:18:37.088237', '2', NULL, '参数修改', 2, '1', NULL, NULL, '/admin/system/config/{id}/', 'PUT', 'system:config:{id}:put', '1', '1', '1', 1, 4, 1); | ||||
| INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (40, '', 'admin', '2021-03-03 15:19:05.532556', '2021-03-03 15:19:05.532616', '2', NULL, '参数删除', 3, '1', NULL, NULL, '/admin/system/config/{id}/', 'DELETE', 'system:config:{id}:delete', '1', '1', '1', 1, 4, 1); | ||||
| INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (41, '', 'admin', '2021-03-03 15:19:49.576174', '2021-03-03 15:19:49.576221', '2', NULL, '参数导出', 4, '1', NULL, NULL, '/admin/system/config/export/', 'GET', 'system:config:export:get', '1', '1', '1', 1, 4, 1); | ||||
| INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (42, '', 'admin', '2021-03-03 15:21:20.098250', '2021-03-03 15:21:20.098345', '2', NULL, '清理缓存', 5, '1', NULL, NULL, '/admin/system/config/clearCache/', 'DELETE', 'system:config:clearcache:delete', '1', '1', '1', 1, 4, 1); | ||||
| INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (43, '', 'admin', '2021-03-03 15:22:48.492613', '2021-03-03 15:22:48.492666', '2', NULL, '文件上传', 1, '1', NULL, NULL, '/admin/system/savefile/', 'POST', 'system:savefile:post', '1', '1', '1', 1, 11, 1); | ||||
| INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (44, '', 'admin', '2021-03-03 15:23:58.219105', '2021-03-03 15:23:58.219155', '2', NULL, '文件删除', 2, '1', NULL, NULL, '/admin/system/savefile/{id}/', 'DELETE', 'system:savefile:{id}:delete', '1', '1', '1', 1, 11, 1); | ||||
| INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (45, '', 'admin', '2021-03-03 15:25:15.224971', '2021-03-03 15:25:15.225018', '2', NULL, '清理废弃文件', 3, '1', NULL, NULL, '/admin/system/clearsavefile/', 'POST', 'system:clearsavefile:post', '1', '1', '1', 1, 11, 1); | ||||
| INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (46, '', 'admin', '2021-03-03 15:28:30.061632', '2021-03-03 15:27:19.945663', '2', NULL, '文件下载', 4, '1', NULL, NULL, NULL, 'GET', 'system:clearsavefile:download:post', '1', '1', '1', 1, 11, 1); | ||||
| INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (47, '', 'admin', '2021-03-16 14:51:22.015400', '2021-03-07 14:32:06.754815', '1', 'message', '通知公告', 4, '1', 'system/message', 'vadmin/system/message/index', '', 'GET', '', '1', '1', '1', 1, 1, 1); | ||||
| INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (48, '', 'admin', '2021-03-07 14:35:06.718432', '2021-03-07 14:35:06.718463', '2', NULL, '发布公告', 1, '1', NULL, NULL, '/admin/system/message/', 'POST', 'system:message:post', '1', '1', '1', 1, 47, 1); | ||||
| INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (49, '', 'admin', '2021-03-08 13:04:32.158707', '2021-03-07 14:36:47.675837', '2', NULL, '修改公告', 2, '1', NULL, NULL, '/admin/system/message/{id}/', 'PUT', 'system:message:{id}:put', '1', '1', '1', 1, 47, 1); | ||||
| INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (50, '', 'admin', '2021-03-08 13:04:58.206693', '2021-03-07 14:37:52.130567', '2', NULL, '删除公告', 3, '1', NULL, NULL, '/admin/permission/menu/{id}/', 'DELETE', 'permission:menu:{id}:delete', '1', '1', '1', 1, 47, 1); | ||||
| INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (51, '', 'admin', '2021-03-07 14:42:37.410336', '2021-03-07 14:42:37.410366', '2', NULL, '公告导出', 4, '1', NULL, NULL, '/admin/system/message/export/', 'GET', 'system:message:export:get', '1', '1', '1', 1, 47, 1); | ||||
| INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (52, '', 'admin', '2021-03-09 17:19:13.828166', '2021-03-09 17:18:14.976783', '2', NULL, '字典查询', 0, '1', NULL, NULL, '/admin/system/dict/type/', 'GET', 'system:dict:type:get', '1', '1', '1', 1, 3, 1); | ||||
| INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (53, '', 'admin', '2021-03-09 17:19:46.963317', '2021-03-09 17:19:33.953559', '2', NULL, '参数查询', 0, '1', NULL, NULL, '/admin/system/config/', 'GET', 'system:config:get', '1', '1', '1', 1, 4, 1); | ||||
| INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (54, '', 'admin', '2021-03-09 17:20:14.749627', '2021-03-09 17:20:02.783389', '2', NULL, '文件查询', 0, '1', NULL, NULL, '/admin/system/savefile/', 'GET', 'system:savefile:get', '1', '1', '1', 1, 11, 1); | ||||
| INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (55, '', 'admin', '2021-03-09 17:20:44.604824', '2021-03-09 17:20:36.025364', '2', NULL, '公告查询', 0, '1', NULL, NULL, '/admin/system/message/', 'GET', 'system:message:get', '1', '1', '1', 1, 47, 1); | ||||
| INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (56, '', 'admin', '2021-03-09 17:21:06.429585', '2021-03-09 17:21:06.429629', '2', NULL, '岗位查询', 0, '1', NULL, NULL, '/admin/permission/post/', 'GET', 'permission:post:get', '1', '1', '1', 1, 5, 1); | ||||
| INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (57, '', 'admin', '2021-03-09 17:21:29.013165', '2021-03-09 17:21:29.013210', '2', NULL, '部门查询', 0, '1', NULL, NULL, '/admin/permission/dept/', 'GET', 'permission:dept:get', '1', '1', '1', 1, 6, 1); | ||||
| INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (58, '', 'admin', '2021-03-09 17:21:56.243957', '2021-03-09 17:21:47.358360', '2', NULL, '菜单查询', 0, '1', NULL, NULL, '/admin/permission/menus/', 'GET', 'permission:menus:get', '1', '1', '1', 1, 7, 1); | ||||
| INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (59, '', 'admin', '2021-03-09 17:22:20.140143', '2021-03-09 17:22:20.140189', '2', NULL, '角色查询', 0, '1', '', NULL, '/admin/permission/role/', 'GET', 'permission:role:get', '1', '1', '1', 1, 8, 1); | ||||
| INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (60, '', 'admin', '2021-03-09 17:22:38.595706', '2021-03-09 17:22:38.595751', '2', NULL, '用户查询', 0, '1', NULL, NULL, '/admin/permission/user/', 'GET', 'permission:user:get', '1', '1', '1', 1, 9, 1); | ||||
| INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (61, '', 'admin', '2021-03-21 11:34:17.635680', '2021-03-16 13:34:04.148728', '0', 'log', '日志管理', 5, '1', 'log', 'ParentView', NULL, 'GET', NULL, '1', '1', '1', 1, 1, 1); | ||||
| INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (62, '', 'admin', '2021-03-16 15:09:30.396752', '2021-03-16 13:36:00.114652', '1', 'logininfor', '登录日志', 1, '1', 'logininfor', 'vadmin/monitor/logininfor/index', '', 'GET', '', '1', '1', '1', 1, 61, 1); | ||||
| INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (63, '', 'admin', '2021-03-16 15:09:38.015636', '2021-03-16 14:28:10.395273', '1', 'log', '操作日志', 2, '1', 'operlog', 'vadmin/monitor/operlog/index', '', 'GET', '', '1', '1', '1', 1, 61, 1); | ||||
| INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (64, '', 'admin', '2021-03-16 14:31:27.618230', '2021-03-16 14:31:01.026470', '2', NULL, '登录日志查询', 1, '1', NULL, NULL, '/admin/system/logininfor/', 'GET', 'admin:system:logininfor:get', '1', '1', '1', 1, 62, 1); | ||||
| INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (65, '', 'admin', '2021-03-16 14:31:44.112525', '2021-03-16 14:31:44.112572', '2', NULL, '操作日志查询', 1, '1', NULL, NULL, '/admin/system/operlog/', 'GET', 'admin:system:operlog:get', '1', '1', '1', 1, 63, 1); | ||||
| INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (66, '', 'admin', '2021-03-16 14:33:05.482942', '2021-03-16 14:33:05.483003', '0', 'monitor', '系统监控', 3, '1', 'monitor', NULL, NULL, 'GET', NULL, '1', '1', '1', 1, NULL, 1); | ||||
| INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (67, '', 'admin', '2021-03-16 14:49:59.260322', '2021-03-16 14:34:59.165065', '1', 'online', '在线用户', 1, '1', 'online', 'vadmin/monitor/online/index', '', 'GET', '', '1', '1', '1', 1, 66, 1); | ||||
| INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (68, '', 'admin', '2021-03-16 14:36:00.989981', '2021-03-16 14:35:50.894454', '2', NULL, '在线用户查询', 1, '1', NULL, NULL, '/admin/monitor/online/', 'GET', 'admin:monitor:online:get', '1', '1', '1', 1, 67, 1); | ||||
| INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (69, '', 'admin', '2021-03-16 14:37:10.577186', '2021-03-16 14:37:10.577231', '2', NULL, '用户强退', 2, '1', NULL, NULL, '/admin/monitor/online/{id}/', 'PUT', 'admin:monitor:online:{id}:put', '1', '1', '1', 1, 67, 1); | ||||
| INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (70, '', 'admin', '2021-03-16 15:04:21.404578', '2021-03-16 14:45:51.507961', '1', 'job', '定时任务', 2, '1', 'celery', 'vadmin/monitor/celery/index', '', 'GET', NULL, '1', '1', '1', 1, 66, 1); | ||||
| INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (71, '', 'admin', '2021-03-16 15:04:11.799260', '2021-03-16 14:59:53.619219', '2', NULL, '任务查询', 1, '1', NULL, NULL, '/admin/monitor/celery/', 'GET', 'admin:monitor:celery:get', '1', '1', '1', 1, 70, 1); | ||||
| INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (72, '', 'admin', '2021-03-16 15:04:06.645135', '2021-03-16 15:00:21.809600', '2', NULL, '任务新增', 2, '1', NULL, NULL, '/admin/monitor/celery/', 'POST', 'admin:monitor:celery:post', '1', '1', '1', 1, 70, 1); | ||||
| INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (73, '', 'admin', '2021-03-16 15:04:00.041701', '2021-03-16 15:00:45.994228', '2', NULL, '任务修改', 3, '1', NULL, NULL, '/admin/monitor/celery/{id}/', 'PUT', 'admin:monitor:celery:{id}:put', '1', '1', '1', 1, 70, 1); | ||||
| INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (74, '', 'admin', '2021-03-16 15:03:54.891216', '2021-03-16 15:01:19.624182', '2', NULL, '任务删除', 4, '1', NULL, NULL, '/admin/monitor/celery/{id}/', 'DELETE', 'admin:monitor:celery:{id}:delete', '1', '1', '1', 1, 70, 1); | ||||
| INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (75, '', 'admin', '2021-03-16 15:07:03.505007', '2021-03-16 15:03:35.796596', '2', NULL, '任务单次执行', 6, '1', NULL, NULL, '/admin/monitor/celery/run/', 'PUT', 'admin:monitor:celery:run:put', '1', '1', '1', 1, 70, 1); | ||||
| INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (76, '', 'admin', '2021-03-16 15:08:09.768588', '2021-03-16 15:07:45.064547', '2', NULL, '任务导出', 5, '1', NULL, NULL, '/admin/monitor/celery/export/', 'GET', 'admin:monitor:celery:export:get', '1', '1', '1', 1, 70, 1); | ||||
| INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (77, '', 'admin', '2021-03-16 15:09:09.928480', '2021-03-16 15:08:46.299829', '2', NULL, '登录日志导出', 2, '1', NULL, NULL, '/admin/system/logininfor/export/', 'GET', 'admin:system:logininfor:export:get', '1', '1', '1', 1, 62, 1); | ||||
| INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (78, '', 'admin', '2021-03-16 15:09:59.500271', '2021-03-16 15:09:59.500333', '2', NULL, '操作日志导出', 2, '1', NULL, NULL, '/admin/system/operlog/export/', 'GET', 'admin:system:operlog:export:get', '1', '1', '1', 1, 63, 1); | ||||
| INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (79, '', 'admin', '2021-03-16 15:13:41.377208', '2021-03-16 15:11:05.675729', '1', 'job', '定时日志', 3, '1', 'celerylog', 'vadmin/monitor/celerylog/index', NULL, 'GET', NULL, '1', '1', '1', 1, 61, 1); | ||||
| INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (80, '', 'admin', '2021-03-16 15:16:29.349992', '2021-03-16 15:12:19.707979', '2', NULL, '定时日志查询', 1, '1', NULL, NULL, '/admin/monitor/celerylog/', 'GET', 'admin:monitor:celerylog:get', '1', '1', '1', 1, 79, 1); | ||||
| INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (81, '', 'admin', '2021-03-16 15:16:34.419420', '2021-03-16 15:12:51.090410', '2', NULL, '定时日志导出', 2, '1', NULL, NULL, '/admin/monitor/celerylog/export/', 'GET', 'admin:monitor:celerylog:export:get', '1', '1', '1', 1, 79, 1); | ||||
| INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (82, '', 'admin', '2021-03-16 15:15:21.397132', '2021-03-16 15:15:21.397186', '0', 'tool', '系统工具', 4, '1', 'tool', NULL, NULL, 'GET', NULL, '1', '1', '1', 1, NULL, 1); | ||||
| INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (83, '', 'admin', '2021-03-16 15:16:10.318380', '2021-03-16 15:16:10.318426', '1', 'build', '表单构建', 1, '1', 'build', 'vadmin/tool/build/index', NULL, 'GET', NULL, '1', '1', '1', 1, 82, 1); | ||||
| INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (84, '', 'admin', '2021-03-16 15:19:24.228395', '2021-03-16 15:17:23.507732', '1', 'swagger', '系统接口', 2, '1', 'swagger', 'vadmin/tool/swagger/index', '/admin/docs/', 'GET', 'admin:docs:get', '1', '1', '1', 1, 82, 1); | ||||
| INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (85, '', 'admin', '2021-03-21 11:37:06.119591', '2021-03-21 11:37:06.119623', '2', NULL, '操作日志批量删除', 3, '1', NULL, NULL, '/admin/system/operation_log/{id}/', 'DELETE', 'admin:system:operation_log:{id}:delete', '1', '1', '1', 1, 63, 1); | ||||
| INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (86, '', 'admin', '2021-03-21 11:39:07.579469', '2021-03-21 11:39:07.579517', '2', NULL, '操作日志清空', 4, '1', NULL, NULL, '/admin/system/operation_log/clean/', 'DELETE', 'admin:system:operation_log:clean:delete', '1', '1', '1', 1, 63, 1); | ||||
| INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (87, '', 'admin', '2021-03-21 23:32:44.308857', '2021-03-21 23:32:44.308882', '2', NULL, '登录日志批量删除', 3, '1', NULL, NULL, '/admin/system/logininfor/{id}/', 'DELETE', 'admin:system:logininfor:{id}:delete', '1', '1', '1', 1, 62, 1); | ||||
| INSERT INTO `permission_menu` (id, description, modifier, update_datetime, create_datetime, menuType, icon, name, orderNum, isFrame, web_path, component_path, interface_path, interface_method, perms, status, visible, isCache, creator_id, parentId_id, dept_belong_id) VALUES (88, '', 'admin', '2021-03-21 23:33:30.888568', '2021-03-21 23:33:30.888593', '2', NULL, '登录日志清空', 4, '1', NULL, NULL, '/admin/system/logininfor/clean/', 'DELETE', 'admin:system:logininfor:clean:delete', '1', '1', '1', 1, 62, 1); | ||||
|  | @ -0,0 +1,27 @@ | |||
| -- ---------------------------- | ||||
| -- 岗位管理初始化sql | ||||
| -- Table structure for permission_post | ||||
| -- ---------------------------- | ||||
| -- DROP TABLE IF EXISTS `permission_post`; | ||||
| -- CREATE TABLE `permission_post` ( | ||||
| --   `id` int(11) NOT NULL AUTO_INCREMENT, | ||||
| --   `description` longtext, | ||||
| --   `creator` varchar(255) DEFAULT NULL, | ||||
| --   `modifier` varchar(255) DEFAULT NULL, | ||||
| --   `update_datetime` datetime(6) DEFAULT NULL, | ||||
| --   `create_datetime` datetime(6) DEFAULT NULL, | ||||
| --   `postName` varchar(64) NOT NULL, | ||||
| --   `postCode` varchar(32) NOT NULL, | ||||
| --   `postSort` int(11) NOT NULL, | ||||
| --   `status` varchar(8) NOT NULL, | ||||
| --   `remark` longtext, | ||||
| --   PRIMARY KEY (`id`) | ||||
| -- ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; | ||||
| 
 | ||||
| -- ---------------------------- | ||||
| -- Records of permission_post | ||||
| -- ---------------------------- | ||||
| INSERT INTO `permission_post` (id, description, modifier, update_datetime, create_datetime, postName, postCode, postSort, status, remark, creator_id, dept_belong_id) VALUES (1, '', 'admin', '2021-02-27 07:16:10.725970', '2021-02-27 07:16:10.726016', '董事长', 'ceo', 1, '1', NULL, 1, 1); | ||||
| INSERT INTO `permission_post` (id, description, modifier, update_datetime, create_datetime, postName, postCode, postSort, status, remark, creator_id, dept_belong_id) VALUES (2, '', 'admin', '2021-02-27 07:16:28.139648', '2021-02-27 07:16:28.139689', '项目经理', 'ce', 2, '1', NULL, 1, 1); | ||||
| INSERT INTO `permission_post` (id, description, modifier, update_datetime, create_datetime, postName, postCode, postSort, status, remark, creator_id, dept_belong_id) VALUES (3, '', 'admin', '2021-02-27 07:16:39.843069', '2021-02-27 07:16:39.843114', '人力资源', 'hr', 3, '1', NULL, 1, 1); | ||||
| INSERT INTO `permission_post` (id, description, modifier, update_datetime, create_datetime, postName, postCode, postSort, status, remark, creator_id, dept_belong_id) VALUES (4, '', 'admin', '2021-02-27 07:16:51.082769', '2021-02-27 07:16:51.082813', '普通员工', 'user', 4, '1', NULL, 1, 1); | ||||
|  | @ -0,0 +1,173 @@ | |||
| -- ---------------------------- | ||||
| -- 角色管理 初始化 | ||||
| -- Table structure for permission_role | ||||
| -- ---------------------------- | ||||
| -- DROP TABLE IF EXISTS `permission_role`; | ||||
| -- CREATE TABLE `permission_role` ( | ||||
| --   `id` int(11) NOT NULL AUTO_INCREMENT, | ||||
| --   `description` longtext, | ||||
| --   `creator` varchar(255) DEFAULT NULL, | ||||
| --   `modifier` varchar(255) DEFAULT NULL, | ||||
| --   `update_datetime` datetime(6) DEFAULT NULL, | ||||
| --   `create_datetime` datetime(6) DEFAULT NULL, | ||||
| --   `roleName` varchar(64) NOT NULL, | ||||
| --   `roleKey` varchar(64) NOT NULL, | ||||
| --   `roleSort` int(11) NOT NULL, | ||||
| --   `status` varchar(8) NOT NULL, | ||||
| --   `admin` tinyint(1) NOT NULL, | ||||
| --   `dataScope` varchar(8) NOT NULL, | ||||
| --   `remark` longtext, | ||||
| --   PRIMARY KEY (`id`) | ||||
| -- ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; | ||||
| 
 | ||||
| -- ---------------------------- | ||||
| -- Records of permission_role | ||||
| -- ---------------------------- | ||||
| INSERT INTO `permission_role` (id, description, modifier, update_datetime, create_datetime, roleName, roleKey, roleSort, status, admin, dataScope, remark, creator_id, dept_belong_id) VALUES (1, '', 'admin', '2021-02-27 08:48:23.225361', '2021-02-27 08:48:08.064911', '超级管理员', 'admin', 1, '1', 1, '2', NULL, 1, 1); | ||||
| INSERT INTO `permission_role` (id, description, modifier, update_datetime, create_datetime, roleName, roleKey, roleSort, status, admin, dataScope, remark, creator_id, dept_belong_id) VALUES (2, '', 'admin', '2021-02-27 08:49:05.149632', '2021-02-27 08:48:47.317214', '普通角色', 'common', 2, '1', 0, '2', NULL, 1, 1); | ||||
| 
 | ||||
| -- ---------------------------- | ||||
| -- Table structure for permission_role_dept | ||||
| -- ---------------------------- | ||||
| -- DROP TABLE IF EXISTS `permission_role_dept`; | ||||
| -- CREATE TABLE `permission_role_dept` ( | ||||
| --   `id` int(11) NOT NULL AUTO_INCREMENT, | ||||
| --   `role_id` int(11) NOT NULL, | ||||
| --   `dept_id` int(11) NOT NULL, | ||||
| --   PRIMARY KEY (`id`), | ||||
| --   UNIQUE KEY `permission_role_dept_role_id_dept_id_1d89afeb_uniq` (`role_id`,`dept_id`), | ||||
| --   KEY `permission_role_dept_role_id_99a9f232` (`role_id`) USING BTREE, | ||||
| --   KEY `permission_role_dept_dept_id_cbe9076a` (`dept_id`) USING BTREE | ||||
| -- ) ENGINE=InnoDB AUTO_INCREMENT=33 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; | ||||
| 
 | ||||
| -- ---------------------------- | ||||
| -- Records of permission_role_dept | ||||
| -- ---------------------------- | ||||
| INSERT INTO `permission_role_dept` (id, role_id, dept_id) VALUES (1, 1, 1); | ||||
| INSERT INTO `permission_role_dept` (id, role_id, dept_id) VALUES (2, 1, 2); | ||||
| INSERT INTO `permission_role_dept` (id, role_id, dept_id) VALUES (3, 1, 3); | ||||
| INSERT INTO `permission_role_dept` (id, role_id, dept_id) VALUES (4, 1, 4); | ||||
| INSERT INTO `permission_role_dept` (id, role_id, dept_id) VALUES (5, 1, 5); | ||||
| INSERT INTO `permission_role_dept` (id, role_id, dept_id) VALUES (6, 1, 6); | ||||
| INSERT INTO `permission_role_dept` (id, role_id, dept_id) VALUES (7, 1, 7); | ||||
| INSERT INTO `permission_role_dept` (id, role_id, dept_id) VALUES (8, 1, 8); | ||||
| INSERT INTO `permission_role_dept` (id, role_id, dept_id) VALUES (9, 1, 9); | ||||
| INSERT INTO `permission_role_dept` (id, role_id, dept_id) VALUES (10, 1, 10); | ||||
| INSERT INTO `permission_role_dept` (id, role_id, dept_id) VALUES (11, 1, 11); | ||||
| INSERT INTO `permission_role_dept` (id, role_id, dept_id) VALUES (12, 1, 12); | ||||
| INSERT INTO `permission_role_dept` (id, role_id, dept_id) VALUES (13, 1, 13); | ||||
| INSERT INTO `permission_role_dept` (id, role_id, dept_id) VALUES (14, 1, 14); | ||||
| INSERT INTO `permission_role_dept` (id, role_id, dept_id) VALUES (15, 1, 15); | ||||
| INSERT INTO `permission_role_dept` (id, role_id, dept_id) VALUES (16, 1, 16); | ||||
| INSERT INTO `permission_role_dept` (id, role_id, dept_id) VALUES (17, 2, 1); | ||||
| INSERT INTO `permission_role_dept` (id, role_id, dept_id) VALUES (18, 2, 2); | ||||
| INSERT INTO `permission_role_dept` (id, role_id, dept_id) VALUES (19, 2, 3); | ||||
| INSERT INTO `permission_role_dept` (id, role_id, dept_id) VALUES (20, 2, 4); | ||||
| INSERT INTO `permission_role_dept` (id, role_id, dept_id) VALUES (21, 2, 5); | ||||
| INSERT INTO `permission_role_dept` (id, role_id, dept_id) VALUES (22, 2, 6); | ||||
| INSERT INTO `permission_role_dept` (id, role_id, dept_id) VALUES (23, 2, 7); | ||||
| INSERT INTO `permission_role_dept` (id, role_id, dept_id) VALUES (24, 2, 8); | ||||
| INSERT INTO `permission_role_dept` (id, role_id, dept_id) VALUES (25, 2, 9); | ||||
| INSERT INTO `permission_role_dept` (id, role_id, dept_id) VALUES (26, 2, 10); | ||||
| INSERT INTO `permission_role_dept` (id, role_id, dept_id) VALUES (27, 2, 11); | ||||
| INSERT INTO `permission_role_dept` (id, role_id, dept_id) VALUES (28, 2, 12); | ||||
| INSERT INTO `permission_role_dept` (id, role_id, dept_id) VALUES (29, 2, 13); | ||||
| INSERT INTO `permission_role_dept` (id, role_id, dept_id) VALUES (30, 2, 14); | ||||
| INSERT INTO `permission_role_dept` (id, role_id, dept_id) VALUES (31, 2, 15); | ||||
| INSERT INTO `permission_role_dept` (id, role_id, dept_id) VALUES (32, 2, 16); | ||||
| 
 | ||||
| -- ---------------------------- | ||||
| -- Table structure for permission_role_menu | ||||
| -- ---------------------------- | ||||
| -- DROP TABLE IF EXISTS `permission_role_menu`; | ||||
| -- CREATE TABLE `permission_role_menu` ( | ||||
| --   `id` int(11) NOT NULL AUTO_INCREMENT, | ||||
| --   `role_id` int(11) NOT NULL, | ||||
| --   `menu_id` int(11) NOT NULL, | ||||
| --   PRIMARY KEY (`id`), | ||||
| --   UNIQUE KEY `permission_role_menu_role_id_menu_id_bb9e5441_uniq` (`role_id`,`menu_id`), | ||||
| --   KEY `permission_role_menu_role_id_33541d2b` (`role_id`) USING BTREE, | ||||
| --   KEY `permission_role_menu_menu_id_0c24555f` (`menu_id`) USING BTREE | ||||
| -- ) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; | ||||
| 
 | ||||
| -- ---------------------------- | ||||
| -- Records of permission_role_menu | ||||
| -- ---------------------------- | ||||
| INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (1, 1, 1); | ||||
| INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (2, 1, 2); | ||||
| INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (3, 1, 3); | ||||
| INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (4, 1, 4); | ||||
| INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (5, 1, 5); | ||||
| INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (6, 1, 6); | ||||
| INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (7, 1, 7); | ||||
| INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (8, 1, 8); | ||||
| INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (9, 1, 9); | ||||
| INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (10, 1, 10); | ||||
| INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (21, 1, 11); | ||||
| INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (22, 1, 13); | ||||
| INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (23, 1, 14); | ||||
| INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (24, 1, 15); | ||||
| INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (25, 1, 16); | ||||
| INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (26, 1, 17); | ||||
| INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (27, 1, 18); | ||||
| INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (28, 1, 19); | ||||
| INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (29, 1, 20); | ||||
| INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (30, 1, 21); | ||||
| INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (31, 1, 22); | ||||
| INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (32, 1, 23); | ||||
| INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (33, 1, 24); | ||||
| INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (34, 1, 25); | ||||
| INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (35, 1, 26); | ||||
| INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (36, 1, 27); | ||||
| INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (37, 1, 28); | ||||
| INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (38, 1, 29); | ||||
| INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (39, 1, 30); | ||||
| INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (40, 1, 31); | ||||
| INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (41, 1, 32); | ||||
| INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (42, 1, 33); | ||||
| INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (43, 1, 34); | ||||
| INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (44, 1, 35); | ||||
| INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (45, 1, 36); | ||||
| INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (46, 1, 37); | ||||
| INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (47, 1, 38); | ||||
| INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (48, 1, 39); | ||||
| INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (49, 1, 40); | ||||
| INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (50, 1, 41); | ||||
| INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (51, 1, 42); | ||||
| INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (52, 1, 43); | ||||
| INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (53, 1, 44); | ||||
| INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (54, 1, 45); | ||||
| INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (55, 1, 46); | ||||
| INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (56, 1, 47); | ||||
| INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (57, 1, 48); | ||||
| INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (58, 1, 49); | ||||
| INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (59, 1, 50); | ||||
| INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (60, 1, 51); | ||||
| INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (61, 1, 52); | ||||
| INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (62, 1, 53); | ||||
| INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (63, 1, 54); | ||||
| INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (64, 1, 55); | ||||
| INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (65, 1, 56); | ||||
| INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (66, 1, 57); | ||||
| INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (67, 1, 58); | ||||
| INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (68, 1, 59); | ||||
| INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (69, 1, 60); | ||||
| INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (74, 1, 61); | ||||
| INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (75, 1, 62); | ||||
| INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (76, 1, 63); | ||||
| INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (70, 1, 64); | ||||
| INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (71, 1, 65); | ||||
| INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (72, 1, 77); | ||||
| INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (73, 1, 78); | ||||
| INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (77, 1, 85); | ||||
| INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (78, 1, 86); | ||||
| INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (11, 2, 1); | ||||
| INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (12, 2, 2); | ||||
| INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (13, 2, 3); | ||||
| INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (14, 2, 4); | ||||
| INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (15, 2, 5); | ||||
| INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (16, 2, 6); | ||||
| INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (17, 2, 7); | ||||
| INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (18, 2, 8); | ||||
| INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (19, 2, 9); | ||||
| INSERT INTO `permission_role_menu` (id, role_id, menu_id) VALUES (20, 2, 10); | ||||
|  | @ -33,8 +33,8 @@ | |||
| -- ---------------------------- | ||||
| -- Records of permission_userprofile | ||||
| -- ---------------------------- | ||||
| INSERT INTO `permission_userprofile` VALUES (1, 'pbkdf2_sha256$150000$OjTMSXJgkzrE$jEQCjWbIbXwpN4k2z0o8Yvou1UQGuoJALyL/kGDZFd4=', '2021-02-27 06:20:28.214775', 1, '', '', 1, 1, '2021-02-27 06:20:09.188689', 'admin', '3704adf3-380f-4c27-a8da-60420e8cb4ab', 'admin@qq.com', NULL, NULL, '管理员', '2', '1', 2, '2021-02-27 06:20:09.263192', '2021-02-27 09:14:30.009998', 8); | ||||
| INSERT INTO `permission_userprofile` VALUES (2, 'pbkdf2_sha256$150000$5Z9LSi7LpNms$xVguE/dOEpI4D95LjSaKm0xzG7vNSopUolANr8f/6/E=', NULL, 0, '', '', 0, 1, '2021-03-03 15:38:27.009893', 'dvadmin', 'b4c5d79a-f01c-4244-92f8-b5288eca1d50', NULL, NULL, NULL, '普通用户', '2', NULL, 0, '2021-03-03 15:38:27.010771', '2021-03-03 15:38:27.086069', 8); | ||||
| INSERT INTO `permission_userprofile` (id, password, last_login, is_superuser, first_name, last_name, is_staff, is_active, date_joined, username, secret, email, mobile, avatar, name, gender, remark, user_type, create_datetime, update_datetime, dept_id, dept_belong_id) VALUES (1, 'pbkdf2_sha256$150000$OjTMSXJgkzrE$jEQCjWbIbXwpN4k2z0o8Yvou1UQGuoJALyL/kGDZFd4=', '2021-02-27 06:20:28.214775', 1, '', '', 1, 1, '2021-02-27 06:20:09.188689', 'admin', '3704adf3-380f-4c27-a8da-60420e8cb4ab', 'admin@qq.com', NULL, NULL, '管理员', '2', '1', 2, '2021-02-27 06:20:09.263192', '2021-02-27 09:14:30.009998', 8, 1); | ||||
| INSERT INTO `permission_userprofile` (id, password, last_login, is_superuser, first_name, last_name, is_staff, is_active, date_joined, username, secret, email, mobile, avatar, name, gender, remark, user_type, create_datetime, update_datetime, dept_id, dept_belong_id) VALUES (2, 'pbkdf2_sha256$150000$5Z9LSi7LpNms$xVguE/dOEpI4D95LjSaKm0xzG7vNSopUolANr8f/6/E=', NULL, 0, '', '', 0, 1, '2021-03-03 15:38:27.009893', 'dvadmin', 'b4c5d79a-f01c-4244-92f8-b5288eca1d50', NULL, NULL, NULL, '普通用户', '2', NULL, 0, '2021-03-03 15:38:27.010771', '2021-03-03 15:38:27.086069', 8, 1); | ||||
| -- ---------------------------- | ||||
| -- Table structure for permission_userprofile_post | ||||
| -- ---------------------------- | ||||
|  | @ -52,8 +52,8 @@ INSERT INTO `permission_userprofile` VALUES (2, 'pbkdf2_sha256$150000$5Z9LSi7LpN | |||
| -- ---------------------------- | ||||
| -- Records of permission_userprofile_post | ||||
| -- ---------------------------- | ||||
| INSERT INTO `permission_userprofile_post` VALUES (1, 1, 1); | ||||
| INSERT INTO `permission_userprofile_post` VALUES (2, 2, 4); | ||||
| INSERT INTO `permission_userprofile_post` (id, userprofile_id, post_id) VALUES (1, 1, 1); | ||||
| INSERT INTO `permission_userprofile_post` (id, userprofile_id, post_id) VALUES (2, 2, 4); | ||||
| 
 | ||||
| -- ---------------------------- | ||||
| -- Table structure for permission_userprofile_role | ||||
|  | @ -72,5 +72,5 @@ INSERT INTO `permission_userprofile_post` VALUES (2, 2, 4); | |||
| -- ---------------------------- | ||||
| -- Records of permission_userprofile_role | ||||
| -- ---------------------------- | ||||
| INSERT INTO `permission_userprofile_role` VALUES (1, 1, 1); | ||||
| INSERT INTO `permission_userprofile_role` VALUES (2, 2, 2); | ||||
| INSERT INTO `permission_userprofile_role` (id, userprofile_id, role_id) VALUES (1, 1, 1); | ||||
| INSERT INTO `permission_userprofile_role` (id, userprofile_id, role_id) VALUES (2, 2, 2); | ||||
|  | @ -0,0 +1,27 @@ | |||
| -- ---------------------------- | ||||
| -- 参数设置 初始化sql | ||||
| -- Table structure for system_configsettings | ||||
| -- ---------------------------- | ||||
| -- DROP TABLE IF EXISTS `system_configsettings`; | ||||
| -- CREATE TABLE `system_configsettings` ( | ||||
| --   `id` int(11) NOT NULL AUTO_INCREMENT, | ||||
| --   `description` longtext, | ||||
| --   `creator` varchar(255) DEFAULT NULL, | ||||
| --   `modifier` varchar(255) DEFAULT NULL, | ||||
| --   `update_datetime` datetime(6) DEFAULT NULL, | ||||
| --   `create_datetime` datetime(6) DEFAULT NULL, | ||||
| --   `configName` varchar(64) NOT NULL, | ||||
| --   `configKey` varchar(256) NOT NULL, | ||||
| --   `configValue` varchar(256) NOT NULL, | ||||
| --   `configType` varchar(8) NOT NULL, | ||||
| --   `status` varchar(8) NOT NULL, | ||||
| --   `remark` varchar(256) DEFAULT NULL, | ||||
| --   PRIMARY KEY (`id`) | ||||
| -- ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; | ||||
| 
 | ||||
| -- ---------------------------- | ||||
| -- Records of system_configsettings | ||||
| -- ---------------------------- | ||||
| INSERT INTO `system_configsettings` (id, description, modifier, update_datetime, create_datetime, configName, configKey, configValue, configType, status, remark, creator_id, dept_belong_id) VALUES (1, '', 'admin', '2021-02-27 07:14:48.935587', '2021-02-27 07:14:48.935634', '主框架页-默认皮肤样式名称', 'sys.index.skinName', 'skin-blue', 'Y', '1', '蓝色 skin-blue、绿色 skin-green、紫色 skin-purple、红色 skin-red、黄色 skin-yellow', 1, 1); | ||||
| INSERT INTO `system_configsettings` (id, description, modifier, update_datetime, create_datetime, configName, configKey, configValue, configType, status, remark, creator_id, dept_belong_id) VALUES (2, '', 'admin', '2021-02-27 07:15:14.039924', '2021-02-27 07:15:14.039967', '用户管理-账号初始密码', 'sys.user.initPassword', '123456', 'Y', '1', '初始化密码 123456', 1, 1); | ||||
| INSERT INTO `system_configsettings` (id, description, modifier, update_datetime, create_datetime, configName, configKey, configValue, configType, status, remark, creator_id, dept_belong_id) VALUES (3, '', 'admin', '2021-02-27 07:15:36.091655', '2021-02-27 07:15:36.091694', '主框架页-侧边栏主题', 'sys.index.sideTheme', 'theme-dark', 'Y', '1', '深色主题theme-dark,浅色主题theme-light', 1, 1); | ||||
|  | @ -0,0 +1,35 @@ | |||
| -- ---------------------------- | ||||
| -- 字典管理初始化sql | ||||
| -- Table structure for system_dictdata | ||||
| -- ---------------------------- | ||||
| -- DROP TABLE IF EXISTS `system_dictdata`; | ||||
| -- CREATE TABLE `system_dictdata` ( | ||||
| --   `id` int(11) NOT NULL AUTO_INCREMENT, | ||||
| --   `description` longtext, | ||||
| --   `creator` varchar(255) DEFAULT NULL, | ||||
| --   `modifier` varchar(255) DEFAULT NULL, | ||||
| --   `update_datetime` datetime(6) DEFAULT NULL, | ||||
| --   `create_datetime` datetime(6) DEFAULT NULL, | ||||
| --   `dictName` varchar(64) NOT NULL, | ||||
| --   `dictType` varchar(64) NOT NULL, | ||||
| --   `status` varchar(8) NOT NULL, | ||||
| --   `remark` varchar(256) DEFAULT NULL, | ||||
| --   PRIMARY KEY (`id`) | ||||
| -- ) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; | ||||
| -- ---------------------------- | ||||
| -- Records of system_dictdata | ||||
| -- ---------------------------- | ||||
| INSERT INTO `system_dictdata` (id, description, modifier, update_datetime, create_datetime, dictName, dictType, status, remark, creator_id, dept_belong_id) VALUES (1, '', 'admin', '2021-02-27 06:22:24.215575', '2021-02-27 06:22:24.215617', '用户性别', 'sys_user_sex', '1', '用户性别列表', 1, 1); | ||||
| INSERT INTO `system_dictdata` (id, description, modifier, update_datetime, create_datetime, dictName, dictType, status, remark, creator_id, dept_belong_id) VALUES (2, '', 'admin', '2021-02-27 06:24:38.126411', '2021-02-27 06:24:38.126456', '菜单状态', 'sys_show_hide', '1', '菜单状态列表', 1, 1); | ||||
| INSERT INTO `system_dictdata` (id, description, modifier, update_datetime, create_datetime, dictName, dictType, status, remark, creator_id, dept_belong_id) VALUES (3, '', 'admin', '2021-02-27 06:24:54.943462', '2021-02-27 06:24:54.943516', '系统开关', 'sys_normal_disable', '1', '系统开关列表', 1, 1); | ||||
| INSERT INTO `system_dictdata` (id, description, modifier, update_datetime, create_datetime, dictName, dictType, status, remark, creator_id, dept_belong_id) VALUES (4, '', 'admin', '2021-02-27 06:25:16.667651', '2021-02-27 06:25:16.667697', '任务状态', 'sys_job_status', '1', '任务状态列表', 1, 1); | ||||
| INSERT INTO `system_dictdata` (id, description, modifier, update_datetime, create_datetime, dictName, dictType, status, remark, creator_id, dept_belong_id) VALUES (5, '', 'admin', '2021-02-27 06:25:34.967768', '2021-02-27 06:25:34.967812', '任务分组', 'sys_job_group', '1', '任务分组列表', 1, 1); | ||||
| INSERT INTO `system_dictdata` (id, description, modifier, update_datetime, create_datetime, dictName, dictType, status, remark, creator_id, dept_belong_id) VALUES (6, '', 'admin', '2021-02-27 06:26:01.081973', '2021-02-27 06:26:01.082016', '系统是否', 'sys_yes_no', '1', '系统是否列表', 1, 1); | ||||
| INSERT INTO `system_dictdata` (id, description, modifier, update_datetime, create_datetime, dictName, dictType, status, remark, creator_id, dept_belong_id) VALUES (7, '', 'admin', '2021-02-27 06:26:17.716100', '2021-02-27 06:26:17.716144', '通知类型', 'sys_notice_type', '1', '通知类型列表', 1, 1); | ||||
| INSERT INTO `system_dictdata` (id, description, modifier, update_datetime, create_datetime, dictName, dictType, status, remark, creator_id, dept_belong_id) VALUES (8, '', 'admin', '2021-02-27 06:26:42.305470', '2021-02-27 06:26:42.305517', '通知状态', 'sys_notice_status', '1', '通知状态列表', 1, 1); | ||||
| INSERT INTO `system_dictdata` (id, description, modifier, update_datetime, create_datetime, dictName, dictType, status, remark, creator_id, dept_belong_id) VALUES (9, '', 'admin', '2021-02-27 06:26:57.913406', '2021-02-27 06:26:57.913457', '操作类型', 'sys_oper_type', '1', '操作类型列表', 1, 1); | ||||
| INSERT INTO `system_dictdata` (id, description, modifier, update_datetime, create_datetime, dictName, dictType, status, remark, creator_id, dept_belong_id) VALUES (10, '', 'admin', '2021-02-27 06:27:16.392863', '2021-02-27 06:27:16.392961', '系统状态', 'sys_common_status', '1', '登录状态列表', 1, 1); | ||||
| INSERT INTO `system_dictdata` (id, description, modifier, update_datetime, create_datetime, dictName, dictType, status, remark, creator_id, dept_belong_id) VALUES (11, '', 'admin', '2021-02-27 07:59:30.310069', '2021-02-27 07:59:30.310115', '菜单类型', 'sys_menu_type', '1', '菜单类型', 1, 1); | ||||
| INSERT INTO `system_dictdata` (id, description, modifier, update_datetime, create_datetime, dictName, dictType, status, remark, creator_id, dept_belong_id) VALUES (12, '', 'admin', '2021-02-27 07:59:47.677379', '2021-02-27 07:59:47.677423', '接口请求方式', 'sys_interface_method', '1', '接口请求方式', 1, 1); | ||||
| INSERT INTO `system_dictdata` (id, description, modifier, update_datetime, create_datetime, dictName, dictType, status, remark, creator_id, dept_belong_id) VALUES (13, '', 'admin', '2021-03-07 15:06:34.123188', '2021-03-07 14:27:51.286902', '消息类型', 'sys_message_push_type', '1', '消息通知类型', 1, 1); | ||||
| INSERT INTO `system_dictdata` (id, description, modifier, update_datetime, create_datetime, dictName, dictType, status, remark, creator_id, dept_belong_id) VALUES (14, '', 'admin', '2021-03-07 15:06:38.891604', '2021-03-07 15:06:00.930057', '消息状态', 'sys_message_push_status', '1', '消息通知状态', 1, 1); | ||||
|  | @ -0,0 +1,70 @@ | |||
| -- ---------------------------- | ||||
| -- 字典详情初始化sql | ||||
| -- Table structure for system_dictdetails | ||||
| -- ---------------------------- | ||||
| -- DROP TABLE IF EXISTS `system_dictdetails`; | ||||
| -- CREATE TABLE `system_dictdetails` ( | ||||
| --   `id` int(11) NOT NULL AUTO_INCREMENT, | ||||
| --   `description` longtext, | ||||
| --   `creator` varchar(255) DEFAULT NULL, | ||||
| --   `modifier` varchar(255) DEFAULT NULL, | ||||
| --   `update_datetime` datetime(6) DEFAULT NULL, | ||||
| --   `create_datetime` datetime(6) DEFAULT NULL, | ||||
| --   `dictLabel` varchar(64) NOT NULL, | ||||
| --   `dictValue` varchar(256) NOT NULL, | ||||
| --   `is_default` tinyint(1) NOT NULL, | ||||
| --   `status` varchar(2) NOT NULL, | ||||
| --   `sort` varchar(256) NOT NULL, | ||||
| --   `remark` varchar(256) DEFAULT NULL, | ||||
| --   `dict_data_id` int(11) NOT NULL, | ||||
| --   PRIMARY KEY (`id`), | ||||
| --   KEY `system_dictdetails_dict_data_id_0bfceb37_fk_system_dictdata_id` (`dict_data_id`), | ||||
| --   CONSTRAINT `system_dictdetails_dict_data_id_0bfceb37_fk_system_dictdata_id` FOREIGN KEY (`dict_data_id`) REFERENCES `system_dictdata` (`id`) | ||||
| -- ) ENGINE=InnoDB AUTO_INCREMENT=40 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; | ||||
| 
 | ||||
| -- ---------------------------- | ||||
| -- Records of system_dictdetails | ||||
| -- ---------------------------- | ||||
| INSERT INTO `system_dictdetails` (id, description, modifier, update_datetime, create_datetime, dictLabel, dictValue, is_default, status, sort, remark, creator_id, dict_data_id, dept_belong_id) VALUES (1, '', 'admin', '2021-02-27 07:10:41.679229', '2021-02-27 06:28:44.246112', '男', '0', 0, '1', '1', '性别男', 1, 1, 1); | ||||
| INSERT INTO `system_dictdetails` (id, description, modifier, update_datetime, create_datetime, dictLabel, dictValue, is_default, status, sort, remark, creator_id, dict_data_id, dept_belong_id) VALUES (2, '', 'admin', '2021-02-27 06:29:33.556002', '2021-02-27 06:29:03.591400', '女', '1', 0, '1', '2', '性别女', 1, 1, 1); | ||||
| INSERT INTO `system_dictdetails` (id, description, modifier, update_datetime, create_datetime, dictLabel, dictValue, is_default, status, sort, remark, creator_id, dict_data_id, dept_belong_id) VALUES (3, '', 'admin', '2021-02-27 06:29:51.943789', '2021-02-27 06:29:17.544082', '未知', '2', 1, '1', '3', '性别未知', 1, 1, 1); | ||||
| INSERT INTO `system_dictdetails` (id, description, modifier, update_datetime, create_datetime, dictLabel, dictValue, is_default, status, sort, remark, creator_id, dict_data_id, dept_belong_id) VALUES (4, '', 'admin', '2021-02-27 07:10:27.513951', '2021-02-27 06:31:38.884136', '显示', '1', 1, '1', '1', '显示菜单', 1, 2, 1); | ||||
| INSERT INTO `system_dictdetails` (id, description, modifier, update_datetime, create_datetime, dictLabel, dictValue, is_default, status, sort, remark, creator_id, dict_data_id, dept_belong_id) VALUES (5, '', 'admin', '2021-02-27 07:10:30.824117', '2021-02-27 06:33:07.491136', '隐藏', '0', 0, '1', '2', '隐藏菜单', 1, 2, 1); | ||||
| INSERT INTO `system_dictdetails` (id, description, modifier, update_datetime, create_datetime, dictLabel, dictValue, is_default, status, sort, remark, creator_id, dict_data_id, dept_belong_id) VALUES (6, '', 'admin', '2021-02-27 07:00:47.233161', '2021-02-27 07:00:47.233220', '正常', '1', 1, '1', '1', '正常状态', 1, 3, 1); | ||||
| INSERT INTO `system_dictdetails` (id, description, modifier, update_datetime, create_datetime, dictLabel, dictValue, is_default, status, sort, remark, creator_id, dict_data_id, dept_belong_id) VALUES (7, '', 'admin', '2021-02-27 07:01:02.598169', '2021-02-27 07:01:02.598213', '停用', '0', 0, '1', '2', '停用状态', 1, 3, 1); | ||||
| INSERT INTO `system_dictdetails` (id, description, modifier, update_datetime, create_datetime, dictLabel, dictValue, is_default, status, sort, remark, creator_id, dict_data_id, dept_belong_id) VALUES (8, '', 'admin', '2021-02-27 07:02:03.014319', '2021-02-27 07:01:43.750881', '正常', '1', 1, '1', '1', '正常状态', 1, 4, 1); | ||||
| INSERT INTO `system_dictdetails` (id, description, modifier, update_datetime, create_datetime, dictLabel, dictValue, is_default, status, sort, remark, creator_id, dict_data_id, dept_belong_id) VALUES (9, '', 'admin', '2021-02-27 07:01:58.880996', '2021-02-27 07:01:58.881040', '暂停', '0', 0, '1', '2', '停用状态', 1, 4, 1); | ||||
| INSERT INTO `system_dictdetails` (id, description, modifier, update_datetime, create_datetime, dictLabel, dictValue, is_default, status, sort, remark, creator_id, dict_data_id, dept_belong_id) VALUES (10, '', 'admin', '2021-02-27 07:02:51.415658', '2021-02-27 07:02:51.415703', '默认', 'DEFAULT', 1, '1', '1', '默认分组', 1, 5, 1); | ||||
| INSERT INTO `system_dictdetails` (id, description, modifier, update_datetime, create_datetime, dictLabel, dictValue, is_default, status, sort, remark, creator_id, dict_data_id, dept_belong_id) VALUES (11, '', 'admin', '2021-02-27 07:03:13.560650', '2021-02-27 07:03:13.560696', '系统', 'SYSTEM', 0, '1', '2', '系统分组', 1, 5, 1); | ||||
| INSERT INTO `system_dictdetails` (id, description, modifier, update_datetime, create_datetime, dictLabel, dictValue, is_default, status, sort, remark, creator_id, dict_data_id, dept_belong_id) VALUES (12, '', 'admin', '2021-02-27 07:03:42.729915', '2021-02-27 07:03:42.729966', '是', 'Y', 1, '1', '1', '系统默认是', 1, 6, 1); | ||||
| INSERT INTO `system_dictdetails` (id, description, modifier, update_datetime, create_datetime, dictLabel, dictValue, is_default, status, sort, remark, creator_id, dict_data_id, dept_belong_id) VALUES (13, '', 'admin', '2021-02-27 07:04:01.389829', '2021-02-27 07:04:01.389872', '否', 'N', 0, '1', '2', '系统默认否', 1, 6, 1); | ||||
| INSERT INTO `system_dictdetails` (id, description, modifier, update_datetime, create_datetime, dictLabel, dictValue, is_default, status, sort, remark, creator_id, dict_data_id, dept_belong_id) VALUES (14, '', 'admin', '2021-02-27 07:04:25.094873', '2021-02-27 07:04:25.094917', '通知', '1', 1, '1', '1', '通知', 1, 7, 1); | ||||
| INSERT INTO `system_dictdetails` (id, description, modifier, update_datetime, create_datetime, dictLabel, dictValue, is_default, status, sort, remark, creator_id, dict_data_id, dept_belong_id) VALUES (15, '', 'admin', '2021-02-27 07:04:48.136899', '2021-02-27 07:04:48.136942', '公告', '2', 0, '1', '2', '公告', 1, 7, 1); | ||||
| INSERT INTO `system_dictdetails` (id, description, modifier, update_datetime, create_datetime, dictLabel, dictValue, is_default, status, sort, remark, creator_id, dict_data_id, dept_belong_id) VALUES (16, '', 'admin', '2021-02-27 07:05:19.801756', '2021-02-27 07:05:14.206563', '正常', '1', 1, '1', '1', '正常状态', 1, 8, 1); | ||||
| INSERT INTO `system_dictdetails` (id, description, modifier, update_datetime, create_datetime, dictLabel, dictValue, is_default, status, sort, remark, creator_id, dict_data_id, dept_belong_id) VALUES (17, '', 'admin', '2021-02-27 07:05:37.420621', '2021-02-27 07:05:37.420665', '关闭', '0', 0, '1', '2', '关闭状态', 1, 8, 1); | ||||
| INSERT INTO `system_dictdetails` (id, description, modifier, update_datetime, create_datetime, dictLabel, dictValue, is_default, status, sort, remark, creator_id, dict_data_id, dept_belong_id) VALUES (18, '', 'admin', '2021-02-27 07:06:46.397742', '2021-02-27 07:06:10.700351', '新增', '1', 0, '1', '1', '新增操作', 1, 9, 1); | ||||
| INSERT INTO `system_dictdetails` (id, description, modifier, update_datetime, create_datetime, dictLabel, dictValue, is_default, status, sort, remark, creator_id, dict_data_id, dept_belong_id) VALUES (19, '', 'admin', '2021-02-27 07:06:24.688730', '2021-02-27 07:06:24.688786', '修改', '2', 0, '1', '2', '修改操作', 1, 9, 1); | ||||
| INSERT INTO `system_dictdetails` (id, description, modifier, update_datetime, create_datetime, dictLabel, dictValue, is_default, status, sort, remark, creator_id, dict_data_id, dept_belong_id) VALUES (20, '', 'admin', '2021-02-27 07:06:43.320943', '2021-02-27 07:06:43.320988', '删除', '3', 0, '1', '3', '删除操作', 1, 9, 1); | ||||
| INSERT INTO `system_dictdetails` (id, description, modifier, update_datetime, create_datetime, dictLabel, dictValue, is_default, status, sort, remark, creator_id, dict_data_id, dept_belong_id) VALUES (21, '', 'admin', '2021-02-27 07:07:00.508951', '2021-02-27 07:07:00.508996', '授权', '4', 0, '1', '4', '授权操作', 1, 9, 1); | ||||
| INSERT INTO `system_dictdetails` (id, description, modifier, update_datetime, create_datetime, dictLabel, dictValue, is_default, status, sort, remark, creator_id, dict_data_id, dept_belong_id) VALUES (22, '', 'admin', '2021-02-27 07:07:38.550527', '2021-02-27 07:07:38.550573', '导出', '5', 0, '1', '5', '导出操作', 1, 9, 1); | ||||
| INSERT INTO `system_dictdetails` (id, description, modifier, update_datetime, create_datetime, dictLabel, dictValue, is_default, status, sort, remark, creator_id, dict_data_id, dept_belong_id) VALUES (23, '', 'admin', '2021-02-27 07:08:09.294696', '2021-02-27 07:08:09.294743', '导入', '6', 0, '1', '6', '导入操作', 1, 9, 1); | ||||
| INSERT INTO `system_dictdetails` (id, description, modifier, update_datetime, create_datetime, dictLabel, dictValue, is_default, status, sort, remark, creator_id, dict_data_id, dept_belong_id) VALUES (24, '', 'admin', '2021-02-27 07:08:32.640718', '2021-02-27 07:08:32.640763', '强退', '7', 0, '1', '7', '强退操作', 1, 9, 1); | ||||
| INSERT INTO `system_dictdetails` (id, description, modifier, update_datetime, create_datetime, dictLabel, dictValue, is_default, status, sort, remark, creator_id, dict_data_id, dept_belong_id) VALUES (25, '', 'admin', '2021-02-27 07:08:47.559833', '2021-02-27 07:08:47.559887', '生成', '8', 0, '1', '8', '生成操作', 1, 9, 1); | ||||
| INSERT INTO `system_dictdetails` (id, description, modifier, update_datetime, create_datetime, dictLabel, dictValue, is_default, status, sort, remark, creator_id, dict_data_id, dept_belong_id) VALUES (26, '', 'admin', '2021-02-27 07:09:13.410371', '2021-02-27 07:09:04.346547', '清空', '9', 0, '1', '9', '清空操作', 1, 9, 1); | ||||
| INSERT INTO `system_dictdetails` (id, description, modifier, update_datetime, create_datetime, dictLabel, dictValue, is_default, status, sort, remark, creator_id, dict_data_id, dept_belong_id) VALUES (27, '', 'admin', '2021-02-27 07:09:37.467839', '2021-02-27 07:09:37.467883', '正常', '1', 0, '1', '1', '正常状态', 1, 10, 1); | ||||
| INSERT INTO `system_dictdetails` (id, description, modifier, update_datetime, create_datetime, dictLabel, dictValue, is_default, status, sort, remark, creator_id, dict_data_id, dept_belong_id) VALUES (28, '', 'admin', '2021-02-27 07:10:17.235559', '2021-02-27 07:10:02.980623', '停用', '0', 0, '1', '2', '停用状态', 1, 10, 1); | ||||
| INSERT INTO `system_dictdetails` (id, description, modifier, update_datetime, create_datetime, dictLabel, dictValue, is_default, status, sort, remark, creator_id, dict_data_id, dept_belong_id) VALUES (29, '', 'admin', '2021-02-27 08:00:07.361327', '2021-02-27 08:00:07.361371', '目录', '0', 1, '1', '1', '目录', 1, 11, 1); | ||||
| INSERT INTO `system_dictdetails` (id, description, modifier, update_datetime, create_datetime, dictLabel, dictValue, is_default, status, sort, remark, creator_id, dict_data_id, dept_belong_id) VALUES (30, '', 'admin', '2021-02-27 08:00:27.832697', '2021-02-27 08:00:22.160349', '菜单', '1', 0, '1', '2', '菜单', 1, 11, 1); | ||||
| INSERT INTO `system_dictdetails` (id, description, modifier, update_datetime, create_datetime, dictLabel, dictValue, is_default, status, sort, remark, creator_id, dict_data_id, dept_belong_id) VALUES (31, '', 'admin', '2021-02-27 08:00:45.794325', '2021-02-27 08:00:45.794369', '按钮', '2', 0, '1', '3', '按钮', 1, 11, 1); | ||||
| INSERT INTO `system_dictdetails` (id, description, modifier, update_datetime, create_datetime, dictLabel, dictValue, is_default, status, sort, remark, creator_id, dict_data_id, dept_belong_id) VALUES (32, '', 'admin', '2021-02-27 08:02:22.957299', '2021-02-27 08:02:22.957364', 'GET', 'GET', 1, '1', '1', NULL, 1, 12, 1); | ||||
| INSERT INTO `system_dictdetails` (id, description, modifier, update_datetime, create_datetime, dictLabel, dictValue, is_default, status, sort, remark, creator_id, dict_data_id, dept_belong_id) VALUES (33, '', 'admin', '2021-02-27 08:02:37.650203', '2021-02-27 08:02:37.650291', 'POST', 'POST', 0, '1', '2', NULL, 1, 12, 1); | ||||
| INSERT INTO `system_dictdetails` (id, description, modifier, update_datetime, create_datetime, dictLabel, dictValue, is_default, status, sort, remark, creator_id, dict_data_id, dept_belong_id) VALUES (34, '', 'admin', '2021-02-27 08:02:56.731151', '2021-02-27 08:02:56.731262', 'PUT', 'PUT', 0, '1', '3', NULL, 1, 12, 1); | ||||
| INSERT INTO `system_dictdetails` (id, description, modifier, update_datetime, create_datetime, dictLabel, dictValue, is_default, status, sort, remark, creator_id, dict_data_id, dept_belong_id) VALUES (35, '', 'admin', '2021-02-27 08:03:19.639542', '2021-02-27 08:03:19.639611', 'PATCH', 'PATCH', 0, '1', '4', NULL, 1, 12, 1); | ||||
| INSERT INTO `system_dictdetails` (id, description, modifier, update_datetime, create_datetime, dictLabel, dictValue, is_default, status, sort, remark, creator_id, dict_data_id, dept_belong_id) VALUES (36, '', 'admin', '2021-02-27 08:03:31.746528', '2021-02-27 08:03:31.746574', 'DELETE', 'DELETE', 0, '1', '5', NULL, 1, 12, 1); | ||||
| INSERT INTO `system_dictdetails` (id, description, modifier, update_datetime, create_datetime, dictLabel, dictValue, is_default, status, sort, remark, creator_id, dict_data_id, dept_belong_id) VALUES (37, '', 'admin', '2021-02-27 08:03:41.277335', '2021-02-27 08:03:41.277383', 'HEAD', 'HEAD', 0, '0', '6', NULL, 1, 12, 1); | ||||
| INSERT INTO `system_dictdetails` (id, description, modifier, update_datetime, create_datetime, dictLabel, dictValue, is_default, status, sort, remark, creator_id, dict_data_id, dept_belong_id) VALUES (38, '', 'admin', '2021-02-27 08:03:50.891906', '2021-02-27 08:03:50.891950', 'OPTIONS', 'OPTIONS', 0, '0', '7', NULL, 1, 12, 1); | ||||
| INSERT INTO `system_dictdetails` (id, description, modifier, update_datetime, create_datetime, dictLabel, dictValue, is_default, status, sort, remark, creator_id, dict_data_id, dept_belong_id) VALUES (39, '', 'admin', '2021-02-27 08:04:00.460564', '2021-02-27 08:04:00.460610', 'TRACE', 'TRACE', 0, '0', '8', NULL, 1, 12, 1); | ||||
| INSERT INTO `system_dictdetails` (id, description, modifier, update_datetime, create_datetime, dictLabel, dictValue, is_default, status, sort, remark, creator_id, dict_data_id, dept_belong_id) VALUES (40, '', 'admin', '2021-03-07 14:29:10.529482', '2021-03-07 14:29:10.529513', '消息通知', '1', 1, '1', '1', '消息通知', 1, 13, 1); | ||||
| INSERT INTO `system_dictdetails` (id, description, modifier, update_datetime, create_datetime, dictLabel, dictValue, is_default, status, sort, remark, creator_id, dict_data_id, dept_belong_id) VALUES (41, '', 'admin', '2021-03-07 14:29:40.480856', '2021-03-07 14:29:26.851952', '文件下发', '2', 0, '1', '2', '文件下发', 1, 13, 1); | ||||
| INSERT INTO `system_dictdetails` (id, description, modifier, update_datetime, create_datetime, dictLabel, dictValue, is_default, status, sort, remark, creator_id, dict_data_id, dept_belong_id) VALUES (42, '', 'admin', '2021-03-07 15:07:23.204077', '2021-03-07 15:07:23.204107', '待发送', '1', 1, '1', '1', '消息发送状态:待发送', 1, 14, 1); | ||||
| INSERT INTO `system_dictdetails` (id, description, modifier, update_datetime, create_datetime, dictLabel, dictValue, is_default, status, sort, remark, creator_id, dict_data_id, dept_belong_id) VALUES (43, '', 'admin', '2021-03-07 15:07:31.927366', '2021-03-07 15:07:31.927397', '已发送', '2', 0, '1', '2', '消息发送状态:已发送', 1, 14, 1); | ||||
|  | @ -0,0 +1 @@ | |||
| 
 | ||||
|  | @ -2,5 +2,5 @@ from django.apps import AppConfig | |||
| 
 | ||||
| 
 | ||||
| class PermissionConfig(AppConfig): | ||||
|     name = 'permission' | ||||
|     name = 'vadmin.system' | ||||
|     verbose_name = "权限管理" | ||||
|  | @ -0,0 +1,84 @@ | |||
| import django_filters | ||||
| 
 | ||||
| from .models import LoginInfor, OperationLog | ||||
| from ..system.models import DictDetails, DictData, ConfigSettings, MessagePush, SaveFile | ||||
| 
 | ||||
| 
 | ||||
| class DictDataFilter(django_filters.rest_framework.FilterSet): | ||||
|     """ | ||||
|     字典管理 简单过滤器 | ||||
|     """ | ||||
|     dictName = django_filters.CharFilter(lookup_expr='icontains') | ||||
| 
 | ||||
|     class Meta: | ||||
|         model = DictData | ||||
|         fields = '__all__' | ||||
| 
 | ||||
| 
 | ||||
| class DictDetailsFilter(django_filters.rest_framework.FilterSet): | ||||
|     """ | ||||
|     字典详情 简单过滤器 | ||||
|     """ | ||||
|     dictLabel = django_filters.CharFilter(lookup_expr='icontains') | ||||
|     dictType = django_filters.CharFilter(field_name='dict_data__dictType') | ||||
| 
 | ||||
|     class Meta: | ||||
|         model = DictDetails | ||||
|         fields = '__all__' | ||||
| 
 | ||||
| 
 | ||||
| class ConfigSettingsFilter(django_filters.rest_framework.FilterSet): | ||||
|     """ | ||||
|     参数设置 简单过滤器 | ||||
|     """ | ||||
|     configName = django_filters.CharFilter(lookup_expr='icontains') | ||||
| 
 | ||||
|     class Meta: | ||||
|         model = ConfigSettings | ||||
|         fields = '__all__' | ||||
| 
 | ||||
| 
 | ||||
| class SaveFileFilter(django_filters.rest_framework.FilterSet): | ||||
|     """ | ||||
|     文件管理 简单过滤器 | ||||
|     """ | ||||
|     name = django_filters.CharFilter(lookup_expr='icontains') | ||||
| 
 | ||||
|     class Meta: | ||||
|         model = SaveFile | ||||
|         exclude = ('file',) | ||||
| 
 | ||||
| 
 | ||||
| class MessagePushFilter(django_filters.rest_framework.FilterSet): | ||||
|     """ | ||||
|     消息通知 简单过滤器 | ||||
|     """ | ||||
| 
 | ||||
|     # is_read = django_filters.CharFilter(field_name='messagepushuser_message_push__is_read') | ||||
|     title = django_filters.CharFilter(lookup_expr='icontains') | ||||
| 
 | ||||
|     class Meta: | ||||
|         model = MessagePush | ||||
|         fields = '__all__' | ||||
| 
 | ||||
| 
 | ||||
| class LoginInforFilter(django_filters.rest_framework.FilterSet): | ||||
|     """ | ||||
|     登录日志 简单过滤器 | ||||
|     """ | ||||
| 
 | ||||
|     class Meta: | ||||
|         model = LoginInfor | ||||
|         fields = '__all__' | ||||
| 
 | ||||
| 
 | ||||
| class OperationLogFilter(django_filters.rest_framework.FilterSet): | ||||
|     """ | ||||
|     操作日志 简单过滤器 | ||||
|     """ | ||||
|     request_modular = django_filters.CharFilter(lookup_expr='icontains') | ||||
|     creator_username = django_filters.CharFilter(field_name='creator__username', lookup_expr='icontains') | ||||
| 
 | ||||
|     class Meta: | ||||
|         model = OperationLog | ||||
|         fields = '__all__' | ||||
|  | @ -4,4 +4,7 @@ from ..models.dict_details import DictDetails | |||
| from ..models.web_set import WebSet | ||||
| from ..models.save_file import SaveFile | ||||
| from ..models.message_push import MessagePush | ||||
| from ..models.message_push import MessagePushUser | ||||
| from ..models.logininfor import LoginInfor | ||||
| from ..models.operation_log import OperationLog | ||||
| 
 | ||||
|  | @ -1,6 +1,6 @@ | |||
| from django.db.models import CharField, ForeignKey, BooleanField, CASCADE | ||||
| 
 | ||||
| from apps.op_drf.models import CoreModel | ||||
| from ...op_drf.models import CoreModel | ||||
| 
 | ||||
| 
 | ||||
| class ConfigSettings(CoreModel): | ||||
|  | @ -1,6 +1,6 @@ | |||
| from django.db.models import TextField, CharField,ForeignKey | ||||
| 
 | ||||
| from apps.op_drf.models import CoreModel | ||||
| from ...op_drf.models import CoreModel | ||||
| 
 | ||||
| 
 | ||||
| class DictData(CoreModel): | ||||
|  | @ -1,6 +1,6 @@ | |||
| from django.db.models import CharField, ForeignKey, BooleanField, CASCADE | ||||
| 
 | ||||
| from apps.op_drf.models import CoreModel | ||||
| from ...op_drf.models import CoreModel | ||||
| 
 | ||||
| 
 | ||||
| class DictDetails(CoreModel): | ||||
|  | @ -9,9 +9,14 @@ class DictDetails(CoreModel): | |||
|     is_default = BooleanField(verbose_name="是否默认", default=False) | ||||
|     status = CharField(max_length=2, verbose_name="字典状态") | ||||
|     sort = CharField(max_length=256, verbose_name="字典排序") | ||||
|     dict_data = ForeignKey(to='DictData', on_delete=CASCADE, verbose_name="关联字典",db_constraint=False) | ||||
|     dict_data = ForeignKey(to='DictData', on_delete=CASCADE, verbose_name="关联字典", db_constraint=False) | ||||
|     remark = CharField(max_length=256, verbose_name="备注", null=True, blank=True) | ||||
| 
 | ||||
|     @classmethod | ||||
|     def get_default_dictValue(cls, dictName): | ||||
|         instance = DictDetails.objects.filter(dict_data__dictName=dictName, is_default=True).first() | ||||
|         return instance and instance.dictValue | ||||
| 
 | ||||
|     class Meta: | ||||
|         verbose_name = '字典详情' | ||||
|         verbose_name_plural = verbose_name | ||||
|  | @ -0,0 +1,20 @@ | |||
| from django.db.models import CharField, BooleanField | ||||
| 
 | ||||
| from ...op_drf.models import CoreModel | ||||
| 
 | ||||
| 
 | ||||
| class LoginInfor(CoreModel): | ||||
|     session_id = CharField(max_length=64, verbose_name="会话标识", null=True, blank=True) | ||||
|     browser = CharField(max_length=64, verbose_name="浏览器") | ||||
|     ipaddr = CharField(max_length=32, verbose_name="ip地址", null=True, blank=True) | ||||
|     loginLocation = CharField(max_length=64, verbose_name="登录位置", null=True, blank=True) | ||||
|     msg = CharField(max_length=64, verbose_name="操作信息", null=True, blank=True) | ||||
|     os = CharField(max_length=64, verbose_name="操作系统", null=True, blank=True) | ||||
|     status = BooleanField(default=False, verbose_name="登录状态") | ||||
| 
 | ||||
|     class Meta: | ||||
|         verbose_name = '登录日志' | ||||
|         verbose_name_plural = verbose_name | ||||
| 
 | ||||
|     def __str__(self): | ||||
|         return f"{self.creator and self.creator.name}" | ||||
|  | @ -1,9 +1,9 @@ | |||
| from django.db import models | ||||
| from django.db.models import * | ||||
| 
 | ||||
| from apps.op_drf.fields import UpdateDateTimeField, CreateDateTimeField | ||||
| from apps.op_drf.models import CoreModel | ||||
| from apps.permission.models import UserProfile | ||||
| from ...op_drf.fields import UpdateDateTimeField, CreateDateTimeField | ||||
| from ...op_drf.models import CoreModel | ||||
| from ...permission.models import UserProfile | ||||
| 
 | ||||
| """ | ||||
| 消息通知模型 | ||||
|  | @ -13,15 +13,16 @@ from apps.permission.models import UserProfile | |||
| class MessagePush(CoreModel): | ||||
|     title = CharField(max_length=128, verbose_name="通知标题") | ||||
|     content = TextField(verbose_name="通知内容") | ||||
|     message_type = CharField(max_length=8, verbose_name="消息类型") | ||||
|     message_type = CharField(max_length=8, verbose_name="通知类型") | ||||
|     is_reviewed = BooleanField(default=True, verbose_name="是否审核") | ||||
|     status = CharField(max_length=8, verbose_name="消息状态") | ||||
|     status = CharField(max_length=8, verbose_name="通知状态") | ||||
|     to_path = CharField(max_length=256, verbose_name="跳转路径", null=True, blank=True, ) | ||||
|     user = ManyToManyField(to="permission.UserProfile", | ||||
|                            related_name="user", related_query_name="user_query", through='MessagePushUser', | ||||
|                            through_fields=('message_push', 'user')) | ||||
| 
 | ||||
|     class Meta: | ||||
|         verbose_name = '消息通知' | ||||
|         verbose_name = '通知公告' | ||||
|         verbose_name_plural = verbose_name | ||||
| 
 | ||||
|     def __str__(self): | ||||
|  | @ -41,5 +42,5 @@ class MessagePushUser(models.Model): | |||
|     create_datetime = CreateDateTimeField()  # 创建时间 | ||||
| 
 | ||||
|     class Meta: | ||||
|         verbose_name = "消息通知与用户关系" | ||||
|         verbose_name = "通知公告与用户关系" | ||||
|         verbose_name_plural = verbose_name | ||||
|  | @ -0,0 +1,25 @@ | |||
| from django.db.models import TextField, CharField, BooleanField | ||||
| 
 | ||||
| from ...op_drf.models import CoreModel | ||||
| 
 | ||||
| 
 | ||||
| class OperationLog(CoreModel): | ||||
|     request_modular = CharField(max_length=64, verbose_name="请求模块", null=True, blank=True) | ||||
|     request_path = CharField(max_length=400, verbose_name="请求地址", null=True, blank=True) | ||||
|     request_body = TextField(verbose_name="请求参数", null=True, blank=True) | ||||
|     request_method = CharField(max_length=64, verbose_name="请求方式", null=True, blank=True) | ||||
|     request_msg = TextField(verbose_name="操作说明", null=True, blank=True) | ||||
|     request_ip = CharField(max_length=32, verbose_name="请求ip地址", null=True, blank=True) | ||||
|     request_browser = CharField(max_length=32, verbose_name="请求浏览器", null=True, blank=True) | ||||
|     response_code = CharField(max_length=32, verbose_name="响应状态码", null=True, blank=True) | ||||
|     request_location = CharField(max_length=32, verbose_name="操作地点", null=True, blank=True) | ||||
|     request_os = CharField(max_length=64, verbose_name="操作系统", null=True, blank=True) | ||||
|     json_result = TextField(verbose_name="返回信息", null=True, blank=True) | ||||
|     status = BooleanField(default=False, verbose_name="响应状态") | ||||
| 
 | ||||
|     class Meta: | ||||
|         verbose_name = '操作日志' | ||||
|         verbose_name_plural = verbose_name | ||||
| 
 | ||||
|     def __str__(self): | ||||
|         return f"{self.request_msg}[{self.request_modular}]" | ||||
|  | @ -4,7 +4,7 @@ import uuid | |||
| from django.db.models import CharField, FileField,BooleanField | ||||
| from django.utils import timezone | ||||
| 
 | ||||
| from apps.op_drf.models import CoreModel | ||||
| from ...op_drf.models import CoreModel | ||||
| 
 | ||||
| 
 | ||||
| def files_path(instance, filename): | ||||
|  | @ -1,6 +1,6 @@ | |||
| from django.db.models import TextField, CharField | ||||
| 
 | ||||
| from apps.op_drf.models import CoreModel | ||||
| from ...op_drf.models import CoreModel | ||||
| 
 | ||||
| 
 | ||||
| class WebSet(CoreModel): | ||||
|  | @ -1,8 +1,8 @@ | |||
| from rest_framework import serializers | ||||
| 
 | ||||
| from apps.op_drf.serializers import CustomModelSerializer | ||||
| from apps.permission.serializers import UserProfileSerializer | ||||
| from apps.system.models import DictData, DictDetails, ConfigSettings, SaveFile, MessagePush | ||||
| from .models import LoginInfor, OperationLog | ||||
| from ..op_drf.serializers import CustomModelSerializer | ||||
| from ..system.models import DictData, DictDetails, ConfigSettings, SaveFile, MessagePush, MessagePushUser | ||||
| 
 | ||||
| 
 | ||||
| # ================================================= # | ||||
|  | @ -162,11 +162,6 @@ class MessagePushSerializer(CustomModelSerializer): | |||
|     """ | ||||
|     消息通知 简单序列化器 | ||||
|     """ | ||||
|     # users = UserProfileSerializer(read_only=True) | ||||
|     users = serializers.SerializerMethodField(read_only=True) | ||||
| 
 | ||||
|     def get_users(self, obj): | ||||
|         return UserProfileSerializer(obj.user.all(), many=True).data | ||||
| 
 | ||||
|     class Meta: | ||||
|         model = MessagePush | ||||
|  | @ -198,5 +193,83 @@ class ExportMessagePushSerializer(CustomModelSerializer): | |||
|     class Meta: | ||||
|         model = MessagePush | ||||
|         fields = ( | ||||
|         'id', 'title', 'content', 'message_type', 'is_reviewed', 'status', 'users', 'creator', 'modifier', | ||||
|         'update_datetime', 'create_datetime') | ||||
|             'id', 'title', 'content', 'message_type', 'is_reviewed', 'status', 'users', 'creator', 'modifier', | ||||
|             'update_datetime', 'create_datetime') | ||||
| 
 | ||||
| 
 | ||||
| class MessagePushUserSerializer(CustomModelSerializer): | ||||
|     """ | ||||
|     消息通知 用户查询简单序列化器 | ||||
|     """ | ||||
|     # users = UserProfileSerializer(read_only=True) | ||||
|     # users = serializers.SerializerMethodField(read_only=True) | ||||
|     is_read = serializers.SerializerMethodField(read_only=True) | ||||
| 
 | ||||
|     # def get_users(self, obj): | ||||
|     #     return UserProfileSerializer(obj.user.all(), many=True).data | ||||
|     # 返回这个消息是否已读 | ||||
|     def get_is_read(self, obj): | ||||
|         object = MessagePushUser.objects.filter(message_push=obj, user=self.context.get('request').user).first() | ||||
|         return object.is_read if object else False | ||||
| 
 | ||||
|     class Meta: | ||||
|         model = MessagePush | ||||
|         fields = "__all__" | ||||
| 
 | ||||
|     def save(self, **kwargs): | ||||
|         return super().save(**kwargs) | ||||
| 
 | ||||
| 
 | ||||
| # ================================================= # | ||||
| # ************** 登录日志 序列化器  ************** # | ||||
| # ================================================= # | ||||
| 
 | ||||
| class LoginInforSerializer(CustomModelSerializer): | ||||
|     """ | ||||
|     登录日志 简单序列化器 | ||||
|     """ | ||||
|     creator_name = serializers.SlugRelatedField(slug_field="username", source="creator", read_only=True) | ||||
| 
 | ||||
|     class Meta: | ||||
|         model = LoginInfor | ||||
|         fields = "__all__" | ||||
| 
 | ||||
| 
 | ||||
| class ExportLoginInforSerializer(CustomModelSerializer): | ||||
|     """ | ||||
|     导出 登录日志 简单序列化器 | ||||
|     """ | ||||
|     creator_name = serializers.SlugRelatedField(slug_field="username", source="creator", read_only=True) | ||||
| 
 | ||||
|     class Meta: | ||||
|         model = LoginInfor | ||||
|         fields = ('id', 'creator_name', 'ipaddr', 'loginLocation', 'browser', 'os', | ||||
|                   'status', 'msg', 'creator_name') | ||||
| 
 | ||||
| 
 | ||||
| # ================================================= # | ||||
| # ************** 操作日志 序列化器  ************** # | ||||
| # ================================================= # | ||||
| 
 | ||||
| class OperationLogSerializer(CustomModelSerializer): | ||||
|     """ | ||||
|     操作日志 简单序列化器 | ||||
|     """ | ||||
|     creator_name = serializers.SlugRelatedField(slug_field="username", source="creator", read_only=True) | ||||
| 
 | ||||
|     class Meta: | ||||
|         model = OperationLog | ||||
|         fields = "__all__" | ||||
| 
 | ||||
| 
 | ||||
| class ExportOperationLogSerializer(CustomModelSerializer): | ||||
|     """ | ||||
|     导出 操作日志 简单序列化器 | ||||
|     """ | ||||
|     creator_name = serializers.SlugRelatedField(slug_field="username", source="creator", read_only=True) | ||||
| 
 | ||||
|     class Meta: | ||||
|         model = OperationLog | ||||
|         fields = ('request_modular', 'request_path', 'request_body', 'request_method', 'request_msg', 'request_ip', | ||||
|                   'request_browser', 'response_code', 'request_location', 'request_os', 'json_result', 'status', | ||||
|                   'creator_name') | ||||
|  | @ -1,8 +1,9 @@ | |||
| from django.urls import re_path | ||||
| from rest_framework.routers import DefaultRouter | ||||
| 
 | ||||
| from apps.system.views import DictDataModelViewSet, DictDetailsModelViewSet, \ | ||||
|     ConfigSettingsModelViewSet, SaveFileModelViewSet, MessagePushModelViewSet, SystemInfoApiView | ||||
| from ..system.views import DictDataModelViewSet, DictDetailsModelViewSet, \ | ||||
|     ConfigSettingsModelViewSet, SaveFileModelViewSet, MessagePushModelViewSet, LoginInforModelViewSet, \ | ||||
|     OperationLogModelViewSet | ||||
| 
 | ||||
| router = DefaultRouter() | ||||
| router.register(r'dict/type', DictDataModelViewSet) | ||||
|  | @ -10,6 +11,9 @@ router.register(r'dict/data', DictDetailsModelViewSet) | |||
| router.register(r'config', ConfigSettingsModelViewSet) | ||||
| router.register(r'savefile', SaveFileModelViewSet) | ||||
| router.register(r'message', MessagePushModelViewSet) | ||||
| router.register(r'logininfor', LoginInforModelViewSet) | ||||
| router.register(r'operation_log', OperationLogModelViewSet) | ||||
| 
 | ||||
| urlpatterns = [ | ||||
|     re_path('dict/get/type/(?P<pk>.*)/', DictDetailsModelViewSet.as_view({'get': 'dict_details_list'})), | ||||
|     re_path('config/configKey/(?P<pk>.*)/', ConfigSettingsModelViewSet.as_view({'get': 'get_config_key'})), | ||||
|  | @ -24,8 +28,18 @@ urlpatterns = [ | |||
|     # 用户获取个人通知列表 | ||||
|     re_path('message/receive/', MessagePushModelViewSet.as_view({"get": "get_received_messages"})), | ||||
|     # 消息通知导出 | ||||
|     re_path('message/export/', MessagePushModelViewSet.as_view({'get': 'export',})), | ||||
| 
 | ||||
|     re_path('sys/info/', SystemInfoApiView.as_view()) | ||||
|     re_path('message/export/', MessagePushModelViewSet.as_view({'get': 'export', })), | ||||
|     # 用户个人消息列表 | ||||
|     re_path('message/user_messages/', MessagePushModelViewSet.as_view({'get': 'get_user_messages', })), | ||||
|     # 改为已读 | ||||
|     re_path('message/is_read/(?P<pk>.*)/', MessagePushModelViewSet.as_view({'put': 'update_is_read', })), | ||||
|     # 清空操作日志 | ||||
|     re_path('operation_log/clean/', OperationLogModelViewSet.as_view({'delete': 'clean_all', })), | ||||
|     # 导出操作日志 | ||||
|     re_path('operation_log/export/', OperationLogModelViewSet.as_view({'get': 'export', })), | ||||
|     # 清空登录日志 | ||||
|     re_path('logininfor/clean/', LoginInforModelViewSet.as_view({'delete': 'clean_all', })), | ||||
|     # 导出登录日志 | ||||
|     re_path('logininfor/export/', LoginInforModelViewSet.as_view({'get': 'export', })), | ||||
| ] | ||||
| urlpatterns += router.urls | ||||
|  | @ -1,18 +1,21 @@ | |||
| from django.db.models import Q | ||||
| from rest_framework.request import Request | ||||
| from rest_framework.views import APIView | ||||
| 
 | ||||
| from apps.op_drf.filters import DataLevelPermissionsFilter | ||||
| from apps.op_drf.viewsets import CustomModelViewSet | ||||
| from apps.system.filters import DictDetailsFilter, DictDataFilter, ConfigSettingsFilter | ||||
| from apps.system.models import DictData, DictDetails, ConfigSettings, SaveFile, MessagePush | ||||
| from apps.system.serializers import DictDataSerializer, DictDataCreateUpdateSerializer, DictDetailsSerializer, \ | ||||
| from .models import LoginInfor, OperationLog | ||||
| from ..op_drf.filters import DataLevelPermissionsFilter | ||||
| from ..op_drf.viewsets import CustomModelViewSet | ||||
| from ..system.filters import DictDetailsFilter, DictDataFilter, ConfigSettingsFilter, MessagePushFilter, \ | ||||
|     SaveFileFilter, LoginInforFilter, OperationLogFilter | ||||
| from ..system.models import DictData, DictDetails, ConfigSettings, SaveFile, MessagePush | ||||
| from ..system.models import MessagePushUser | ||||
| from ..system.serializers import DictDataSerializer, DictDataCreateUpdateSerializer, DictDetailsSerializer, \ | ||||
|     DictDetailsCreateUpdateSerializer, DictDetailsListSerializer, ConfigSettingsSerializer, \ | ||||
|     ConfigSettingsCreateUpdateSerializer, SaveFileSerializer, SaveFileCreateUpdateSerializer, \ | ||||
|     ExportConfigSettingsSerializer, ExportDictDataSerializer, ExportDictDetailsSerializer, \ | ||||
|     MessagePushSerializer, MessagePushCreateUpdateSerializer, ExportMessagePushSerializer | ||||
| from utils.export_excel import export_excel_save_model | ||||
| from utils.response import SuccessResponse | ||||
| from utils.system_info_utils import get_memory_used_percent, get_cpu_used_percent, get_disk_used_percent | ||||
|     MessagePushSerializer, MessagePushCreateUpdateSerializer, ExportMessagePushSerializer, LoginInforSerializer, \ | ||||
|     OperationLogSerializer, ExportOperationLogSerializer, ExportLoginInforSerializer | ||||
| from ..utils.export_excel import export_excel_save_model | ||||
| from ..utils.response import SuccessResponse | ||||
| 
 | ||||
| 
 | ||||
| class DictDataModelViewSet(CustomModelViewSet): | ||||
|  | @ -25,6 +28,7 @@ class DictDataModelViewSet(CustomModelViewSet): | |||
|     update_serializer_class = DictDataCreateUpdateSerializer | ||||
|     # list_serializer_class = ListRoleSerializer | ||||
|     # retrieve_serializer_class = DetailRoleSerializer | ||||
|     extra_filter_backends = [DataLevelPermissionsFilter] | ||||
|     filter_class = DictDataFilter | ||||
|     # update_extra_permission_classes = (IsManagerPermission,) | ||||
|     # destroy_extra_permission_classes = (IsManagerPermission,) | ||||
|  | @ -133,16 +137,16 @@ class ConfigSettingsModelViewSet(CustomModelViewSet): | |||
| 
 | ||||
| class SaveFileModelViewSet(CustomModelViewSet): | ||||
|     """ | ||||
|    参数设置 模型的CRUD视图 | ||||
|    文件管理 模型的CRUD视图 | ||||
|    """ | ||||
|     queryset = SaveFile.objects.all() | ||||
|     serializer_class = SaveFileSerializer | ||||
|     create_serializer_class = SaveFileCreateUpdateSerializer | ||||
|     update_serializer_class = SaveFileCreateUpdateSerializer | ||||
|     # filter_class = ConfigSettingsFilter | ||||
|     filter_class = SaveFileFilter | ||||
|     extra_filter_backends = [DataLevelPermissionsFilter] | ||||
|     search_fields = ('configName',) | ||||
|     ordering = 'id'  # 默认排序 | ||||
|     ordering = '-create_datetime'  # 默认排序 | ||||
| 
 | ||||
| 
 | ||||
| class MessagePushModelViewSet(CustomModelViewSet): | ||||
|  | @ -154,6 +158,7 @@ class MessagePushModelViewSet(CustomModelViewSet): | |||
|     create_serializer_class = MessagePushCreateUpdateSerializer | ||||
|     update_serializer_class = MessagePushCreateUpdateSerializer | ||||
|     extra_filter_backends = [DataLevelPermissionsFilter] | ||||
|     filter_class = MessagePushFilter | ||||
|     ordering = "-update_datetime"  # 默认排序 | ||||
| 
 | ||||
|     def get_message_list(self, request: Request, *args, **kwargs): | ||||
|  | @ -164,13 +169,19 @@ class MessagePushModelViewSet(CustomModelViewSet): | |||
|         data = MessagePushSerializer(messages, many=True) | ||||
|         return SuccessResponse(msg="返回", data=data) | ||||
| 
 | ||||
|     def get_received_messages(self, request: Request, *args, **kwargs): | ||||
|     def get_user_messages(self, request: Request, *args, **kwargs): | ||||
|         """ | ||||
|             用户获取未读消息通知列表 | ||||
|         获取用户自己消息列表 | ||||
|         """ | ||||
| 
 | ||||
|         queryset = self.filter_queryset(self.get_queryset()) | ||||
|         queryset = queryset.filter(recipient_id=request.user.id, is_read=0) | ||||
|         is_read = request.query_params.get('is_read', None) | ||||
|         if is_read: | ||||
|             if is_read == 'False': | ||||
|                 queryset = queryset.filter(Q(messagepushuser_message_push__is_read=is_read) | Q(user=None)) | ||||
|             else: | ||||
|                 queryset = queryset.filter(messagepushuser_message_push__is_read=is_read) | ||||
| 
 | ||||
|         queryset = queryset.filter(is_reviewed=True) | ||||
|         page = self.paginate_queryset(queryset) | ||||
|         if hasattr(self, 'handle_logging'): | ||||
|             self.handle_logging(request, *args, **kwargs) | ||||
|  | @ -184,11 +195,14 @@ class MessagePushModelViewSet(CustomModelViewSet): | |||
|         serializer = self.get_serializer(queryset, many=True) | ||||
|         return SuccessResponse(serializer.data) | ||||
| 
 | ||||
|     def get_received_messages_count(self, request: Request, *args, **kwargs): | ||||
|     def update_is_read(self, request: Request, *args, **kwargs): | ||||
|         """ | ||||
|             获取用户未读消息数量 | ||||
|         修改为已读 | ||||
|         """ | ||||
|         pass | ||||
|         instance, _ = MessagePushUser.objects.get_or_create(message_push_id=kwargs.get('pk'), user=request.user) | ||||
|         instance.is_read = True | ||||
|         instance.save() | ||||
|         return SuccessResponse() | ||||
| 
 | ||||
|     def export(self, request: Request, *args, **kwargs): | ||||
|         """ | ||||
|  | @ -203,18 +217,51 @@ class MessagePushModelViewSet(CustomModelViewSet): | |||
|         return SuccessResponse(export_excel_save_model(request, field_data, data, '导出岗位数据.xls')) | ||||
| 
 | ||||
| 
 | ||||
| class SystemInfoApiView(APIView): | ||||
| class LoginInforModelViewSet(CustomModelViewSet): | ||||
|     """ | ||||
|     系统服务监控视图 | ||||
|    登录日志 模型的CRUD视图 | ||||
|    """ | ||||
|     queryset = LoginInfor.objects.all() | ||||
|     serializer_class = LoginInforSerializer | ||||
|     filter_class = LoginInforFilter | ||||
|     extra_filter_backends = [DataLevelPermissionsFilter] | ||||
|     ordering = '-create_datetime'  # 默认排序 | ||||
|     export_field_data = ['访问编号', '用户名称', '登录地址', '登录地点', '浏览器', '操作系统', | ||||
|                          '登录状态', '操作信息', '登录日期'] | ||||
|     export_serializer_class = ExportLoginInforSerializer | ||||
| 
 | ||||
|     def clean_all(self, request: Request, *args, **kwargs): | ||||
|         """ | ||||
|         清空登录日志 | ||||
|         :param request: | ||||
|         :param args: | ||||
|         :param kwargs: | ||||
|         :return: | ||||
|         """ | ||||
|         self.get_queryset().delete() | ||||
|         return SuccessResponse(msg="清空成功") | ||||
| 
 | ||||
| 
 | ||||
| class OperationLogModelViewSet(CustomModelViewSet): | ||||
|     """ | ||||
|     def get(self, request, *args, **kwargs): | ||||
|         # 获取内存使用率 | ||||
|         memory_used_percent = get_memory_used_percent() | ||||
|         # 获取cpu使用率 | ||||
|         cpu_used_percent = get_cpu_used_percent() | ||||
|         # 获取硬盘使用率 | ||||
|         disk_used_percent = get_disk_used_percent() | ||||
|         return SuccessResponse(data={"memory_used_percent": memory_used_percent, | ||||
|                                      "cpu_used_percent": cpu_used_percent, | ||||
|                                      "disk_used_percent": disk_used_percent | ||||
|                                      }) | ||||
|    操作日志 模型的CRUD视图 | ||||
|    """ | ||||
|     queryset = OperationLog.objects.all() | ||||
|     serializer_class = OperationLogSerializer | ||||
|     filter_class = OperationLogFilter | ||||
|     extra_filter_backends = [DataLevelPermissionsFilter] | ||||
|     ordering = '-create_datetime'  # 默认排序 | ||||
|     export_field_data = ['请求模块', '请求地址', '请求参数', '请求方式', '操作说明', '请求ip地址', | ||||
|                          '请求浏览器', '响应状态码', '操作地点', '操作系统', '返回信息', '响应状态', '操作用户名'] | ||||
|     export_serializer_class = ExportOperationLogSerializer | ||||
| 
 | ||||
|     def clean_all(self, request: Request, *args, **kwargs): | ||||
|         """ | ||||
|         清空操作日志 | ||||
|         :param request: | ||||
|         :param args: | ||||
|         :param kwargs: | ||||
|         :return: | ||||
|         """ | ||||
|         self.get_queryset().delete() | ||||
|         return SuccessResponse(msg="清空成功") | ||||
|  | @ -0,0 +1,57 @@ | |||
| """application URL Configuration | ||||
| 
 | ||||
| The `urlpatterns` list routes URLs to views. For more information please see: | ||||
|     https://docs.djangoproject.com/en/1.11/topics/http/urls/ | ||||
| Examples: | ||||
| Function views | ||||
|     1. Add an import:  from my_app import views | ||||
|     2. Add a URL to urlpatterns:  url(r'^$', views.home, name='home') | ||||
| Class-based views | ||||
|     1. Add an import:  from other_app.views import Home | ||||
|     2. Add a URL to urlpatterns:  url(r'^$', Home.as_view(), name='home') | ||||
| Including another URLconf | ||||
|     1. Import the include() function: from django.conf.urls import url, include | ||||
|     2. Add a URL to urlpatterns:  url(r'^blog/', include('blog.urls')) | ||||
| """ | ||||
| 
 | ||||
| from captcha.conf import settings as ca_settings | ||||
| from captcha.helpers import captcha_image_url, captcha_audio_url | ||||
| from captcha.models import CaptchaStore | ||||
| from django.conf.urls import url | ||||
| from django.urls import re_path, include | ||||
| from rest_framework.documentation import include_docs_urls | ||||
| from rest_framework.views import APIView | ||||
| 
 | ||||
| from .op_drf.response import SuccessResponse | ||||
| from .permission.views import GetUserProfileView, GetRouters | ||||
| from .utils.login import LoginView, LogoutView | ||||
| 
 | ||||
| 
 | ||||
| class CaptchaRefresh(APIView): | ||||
|     authentication_classes = [] | ||||
|     permission_classes = [] | ||||
| 
 | ||||
|     def get(self, request): | ||||
|         new_key = CaptchaStore.pick() | ||||
|         to_json_response = { | ||||
|             "key": new_key, | ||||
|             "image_url": captcha_image_url(new_key), | ||||
|             "audio_url": captcha_audio_url(new_key) if ca_settings.CAPTCHA_FLITE_PATH else None, | ||||
|         } | ||||
|         return SuccessResponse(to_json_response) | ||||
| 
 | ||||
| 
 | ||||
| urlpatterns = [ | ||||
|     re_path('api-token-auth/', LoginView.as_view(), name='api_token_auth'), | ||||
|     url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')), | ||||
|     url(r'docs/', include_docs_urls(title='接口文档')), | ||||
|     re_path(r'^login/$', LoginView.as_view()), | ||||
|     re_path(r'^logout/$', LogoutView.as_view()), | ||||
|     re_path(r'^getInfo/$', GetUserProfileView.as_view()), | ||||
|     re_path(r'^getRouters/$', GetRouters.as_view()), | ||||
|     url(r"captcha/refresh/$", CaptchaRefresh.as_view(), name="captcha-refresh"),  # 刷新验证码 | ||||
|     re_path('captcha/', include('captcha.urls')),  # 图片验证码 路由 | ||||
|     re_path(r'^permission/', include('apps.vadmin.permission.urls')), | ||||
|     re_path(r'^system/', include('apps.vadmin.system.urls')), | ||||
| 
 | ||||
| ] | ||||
|  | @ -3,13 +3,17 @@ | |||
| """ | ||||
| import logging | ||||
| 
 | ||||
| import jwt | ||||
| from django.conf import settings | ||||
| from django.contrib.auth import get_user_model | ||||
| from django.core.cache import cache | ||||
| from django.utils.six import text_type | ||||
| from django.utils.translation import ugettext as _ | ||||
| from rest_framework import exceptions | ||||
| from rest_framework_jwt.utils import jwt_decode_handler | ||||
| 
 | ||||
| from .decorators import exceptionHandler | ||||
| from .jwt_util import jwt_get_session_id | ||||
| 
 | ||||
| logger = logging.getLogger(__name__) | ||||
| User = get_user_model() | ||||
|  | @ -20,12 +24,21 @@ class OpAuthJwtAuthentication(object): | |||
|     统一JWT认证(环境允许情况下, 推荐使用RedisOpAuthJwtAuthentication) | ||||
|     """ | ||||
| 
 | ||||
|     @exceptionHandler() | ||||
|     def authenticate(self, request): | ||||
|         token = self.get_header_authorization(request) or self.get_cookie_authorization(request) | ||||
|         if not token: | ||||
|             return None | ||||
|         payload = jwt_decode_handler(token) | ||||
|         try: | ||||
|             payload = jwt_decode_handler(token) | ||||
|         except jwt.ExpiredSignature: | ||||
|             msg = _('Signature has expired.') | ||||
|             raise exceptions.AuthenticationFailed(msg) | ||||
|         except jwt.DecodeError: | ||||
|             msg = _('Error decoding signature.') | ||||
|             raise exceptions.AuthenticationFailed(msg) | ||||
|         except jwt.InvalidTokenError: | ||||
|             raise exceptions.AuthenticationFailed() | ||||
| 
 | ||||
|         username = payload.get('username', None) | ||||
|         if not username: | ||||
|             return None | ||||
|  | @ -51,7 +64,7 @@ class OpAuthJwtAuthentication(object): | |||
|         if not auth: | ||||
|             return '' | ||||
|         auth = str(auth, encoding='utf-8').split() | ||||
|         if len(auth) != 2 or auth[0].upper() != settings.JWT_AUTH.get('JWT_AUTH_HEADER_PREFIX', 'JWT'): | ||||
|         if len(auth) != 2 or auth[0].upper() != settings.JWT_AUTH.get('JWT_AUTH_HEADER_PREFIX', 'JWT').upper(): | ||||
|             return '' | ||||
|         return auth[1] | ||||
| 
 | ||||
|  | @ -75,15 +88,15 @@ class RedisOpAuthJwtAuthentication(OpAuthJwtAuthentication): | |||
|     """ | ||||
|     prefix = settings.JWT_AUTH.get('JWT_AUTH_HEADER_PREFIX', 'JWT') | ||||
| 
 | ||||
|     @exceptionHandler() | ||||
|     def authenticate(self, request): | ||||
|         res = super().authenticate(request) | ||||
|         if res: | ||||
|             user, token = super().authenticate(request) | ||||
|             key = f"{self.prefix}_{user.username}" | ||||
|             user, token = res | ||||
|             session_id = jwt_get_session_id(token) | ||||
|             key = f"{self.prefix}_{session_id}_{user.username}" | ||||
|             redis_token = cache.get(key) | ||||
|             if redis_token == token: | ||||
|                 return user, token | ||||
|             else: | ||||
|                 return None | ||||
|                 raise exceptions.AuthenticationFailed("登录信息失效,请重新登录!") | ||||
|         return None | ||||
|  | @ -7,7 +7,6 @@ from django.contrib.auth.backends import ModelBackend | |||
| from django.utils import timezone | ||||
| from rest_framework.authentication import SessionAuthentication as DjangoSessionAuthentication | ||||
| 
 | ||||
| from utils.exceptions import GenException | ||||
| 
 | ||||
| logger = logging.getLogger(__name__) | ||||
| UserModel = get_user_model() | ||||
|  | @ -2,7 +2,9 @@ import logging | |||
| import traceback | ||||
| 
 | ||||
| from rest_framework import serializers, exceptions | ||||
| from rest_framework.views import set_rollback | ||||
| 
 | ||||
| from .request_util import get_verbose_name | ||||
| from .response import ErrorResponse | ||||
| 
 | ||||
| logger = logging.getLogger(__name__) | ||||
|  | @ -16,9 +18,9 @@ class APIException(Exception): | |||
|     """ | ||||
| 
 | ||||
|     def __init__(self, code=201, message='API异常', args=('API异常',)): | ||||
|         self.args = args | ||||
|         self.code = code | ||||
|         self.message = message | ||||
|         args = args | ||||
|         code = code | ||||
|         message = message | ||||
| 
 | ||||
|     def __str__(self): | ||||
|         return self.message | ||||
|  | @ -35,7 +37,7 @@ class FrameworkException(Exception): | |||
| 
 | ||||
|     def __init__(self, message='框架异常', *args: object, **kwargs: object) -> None: | ||||
|         super().__init__(*args, **kwargs) | ||||
|         self.message = message | ||||
|         message = message | ||||
| 
 | ||||
|     def __str__(self) -> str: | ||||
|         return f"{self.message}" | ||||
|  | @ -63,13 +65,17 @@ def op_exception_handler(ex, context): | |||
|     """ | ||||
|     msg = '' | ||||
|     code = '201' | ||||
|     request = context.get('request') | ||||
|     request.session['model_name'] = get_verbose_name(view=context.get('view')) | ||||
| 
 | ||||
|     if isinstance(ex, AuthenticationFailed): | ||||
|         code = 401 | ||||
|         msg = ex.detail | ||||
|     elif isinstance(ex, DRFAPIException): | ||||
|         # set_rollback() | ||||
|         set_rollback() | ||||
|         msg = ex.detail | ||||
|     elif isinstance(ex, exceptions.APIException): | ||||
|         set_rollback() | ||||
|         msg = ex.detail | ||||
|     elif isinstance(ex, Exception): | ||||
|         logger.error(traceback.format_exc()) | ||||
Some files were not shown because too many files have changed in this diff Show More
		Loading…
	
		Reference in New Issue
	
	 qianzhengkai
						qianzhengkai