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
74b8ee8c
Commit
74b8ee8c
authored
Sep 16, 2016
by
ibuler
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Pre delete action
parent
766bd3b7
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
120 additions
and
17 deletions
+120
-17
models.py
apps/perms/models.py
+23
-15
utils.py
apps/perms/utils.py
+97
-2
No files found.
apps/perms/models.py
View file @
74b8ee8c
...
...
@@ -39,31 +39,39 @@ class AssetPermission(models.Model):
return
True
@staticmethod
def
set_inherit
(
obj
):
def
set_inherit
ed
(
obj
,
inherited_from
=
None
):
setattr
(
obj
,
'inherited'
,
True
)
setattr
(
obj
,
'inherited_from'
,
inherited_from
)
return
obj
@staticmethod
def
set_non_inherited
(
obj
):
setattr
(
obj
,
'inherited'
,
False
)
return
obj
def
get_granted_users
(
self
):
return
list
(
set
(
self
.
users
.
all
()
or
[])
|
set
(
self
.
get_granted_user_groups_member
()))
users_granted_direct
=
map
(
self
.
set_non_inherited
,
self
.
users
.
all
())
return
list
(
set
(
users_granted_direct
)
|
self
.
get_granted_user_groups_member
())
def
get_granted_user_groups_member
(
self
):
combine_users
=
functools
.
partial
(
combine_seq
,
callback
=
AssetPermission
.
set_inherit
)
try
:
return
functools
.
reduce
(
combine_users
,
[
user_group
.
users
.
all
()
for
user_group
in
self
.
user_groups
.
iterator
()]
)
except
TypeError
:
return
[]
users
=
set
(
)
for
user_group
in
self
.
user_groups
.
all
()
:
for
user
in
user_group
.
users
.
all
():
user
=
self
.
set_inherited
(
user
,
inherited_from
=
user_group
)
users
.
add
(
user
)
return
users
def
get_granted_assets
(
self
):
return
list
(
set
(
self
.
assets
.
all
()
or
[])
|
set
(
self
.
get_granted_asset_groups_member
()))
assets_granted_direct
=
map
(
self
.
set_non_inherited
,
self
.
assets
.
all
())
return
list
(
set
(
assets_granted_direct
or
[])
|
self
.
get_granted_asset_groups_member
())
def
get_granted_asset_groups_member
(
self
):
combine_assets
=
functools
.
partial
(
combine_seq
,
callback
=
AssetPermission
.
set_inherit
)
try
:
return
functools
.
reduce
(
combine_assets
,
[
asset_group
.
users
.
all
()
for
asset_group
in
self
.
asset_groups
.
iterator
()]
)
except
TypeError
:
return
[]
assets
=
set
(
)
for
asset_group
in
self
.
asset_groups
.
all
()
:
for
asset
in
asset_group
.
assets
.
all
():
asset
=
self
.
set_inherited
(
asset
,
inherited_from
=
asset_group
)
assets
.
add
(
asset
)
return
assets
class
Meta
:
db_table
=
'asset_permission'
...
...
apps/perms/utils.py
View file @
74b8ee8c
# ~*~ coding: utf-8 ~*~
#
from
__future__
import
absolute_import
,
unicode_literals
from
.models
import
AssetPermission
from
.hands
import
User
,
UserGroup
,
Asset
,
AssetGroup
,
SystemUser
from
common.utils
import
combine_seq
def
get_asset_groups_denied_by_user_group
(
user_group
):
pass
def
get_asset_groups_granted_by_user_group
(
user_group
):
"""Return asset groups granted of the user group
:param user_group: Instance of :class: ``UserGroup``
:return: {asset_group1: {system_user1, }, asset_group2: {system_user1, system_user2]}
"""
asset_groups
=
{}
if
not
isinstance
(
user_group
,
UserGroup
):
return
asset_groups
asset_permissions
=
user_group
.
asset_permissions
.
all
()
for
asset_permission
in
asset_permissions
:
if
not
asset_permission
.
is_valid
:
continue
for
asset_group
in
asset_permission
.
asset_groups
.
all
():
if
asset_group
in
asset_groups
:
asset_groups
[
asset_group
]
.
union
(
set
(
asset_permission
.
system_users
.
all
()))
else
:
asset_groups
[
asset_group
]
=
set
(
asset_permission
.
system_users
.
all
())
return
asset_groups
def
get_assets_granted_by_user_group
(
user_group
):
"""Return assets granted of the user group
:param user_group: Instance of :class: ``UserGroup``
:return: {asset1: {system_user1, }, asset1: {system_user1, system_user2]}
"""
assets
=
{}
if
not
isinstance
(
user_group
,
UserGroup
):
return
assets
asset_permissions
=
user_group
.
asset_permissions
.
all
()
for
asset_permission
in
asset_permissions
:
for
asset
in
asset_permission
.
get_granted_assets
:
if
asset
in
assets
:
pass
def
get_asset_groups_granted_by_user
(
user
):
"""Return asset groups granted of the user
:param user: Instance of :class: ``User``
:return: {asset_group: {system_user1, }, asset_group2: {system_user1, system_user2]}
"""
asset_groups
=
{}
if
not
isinstance
(
user
,
User
):
return
asset_groups
asset_permissions
=
user
.
asset_permissions
.
all
()
for
asset_permission
in
asset_permissions
:
for
asset_group
in
asset_permission
.
asset_groups
.
all
():
if
asset_group
in
asset_groups
:
asset_groups
[
asset_group
]
.
union
(
set
(
asset_permission
.
system_users
.
all
()))
else
:
asset_groups
[
asset_group
]
=
set
(
asset_permission
.
system_users
.
all
())
return
asset_groups
def
get_assets_granted_by_user
(
user
):
"""Return all assets granted of the user
:param user: Instance of :class: ``User``
:return: {asset1: {system_user1, system_user2}, asset2: {...}}
"""
pass
def
get_user_groups_granted_in_asset
(
asset
):
pass
def
get_users_granted_in_asset
(
asset
):
pass
def
get_user_groups_granted_in_asset_group
(
asset
):
pass
def
get_users_granted_in_asset_group
(
asset
):
pass
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