Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
J
jumpserver
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
ops
jumpserver
Commits
c3308442
Commit
c3308442
authored
Jul 01, 2019
by
ibuler
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[Update] Debug cache
parent
7f7853db
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
147 additions
and
114 deletions
+147
-114
user_asset_list.html
apps/assets/templates/assets/user_asset_list.html
+1
-1
__init__.py
apps/perms/api/__init__.py
+1
-0
user_permission.py
apps/perms/api/user_permission.py
+23
-98
user_remote_app_permission.py
apps/perms/api/user_remote_app_permission.py
+96
-0
asset_permission.py
apps/perms/utils/asset_permission.py
+25
-14
user_granted_asset.html
apps/users/templates/users/user_granted_asset.html
+1
-1
No files found.
apps/assets/templates/assets/user_asset_list.html
View file @
c3308442
...
@@ -151,7 +151,7 @@ function initTree() {
...
@@ -151,7 +151,7 @@ function initTree() {
}
}
$
(
document
).
ready
(
function
()
{
$
(
document
).
ready
(
function
()
{
initTree
();
{
#
initTree
();
#
}
initTable
();
initTable
();
}).
on
(
'click'
,
'.labels li'
,
function
()
{
}).
on
(
'click'
,
'.labels li'
,
function
()
{
var
val
=
$
(
this
).
text
();
var
val
=
$
(
this
).
text
();
...
...
apps/perms/api/__init__.py
View file @
c3308442
...
@@ -5,3 +5,4 @@ from .asset_permission import *
...
@@ -5,3 +5,4 @@ from .asset_permission import *
from
.user_permission
import
*
from
.user_permission
import
*
from
.user_group_permission
import
*
from
.user_group_permission
import
*
from
.remote_app_permission
import
*
from
.remote_app_permission
import
*
from
.user_remote_app_permission
import
*
apps/perms/api/user_permission.py
View file @
c3308442
# -*- coding: utf-8 -*-
# -*- coding: utf-8 -*-
#
#
import
time
import
time
import
traceback
from
hashlib
import
md5
from
hashlib
import
md5
from
django.core.cache
import
cache
from
django.core.cache
import
cache
from
django.conf
import
settings
from
django.conf
import
settings
...
@@ -16,16 +17,12 @@ from common.tree import TreeNodeSerializer
...
@@ -16,16 +17,12 @@ from common.tree import TreeNodeSerializer
from
common.utils
import
get_logger
from
common.utils
import
get_logger
from
..utils
import
(
from
..utils
import
(
AssetPermissionUtil
,
parse_asset_to_tree_node
,
parse_node_to_tree_node
,
AssetPermissionUtil
,
parse_asset_to_tree_node
,
parse_node_to_tree_node
,
check_system_user_action
,
RemoteAppPermissionUtil
,
check_system_user_action
,
construct_remote_apps_tree_root
,
parse_remote_app_to_tree_node
,
)
from
..hands
import
(
User
,
Asset
,
Node
,
SystemUser
,
RemoteApp
,
NodeSerializer
,
RemoteAppSerializer
,
)
)
from
..hands
import
User
,
Asset
,
Node
,
SystemUser
,
NodeSerializer
from
..
import
serializers
,
const
from
..
import
serializers
,
const
from
..mixins
import
(
from
..mixins
import
(
AssetsFilterMixin
,
RemoteAppFilterMixin
AssetsFilterMixin
,
)
)
from
..models
import
Action
from
..models
import
Action
...
@@ -36,8 +33,6 @@ __all__ = [
...
@@ -36,8 +33,6 @@ __all__ = [
'UserGrantedNodesWithAssetsApi'
,
'UserGrantedNodeAssetsApi'
,
'UserGrantedNodesWithAssetsApi'
,
'UserGrantedNodeAssetsApi'
,
'ValidateUserAssetPermissionApi'
,
'UserGrantedNodeChildrenApi'
,
'ValidateUserAssetPermissionApi'
,
'UserGrantedNodeChildrenApi'
,
'UserGrantedNodesWithAssetsAsTreeApi'
,
'GetUserAssetPermissionActionsApi'
,
'UserGrantedNodesWithAssetsAsTreeApi'
,
'GetUserAssetPermissionActionsApi'
,
'UserGrantedRemoteAppsApi'
,
'ValidateUserRemoteAppPermissionApi'
,
'UserGrantedRemoteAppsAsTreeApi'
,
]
]
...
@@ -77,46 +72,61 @@ class UserPermissionCacheMixin:
...
@@ -77,46 +72,61 @@ class UserPermissionCacheMixin:
request_md5
=
self
.
get_request_md5
()
request_md5
=
self
.
get_request_md5
()
meta_cache_id
=
self
.
get_meta_cache_id
()
meta_cache_id
=
self
.
get_meta_cache_id
()
resp_cache_id
=
'{}_{}_{}'
.
format
(
obj_id
,
request_md5
,
meta_cache_id
)
resp_cache_id
=
'{}_{}_{}'
.
format
(
obj_id
,
request_md5
,
meta_cache_id
)
resp_cache_id
=
md5
(
resp_cache_id
.
encode
())
.
hexdigest
()
return
resp_cache_id
return
resp_cache_id
def
get_response_from_cache
(
self
):
def
get_response_from_cache
(
self
):
resp_cache_id
=
self
.
get_response_cache_id
()
# 没有数据缓冲
# 没有数据缓冲
meta_cache_id
=
self
.
get_meta_cache_id
()
meta_cache_id
=
self
.
get_meta_cache_id
()
if
not
meta_cache_id
:
if
not
meta_cache_id
:
logger
.
debug
(
"Not get meta id: {}"
.
format
(
meta_cache_id
))
return
None
return
None
# 从响应缓冲里获取响应
# 从响应缓冲里获取响应
key
=
self
.
RESP_CACHE_KEY
.
format
(
resp_cache_id
)
key
=
self
.
get_response_key
()
print
(
"response key: {}"
.
format
(
key
))
data
=
cache
.
get
(
key
)
data
=
cache
.
get
(
key
)
print
(
data
)
if
not
data
:
if
not
data
:
logger
.
debug
(
"Not get response from cache: {}"
.
format
(
key
))
return
None
return
None
logger
.
debug
(
"Get user permission from cache: {}"
.
format
(
self
.
get_object
()))
logger
.
debug
(
"Get user permission from cache: {}"
.
format
(
self
.
get_object
()))
response
=
Response
(
data
)
response
=
Response
(
data
)
return
response
return
response
def
expire_response_cache
(
self
):
def
expire_response_cache
(
self
):
print
(
"Expire cache"
)
obj_id
=
self
.
get_object_id
()
obj_id
=
self
.
get_object_id
()
expire_cache_id
=
'{}_{}'
.
format
(
obj_id
,
'*'
)
expire_cache_id
=
'{}_{}'
.
format
(
obj_id
,
'*'
)
key
=
self
.
RESP_CACHE_KEY
.
format
(
expire_cache_id
)
key
=
self
.
RESP_CACHE_KEY
.
format
(
expire_cache_id
)
cache
.
delete_pattern
(
key
)
cache
.
delete_pattern
(
key
)
def
set_response_to_cache
(
self
,
response
):
def
get_response_key
(
self
):
resp_cache_id
=
self
.
get_response_cache_id
()
resp_cache_id
=
self
.
get_response_cache_id
()
key
=
self
.
RESP_CACHE_KEY
.
format
(
resp_cache_id
)
key
=
self
.
RESP_CACHE_KEY
.
format
(
resp_cache_id
)
return
key
def
set_response_to_cache
(
self
,
response
):
key
=
self
.
get_response_key
()
cache
.
set
(
key
,
response
.
data
,
self
.
CACHE_TIME
)
cache
.
set
(
key
,
response
.
data
,
self
.
CACHE_TIME
)
logger
.
debug
(
"Set response to cache: {}"
.
format
(
key
))
print
(
self
.
CACHE_TIME
)
def
get
(
self
,
request
,
*
args
,
**
kwargs
):
def
get
(
self
,
request
,
*
args
,
**
kwargs
):
self
.
cache_policy
=
request
.
GET
.
get
(
'cache_policy'
,
'0'
)
self
.
cache_policy
=
request
.
GET
.
get
(
'cache_policy'
,
'0'
)
obj
=
self
.
_get_object
()
obj
=
self
.
_get_object
()
if
obj
is
None
:
if
obj
is
None
:
logger
.
debug
(
"Not get response from cache: obj is none"
)
return
super
()
.
get
(
request
,
*
args
,
**
kwargs
)
return
super
()
.
get
(
request
,
*
args
,
**
kwargs
)
if
AssetPermissionUtil
.
is_not_using_cache
(
self
.
cache_policy
):
if
AssetPermissionUtil
.
is_not_using_cache
(
self
.
cache_policy
):
logger
.
debug
(
"Not get resp from cache: {}"
.
format
(
self
.
cache_policy
))
return
super
()
.
get
(
request
,
*
args
,
**
kwargs
)
return
super
()
.
get
(
request
,
*
args
,
**
kwargs
)
elif
AssetPermissionUtil
.
is_refresh_cache
(
self
.
cache_policy
):
elif
AssetPermissionUtil
.
is_refresh_cache
(
self
.
cache_policy
):
logger
.
debug
(
"Not get resp from cache: {}"
.
format
(
self
.
cache_policy
))
self
.
expire_response_cache
()
self
.
expire_response_cache
()
logger
.
debug
(
"Try get response from cache"
)
resp
=
self
.
get_response_from_cache
()
resp
=
self
.
get_response_from_cache
()
if
not
resp
:
if
not
resp
:
resp
=
super
()
.
get
(
request
,
*
args
,
**
kwargs
)
resp
=
super
()
.
get
(
request
,
*
args
,
**
kwargs
)
...
@@ -245,11 +255,8 @@ class UserGrantedNodesWithAssetsAsTreeApi(UserPermissionCacheMixin, ListAPIView)
...
@@ -245,11 +255,8 @@ class UserGrantedNodesWithAssetsAsTreeApi(UserPermissionCacheMixin, ListAPIView)
user
=
get_object_or_404
(
User
,
id
=
user_id
)
user
=
get_object_or_404
(
User
,
id
=
user_id
)
return
user
return
user
def
list
(
self
,
request
,
*
args
,
**
kwargs
):
resp
=
super
()
.
list
(
request
,
*
args
,
**
kwargs
)
return
resp
def
get_queryset
(
self
):
def
get_queryset
(
self
):
print
(
"Call get queryset"
)
queryset
=
[]
queryset
=
[]
self
.
show_assets
=
self
.
request
.
query_params
.
get
(
'show_assets'
,
'1'
)
==
'1'
self
.
show_assets
=
self
.
request
.
query_params
.
get
(
'show_assets'
,
'1'
)
==
'1'
self
.
system_user_id
=
self
.
request
.
query_params
.
get
(
'system_user'
)
self
.
system_user_id
=
self
.
request
.
query_params
.
get
(
'system_user'
)
...
@@ -259,22 +266,14 @@ class UserGrantedNodesWithAssetsAsTreeApi(UserPermissionCacheMixin, ListAPIView)
...
@@ -259,22 +266,14 @@ class UserGrantedNodesWithAssetsAsTreeApi(UserPermissionCacheMixin, ListAPIView)
util
.
filter_permissions
(
util
.
filter_permissions
(
system_users
=
self
.
system_user_id
system_users
=
self
.
system_user_id
)
)
print
(
"111111111111"
)
nodes
=
util
.
get_nodes_with_assets
()
nodes
=
util
.
get_nodes_with_assets
()
print
(
"22222222222222"
)
for
node
,
assets
in
nodes
.
items
():
for
node
,
assets
in
nodes
.
items
():
now
=
time
.
time
()
print
(
"Parse to node"
)
data
=
parse_node_to_tree_node
(
node
)
data
=
parse_node_to_tree_node
(
node
)
print
(
"parse to node end, using: {0:.2f}"
.
format
(
time
.
time
()
-
now
))
queryset
.
append
(
data
)
queryset
.
append
(
data
)
if
not
self
.
show_assets
:
if
not
self
.
show_assets
:
continue
continue
for
asset
,
system_users
in
assets
.
items
():
for
asset
,
system_users
in
assets
.
items
():
now1
=
time
.
time
()
print
(
"parse to asset"
)
data
=
parse_asset_to_tree_node
(
node
,
asset
,
system_users
)
data
=
parse_asset_to_tree_node
(
node
,
asset
,
system_users
)
print
(
"parse to asset end, using: {0:.2f}"
.
format
(
time
.
time
()
-
now1
))
queryset
.
append
(
data
)
queryset
.
append
(
data
)
return
queryset
return
queryset
...
@@ -458,77 +457,3 @@ class GetUserAssetPermissionActionsApi(UserPermissionCacheMixin, APIView):
...
@@ -458,77 +457,3 @@ class GetUserAssetPermissionActionsApi(UserPermissionCacheMixin, APIView):
return
Response
({
'actions'
:
actions
},
status
=
200
)
return
Response
({
'actions'
:
actions
},
status
=
200
)
# RemoteApp permission
class
UserGrantedRemoteAppsApi
(
RemoteAppFilterMixin
,
ListAPIView
):
permission_classes
=
(
IsOrgAdminOrAppUser
,)
serializer_class
=
RemoteAppSerializer
pagination_class
=
LimitOffsetPagination
def
get_object
(
self
):
user_id
=
self
.
kwargs
.
get
(
'pk'
,
''
)
if
user_id
:
user
=
get_object_or_404
(
User
,
id
=
user_id
)
else
:
user
=
self
.
request
.
user
return
user
def
get_queryset
(
self
):
util
=
RemoteAppPermissionUtil
(
self
.
get_object
())
queryset
=
util
.
get_remote_apps
()
queryset
=
list
(
queryset
)
return
queryset
def
get_permissions
(
self
):
if
self
.
kwargs
.
get
(
'pk'
)
is
None
:
self
.
permission_classes
=
(
IsValidUser
,)
return
super
()
.
get_permissions
()
class
UserGrantedRemoteAppsAsTreeApi
(
ListAPIView
):
serializer_class
=
TreeNodeSerializer
permission_classes
=
(
IsOrgAdminOrAppUser
,)
def
get_object
(
self
):
user_id
=
self
.
kwargs
.
get
(
'pk'
,
''
)
if
not
user_id
:
user
=
self
.
request
.
user
else
:
user
=
get_object_or_404
(
User
,
id
=
user_id
)
return
user
def
get_queryset
(
self
):
queryset
=
[]
tree_root
=
construct_remote_apps_tree_root
()
queryset
.
append
(
tree_root
)
util
=
RemoteAppPermissionUtil
(
self
.
get_object
())
remote_apps
=
util
.
get_remote_apps
()
for
remote_app
in
remote_apps
:
node
=
parse_remote_app_to_tree_node
(
tree_root
,
remote_app
)
queryset
.
append
(
node
)
queryset
=
sorted
(
queryset
)
return
queryset
def
get_permissions
(
self
):
if
self
.
kwargs
.
get
(
'pk'
)
is
None
:
self
.
permission_classes
=
(
IsValidUser
,)
return
super
()
.
get_permissions
()
class
ValidateUserRemoteAppPermissionApi
(
APIView
):
permission_classes
=
(
IsOrgAdminOrAppUser
,)
def
get
(
self
,
request
,
*
args
,
**
kwargs
):
self
.
change_org_if_need
(
request
,
kwargs
)
user_id
=
request
.
query_params
.
get
(
'user_id'
,
''
)
remote_app_id
=
request
.
query_params
.
get
(
'remote_app_id'
,
''
)
user
=
get_object_or_404
(
User
,
id
=
user_id
)
remote_app
=
get_object_or_404
(
RemoteApp
,
id
=
remote_app_id
)
util
=
RemoteAppPermissionUtil
(
user
)
remote_apps
=
util
.
get_remote_apps
()
if
remote_app
not
in
remote_apps
:
return
Response
({
'msg'
:
False
},
status
=
403
)
return
Response
({
'msg'
:
True
},
status
=
200
)
apps/perms/api/user_remote_app_permission.py
0 → 100644
View file @
c3308442
# -*- coding: utf-8 -*-
from
django.shortcuts
import
get_object_or_404
from
rest_framework.views
import
APIView
,
Response
from
rest_framework.generics
import
(
ListAPIView
,
get_object_or_404
,
)
from
rest_framework.pagination
import
LimitOffsetPagination
from
common.permissions
import
IsValidUser
,
IsOrgAdminOrAppUser
from
common.tree
import
TreeNodeSerializer
from
..utils
import
(
RemoteAppPermissionUtil
,
construct_remote_apps_tree_root
,
parse_remote_app_to_tree_node
,
)
from
..hands
import
User
,
RemoteApp
,
RemoteAppSerializer
from
..mixins
import
RemoteAppFilterMixin
__all__
=
[
'UserGrantedRemoteAppsApi'
,
'ValidateUserRemoteAppPermissionApi'
,
'UserGrantedRemoteAppsAsTreeApi'
,
]
class
UserGrantedRemoteAppsApi
(
RemoteAppFilterMixin
,
ListAPIView
):
permission_classes
=
(
IsOrgAdminOrAppUser
,)
serializer_class
=
RemoteAppSerializer
pagination_class
=
LimitOffsetPagination
def
get_object
(
self
):
user_id
=
self
.
kwargs
.
get
(
'pk'
,
''
)
if
user_id
:
user
=
get_object_or_404
(
User
,
id
=
user_id
)
else
:
user
=
self
.
request
.
user
return
user
def
get_queryset
(
self
):
util
=
RemoteAppPermissionUtil
(
self
.
get_object
())
queryset
=
util
.
get_remote_apps
()
queryset
=
list
(
queryset
)
return
queryset
def
get_permissions
(
self
):
if
self
.
kwargs
.
get
(
'pk'
)
is
None
:
self
.
permission_classes
=
(
IsValidUser
,)
return
super
()
.
get_permissions
()
class
UserGrantedRemoteAppsAsTreeApi
(
ListAPIView
):
serializer_class
=
TreeNodeSerializer
permission_classes
=
(
IsOrgAdminOrAppUser
,)
def
get_object
(
self
):
user_id
=
self
.
kwargs
.
get
(
'pk'
,
''
)
if
not
user_id
:
user
=
self
.
request
.
user
else
:
user
=
get_object_or_404
(
User
,
id
=
user_id
)
return
user
def
get_queryset
(
self
):
queryset
=
[]
tree_root
=
construct_remote_apps_tree_root
()
queryset
.
append
(
tree_root
)
util
=
RemoteAppPermissionUtil
(
self
.
get_object
())
remote_apps
=
util
.
get_remote_apps
()
for
remote_app
in
remote_apps
:
node
=
parse_remote_app_to_tree_node
(
tree_root
,
remote_app
)
queryset
.
append
(
node
)
queryset
=
sorted
(
queryset
)
return
queryset
def
get_permissions
(
self
):
if
self
.
kwargs
.
get
(
'pk'
)
is
None
:
self
.
permission_classes
=
(
IsValidUser
,)
return
super
()
.
get_permissions
()
class
ValidateUserRemoteAppPermissionApi
(
APIView
):
permission_classes
=
(
IsOrgAdminOrAppUser
,)
def
get
(
self
,
request
,
*
args
,
**
kwargs
):
user_id
=
request
.
query_params
.
get
(
'user_id'
,
''
)
remote_app_id
=
request
.
query_params
.
get
(
'remote_app_id'
,
''
)
user
=
get_object_or_404
(
User
,
id
=
user_id
)
remote_app
=
get_object_or_404
(
RemoteApp
,
id
=
remote_app_id
)
util
=
RemoteAppPermissionUtil
(
user
)
remote_apps
=
util
.
get_remote_apps
()
if
remote_app
not
in
remote_apps
:
return
Response
({
'msg'
:
False
},
status
=
403
)
return
Response
({
'msg'
:
True
},
status
=
200
)
apps/perms/utils/asset_permission.py
View file @
c3308442
...
@@ -110,17 +110,17 @@ class GenerateTree:
...
@@ -110,17 +110,17 @@ class GenerateTree:
self
.
_ungroup_node
=
node
self
.
_ungroup_node
=
node
return
node
return
node
@timeit
#
@timeit
def
add_assets_without_system_users
(
self
,
assets
):
def
add_assets_without_system_users
(
self
,
assets
):
for
asset
in
assets
:
for
asset
in
assets
:
self
.
add_asset
(
asset
,
{})
self
.
add_asset
(
asset
,
{})
@timeit
#
@timeit
def
add_assets
(
self
,
assets
):
def
add_assets
(
self
,
assets
):
for
asset
,
system_users
in
assets
.
items
():
for
asset
,
system_users
in
assets
.
items
():
self
.
add_asset
(
asset
,
system_users
)
self
.
add_asset
(
asset
,
system_users
)
@timeit
#
@timeit
def
add_asset
(
self
,
asset
,
system_users
=
None
):
def
add_asset
(
self
,
asset
,
system_users
=
None
):
nodes
=
asset
.
nodes
.
all
()
nodes
=
asset
.
nodes
.
all
()
nodes
=
self
.
node_util
.
get_nodes_by_queryset
(
nodes
)
nodes
=
self
.
node_util
.
get_nodes_by_queryset
(
nodes
)
...
@@ -159,7 +159,7 @@ class GenerateTree:
...
@@ -159,7 +159,7 @@ class GenerateTree:
self
.
nodes
[
node
][
"system_users"
]
=
system_users
self
.
nodes
[
node
][
"system_users"
]
=
system_users
# 添加树节点
# 添加树节点
@timeit
#
@timeit
def
add_nodes
(
self
,
nodes
):
def
add_nodes
(
self
,
nodes
):
_nodes
=
nodes
.
keys
()
_nodes
=
nodes
.
keys
()
family
=
self
.
node_util
.
get_family
(
_nodes
,
with_children
=
True
)
family
=
self
.
node_util
.
get_family
(
_nodes
,
with_children
=
True
)
...
@@ -169,7 +169,7 @@ class GenerateTree:
...
@@ -169,7 +169,7 @@ class GenerateTree:
def
get_assets
(
self
):
def
get_assets
(
self
):
return
dict
(
self
.
assets
)
return
dict
(
self
.
assets
)
@timeit
#
@timeit
def
get_nodes_with_assets
(
self
):
def
get_nodes_with_assets
(
self
):
if
self
.
_nodes_with_assets
:
if
self
.
_nodes_with_assets
:
return
self
.
_nodes_with_assets
return
self
.
_nodes_with_assets
...
@@ -220,6 +220,7 @@ class AssetPermissionCacheMixin:
...
@@ -220,6 +220,7 @@ class AssetPermissionCacheMixin:
CACHE_META_KEY_PREFIX
=
'_ASSET_PERM_META_KEY_'
CACHE_META_KEY_PREFIX
=
'_ASSET_PERM_META_KEY_'
CACHE_TIME
=
settings
.
ASSETS_PERM_CACHE_TIME
CACHE_TIME
=
settings
.
ASSETS_PERM_CACHE_TIME
CACHE_POLICY_MAP
=
((
'0'
,
'never'
),
(
'1'
,
'using'
),
(
'2'
,
'refresh'
))
CACHE_POLICY_MAP
=
((
'0'
,
'never'
),
(
'1'
,
'using'
),
(
'2'
,
'refresh'
))
cache_policy
=
'1'
@classmethod
@classmethod
def
is_not_using_cache
(
cls
,
cache_policy
):
def
is_not_using_cache
(
cls
,
cache_policy
):
...
@@ -242,7 +243,7 @@ class AssetPermissionCacheMixin:
...
@@ -242,7 +243,7 @@ class AssetPermissionCacheMixin:
def
_is_refresh_cache
(
self
):
def
_is_refresh_cache
(
self
):
return
self
.
is_refresh_cache
(
self
.
cache_policy
)
return
self
.
is_refresh_cache
(
self
.
cache_policy
)
@timeit
#
@timeit
def
get_cache_key
(
self
,
resource
):
def
get_cache_key
(
self
,
resource
):
cache_key
=
self
.
CACHE_KEY_PREFIX
+
'{obj_id}_{filter_id}_{resource}'
cache_key
=
self
.
CACHE_KEY_PREFIX
+
'{obj_id}_{filter_id}_{resource}'
return
cache_key
.
format
(
return
cache_key
.
format
(
...
@@ -250,18 +251,23 @@ class AssetPermissionCacheMixin:
...
@@ -250,18 +251,23 @@ class AssetPermissionCacheMixin:
resource
=
resource
resource
=
resource
)
)
@property
def
node_key
(
self
):
def
node_key
(
self
):
return
self
.
get_cache_key
(
'NODES_WITH_ASSETS'
)
return
self
.
get_cache_key
(
'NODES_WITH_ASSETS'
)
@property
def
asset_key
(
self
):
def
asset_key
(
self
):
return
self
.
get_cache_key
(
'ASSETS'
)
key
=
self
.
get_cache_key
(
'ASSETS'
)
return
key
@property
def
system_key
(
self
):
def
system_key
(
self
):
return
self
.
get_cache_key
(
'SYSTEM_USER'
)
return
self
.
get_cache_key
(
'SYSTEM_USER'
)
def
get_assets_from_cache
(
self
):
def
get_assets_from_cache
(
self
):
cached
=
cache
.
get
(
self
.
asset_key
)
cached
=
cache
.
get
(
self
.
asset_key
)
if
not
cached
:
if
not
cached
:
print
(
"Refresh cache"
)
self
.
update_cache
()
self
.
update_cache
()
cached
=
cache
.
get
(
self
.
asset_key
)
cached
=
cache
.
get
(
self
.
asset_key
)
return
cached
return
cached
...
@@ -290,7 +296,7 @@ class AssetPermissionCacheMixin:
...
@@ -290,7 +296,7 @@ class AssetPermissionCacheMixin:
return
cached
return
cached
def
get_assets
(
self
):
def
get_assets
(
self
):
if
self
.
_is_
not_
using_cache
():
if
self
.
_is_using_cache
():
return
self
.
get_assets_from_cache
()
return
self
.
get_assets_from_cache
()
elif
self
.
_is_refresh_cache
():
elif
self
.
_is_refresh_cache
():
self
.
expire_cache
()
self
.
expire_cache
()
...
@@ -318,7 +324,10 @@ class AssetPermissionCacheMixin:
...
@@ -318,7 +324,10 @@ class AssetPermissionCacheMixin:
@property
@property
def
cache_meta
(
self
):
def
cache_meta
(
self
):
key
=
self
.
get_meta_cache_key
()
key
=
self
.
get_meta_cache_key
()
return
cache
.
get
(
key
)
or
{}
meta
=
cache
.
get
(
key
)
or
{}
# print("Meta key: {}".format(key))
# print("Meta id: {}".format(meta["id"]))
return
meta
def
set_meta_to_cache
(
self
):
def
set_meta_to_cache
(
self
):
key
=
self
.
get_meta_cache_key
()
key
=
self
.
get_meta_cache_key
()
...
@@ -327,6 +336,8 @@ class AssetPermissionCacheMixin:
...
@@ -327,6 +336,8 @@ class AssetPermissionCacheMixin:
'datetime'
:
timezone
.
now
(),
'datetime'
:
timezone
.
now
(),
'object'
:
str
(
self
.
object
)
'object'
:
str
(
self
.
object
)
}
}
# print("Set meta key: {}".format(key))
# print("set meta to cache: {}".format(meta["id"]))
cache
.
set
(
key
,
meta
,
self
.
CACHE_TIME
)
cache
.
set
(
key
,
meta
,
self
.
CACHE_TIME
)
def
expire_cache_meta
(
self
):
def
expire_cache_meta
(
self
):
...
@@ -403,13 +414,13 @@ class AssetPermissionUtil(AssetPermissionCacheMixin):
...
@@ -403,13 +414,13 @@ class AssetPermissionUtil(AssetPermissionCacheMixin):
self
.
_permissions
=
permissions
self
.
_permissions
=
permissions
return
permissions
return
permissions
@timeit
#
@timeit
def
filter_permissions
(
self
,
**
filters
):
def
filter_permissions
(
self
,
**
filters
):
filters_json
=
json
.
dumps
(
filters
,
sort_keys
=
True
)
filters_json
=
json
.
dumps
(
filters
,
sort_keys
=
True
)
self
.
_permissions
=
self
.
permissions
.
filter
(
**
filters
)
self
.
_permissions
=
self
.
permissions
.
filter
(
**
filters
)
self
.
_filter_id
=
md5
(
filters_json
.
encode
())
.
hexdigest
()
self
.
_filter_id
=
md5
(
filters_json
.
encode
())
.
hexdigest
()
@timeit
#
@timeit
def
get_nodes_direct
(
self
):
def
get_nodes_direct
(
self
):
"""
"""
返回用户/组授权规则直接关联的节点
返回用户/组授权规则直接关联的节点
...
@@ -425,7 +436,7 @@ class AssetPermissionUtil(AssetPermissionCacheMixin):
...
@@ -425,7 +436,7 @@ class AssetPermissionUtil(AssetPermissionCacheMixin):
self
.
tree
.
add_nodes
(
nodes
)
self
.
tree
.
add_nodes
(
nodes
)
return
nodes
return
nodes
@timeit
#
@timeit
def
get_assets_direct
(
self
):
def
get_assets_direct
(
self
):
"""
"""
返回用户授权规则直接关联的资产
返回用户授权规则直接关联的资产
...
@@ -442,7 +453,7 @@ class AssetPermissionUtil(AssetPermissionCacheMixin):
...
@@ -442,7 +453,7 @@ class AssetPermissionUtil(AssetPermissionCacheMixin):
self
.
tree
.
add_assets
(
assets
)
self
.
tree
.
add_assets
(
assets
)
return
assets
return
assets
@timeit
#
@timeit
def
get_assets_without_cache
(
self
):
def
get_assets_without_cache
(
self
):
"""
"""
:return: {asset1: set(system_user1,)}
:return: {asset1: set(system_user1,)}
...
@@ -469,7 +480,7 @@ class AssetPermissionUtil(AssetPermissionCacheMixin):
...
@@ -469,7 +480,7 @@ class AssetPermissionUtil(AssetPermissionCacheMixin):
self
.
_assets
=
assets
self
.
_assets
=
assets
return
assets
return
assets
@timeit
#
@timeit
def
get_nodes_with_assets_without_cache
(
self
):
def
get_nodes_with_assets_without_cache
(
self
):
"""
"""
返回节点并且包含资产
返回节点并且包含资产
...
...
apps/users/templates/users/user_granted_asset.html
View file @
c3308442
...
@@ -145,7 +145,7 @@ function initTree() {
...
@@ -145,7 +145,7 @@ function initTree() {
$
(
document
).
ready
(
function
()
{
$
(
document
).
ready
(
function
()
{
initTree
();
initTree
();
initTable
();
{
#
initTable
();
#
}
});
});
</script>
</script>
{% endblock %}
{% endblock %}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment