Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
P
PyFund
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
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
陈涛
PyFund
Commits
ed8fbd02
Commit
ed8fbd02
authored
May 22, 2023
by
陈涛
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/main'
parents
d519456a
a64dcbc9
Changes
5
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
101 additions
and
27 deletions
+101
-27
permission.py
api/permission.py
+24
-3
dependencies.py
dependencies.py
+9
-1
main.py
main.py
+3
-0
permission.py
model/permission.py
+1
-1
permission.py
service/permission.py
+64
-22
No files found.
api/permission.py
View file @
ed8fbd02
from
motor.core
import
AgnosticCollection
from
motor.core
import
AgnosticCollection
from
dependencies
import
get_current_user
,
get_permission_user_collect
,
get_permission_role_collect
from
dependencies
import
get_current_user
,
get_permission_user_collect
,
get_permission_role_collect
,
\
get_permission_label_map
from
exception.token
import
FundPermissionError
from
exception.token
import
FundPermissionError
from
model
import
BaseResponse
,
Response
from
model
import
BaseResponse
,
Response
from
fastapi
import
APIRouter
,
Depends
from
fastapi
import
APIRouter
,
Depends
from
schema.permission
import
CreateUserInfo
from
schema.permission
import
CreateUserInfo
from
service.permission
import
check_permission
from
service.permission
import
check_permission
,
find_user_permission
,
build_permission_tree
from
tools.jwt_tools
import
User
from
tools.jwt_tools
import
User
router
=
APIRouter
()
router
=
APIRouter
()
...
@@ -16,7 +17,7 @@ router = APIRouter()
...
@@ -16,7 +17,7 @@ router = APIRouter()
response_model
=
BaseResponse
,
response_model
=
BaseResponse
,
summary
=
'添加账号权限'
,
summary
=
'添加账号权限'
,
description
=
'添加账号权限'
)
description
=
'添加账号权限'
)
async
def
get
_permission
(
async
def
create
_permission
(
create_user_info
:
CreateUserInfo
,
create_user_info
:
CreateUserInfo
,
user
:
User
=
Depends
(
get_current_user
),
user
:
User
=
Depends
(
get_current_user
),
permission_user_collect
:
AgnosticCollection
=
Depends
(
get_permission_user_collect
),
permission_user_collect
:
AgnosticCollection
=
Depends
(
get_permission_user_collect
),
...
@@ -36,6 +37,26 @@ async def get_permission(
...
@@ -36,6 +37,26 @@ async def get_permission(
else
:
else
:
raise
FundPermissionError
()
raise
FundPermissionError
()
@
router
.
get
(
'/user/'
,
response_model
=
BaseResponse
,
summary
=
'查询账号权限'
,
description
=
'查询账号权限'
)
async
def
create_permission
(
fund_id
:
str
,
user
:
User
=
Depends
(
get_current_user
),
permission_label_map
:
dict
=
Depends
(
get_permission_label_map
),
permission_user_collect
:
AgnosticCollection
=
Depends
(
get_permission_user_collect
),
permission_role_collect
:
AgnosticCollection
=
Depends
(
get_permission_role_collect
)
):
permissions
,
roles
=
await
find_user_permission
(
fund_id
=
fund_id
,
email
=
user
.
email
,
permission_user_collect
=
permission_user_collect
,
permission_role_collect
=
permission_role_collect
)
role_db_data
=
await
permission_role_collect
.
find
({
'fund_id'
:
fund_id
,
"name"
:
{
"$in"
:
roles
}})
.
to_list
(
length
=
None
)
result_role_data
=
[{
"name"
:
item
[
"name"
],
"label"
:
item
[
"label"
]}
for
item
in
role_db_data
]
permissions_tree
=
build_permission_tree
(
permissions
,
permission_label_map
)
return
Response
(
data
=
{
'permission'
:
permissions_tree
,
"roles"
:
result_role_data
})
# @router.post('/role',
# @router.post('/role',
# response_model=BaseResponse,
# response_model=BaseResponse,
# summary='添加角色',
# summary='添加角色',
...
...
dependencies.py
View file @
ed8fbd02
...
@@ -12,9 +12,17 @@ from starlette.requests import Request
...
@@ -12,9 +12,17 @@ from starlette.requests import Request
from
tools.jwt_tools
import
User
from
tools.jwt_tools
import
User
def
get_permission_tree
(
request
:
Request
)
->
dict
:
return
request
.
app
.
state
.
permission_tree
def
get_permission_label_map
(
request
:
Request
)
->
dict
:
return
request
.
app
.
state
.
label_map
def
get_current_user
(
credentials
:
HTTPAuthorizationCredentials
=
Security
(
jwt_tools
.
security
))
->
User
:
def
get_current_user
(
credentials
:
HTTPAuthorizationCredentials
=
Security
(
jwt_tools
.
security
))
->
User
:
if
settings
.
env
==
'LOCAL'
:
if
settings
.
env
==
'LOCAL'
:
return
User
(
id
=
'659092a5-df9e-43fd-b51d-79d4c7ff09ad'
,
email
=
'local_test@qq.com
'
)
return
User
(
id
=
credentials
.
credentials
,
email
=
'wangzian@matrixone.io
'
)
return
jwt_tools
.
get_current_user
(
credentials
)
return
jwt_tools
.
get_current_user
(
credentials
)
...
...
main.py
View file @
ed8fbd02
...
@@ -16,6 +16,7 @@ from db import register_mongodb, register_redis
...
@@ -16,6 +16,7 @@ from db import register_mongodb, register_redis
from
exception
import
MyException
from
exception
import
MyException
from
model
import
ErrorResponse
from
model
import
ErrorResponse
from
service.beacon
import
BeaconChaService
from
service.beacon
import
BeaconChaService
from
service.permission
import
make_permission_tree_and_label_map
from
service.price
import
CMCPrice
from
service.price
import
CMCPrice
from
service.scheduler
import
update_staking_node_status_task
from
service.scheduler
import
update_staking_node_status_task
from
tools.jwt_tools
import
get_identify_key
from
tools.jwt_tools
import
get_identify_key
...
@@ -85,6 +86,8 @@ async def startup():
...
@@ -85,6 +86,8 @@ async def startup():
misfire_grace_time
=
600
*
3
misfire_grace_time
=
600
*
3
)
)
app
.
state
.
permission_tree
,
app
.
state
.
label_map
=
make_permission_tree_and_label_map
()
app
.
state
.
scheduler
.
add_job
(
app
.
state
.
scheduler
.
add_job
(
update_staking_node_status_task
,
update_staking_node_status_task
,
args
=
(
BeaconChaService
(),
app
.
state
.
mongodb_manager
,),
args
=
(
BeaconChaService
(),
app
.
state
.
mongodb_manager
,),
...
...
model/permission.py
View file @
ed8fbd02
from
typing
import
List
,
Dict
from
typing
import
List
from
pydantic
import
Field
from
pydantic
import
Field
from
model
import
MyBaseModel
from
model
import
MyBaseModel
...
...
service/permission.py
View file @
ed8fbd02
...
@@ -306,15 +306,20 @@ default_role_table = [
...
@@ -306,15 +306,20 @@ default_role_table = [
}
}
]
]
data
=
[]
for
item
in
sys_permission_table
:
def
make_all_permission_data
():
data
=
[]
for
item
in
sys_permission_table
:
for
i
in
item
[
'children'
]:
for
i
in
item
[
'children'
]:
for
x
in
i
[
'children'
]:
for
x
in
i
[
'children'
]:
data
.
append
(
x
[
"code"
])
data
.
append
(
x
[
"code"
])
return
data
permission_tree
=
{}
def
make_permission_tree_and_label_map
():
label_map
=
{}
label_map
=
{}
for
item
in
sys_permission_table
:
permission_tree
=
{}
for
item
in
sys_permission_table
:
label_map
[
item
[
'code'
]]
=
item
[
'label'
]
label_map
[
item
[
'code'
]]
=
item
[
'label'
]
permission_tree
[
item
[
"code"
]]
=
{}
permission_tree
[
item
[
"code"
]]
=
{}
for
children
in
item
[
"children"
]:
for
children
in
item
[
"children"
]:
...
@@ -323,10 +328,7 @@ for item in sys_permission_table:
...
@@ -323,10 +328,7 @@ for item in sys_permission_table:
label_map
[
i
[
'code'
]]
=
i
[
'label'
]
label_map
[
i
[
'code'
]]
=
i
[
'label'
]
permission_tree
[
item
[
"code"
]]
.
setdefault
(
children
[
"code"
],
[])
permission_tree
[
item
[
"code"
]]
.
setdefault
(
children
[
"code"
],
[])
permission_tree
[
item
[
"code"
]][
children
[
"code"
]]
.
append
(
i
[
'code'
])
permission_tree
[
item
[
"code"
]][
children
[
"code"
]]
.
append
(
i
[
'code'
])
return
permission_tree
,
label_map
print
(
data
)
print
(
permission_tree
)
print
(
label_map
)
async
def
create_default_role_and_user
(
fund_id
,
admin_email
,
permission_user_collect
:
AgnosticCollection
,
async
def
create_default_role_and_user
(
fund_id
,
admin_email
,
permission_user_collect
:
AgnosticCollection
,
...
@@ -352,12 +354,52 @@ async def check_permission(for_check_permission_list, fund_id, email, permission
...
@@ -352,12 +354,52 @@ async def check_permission(for_check_permission_list, fund_id, email, permission
if
not
this_fund_role
:
if
not
this_fund_role
:
return
False
return
False
else
:
else
:
data
=
await
permission_role_collect
.
find
(
permission_list
,
roles
=
await
find_user_permission
(
fund_id
,
email
,
permission_user_collect
,
{
'fund_id'
:
fund_id
,
'name'
:
{
'$in'
:
this_fund_role
[
'role'
]}})
.
to_list
(
length
=
None
)
permission_role_collect
)
permission_list
=
[
item
for
sublist
in
data
for
item
in
sublist
[
'permissions'
]]
if
'all'
in
permission_list
:
if
'all'
in
permission_list
:
return
True
return
True
elif
all
(
x
in
permission_list
for
x
in
for_check_permission_list
):
elif
all
(
x
in
permission_list
for
x
in
for_check_permission_list
):
return
True
return
True
else
:
else
:
return
False
return
False
async
def
find_user_permission
(
fund_id
,
email
,
permission_user_collect
,
permission_role_collect
):
this_fund_role
=
await
permission_user_collect
.
find_one
({
'email'
:
email
,
'fund_id'
:
fund_id
})
if
not
this_fund_role
:
return
[],
[]
else
:
if
'admin'
in
this_fund_role
[
'roles'
]:
permission_list
=
all_permission_data
else
:
data
=
await
permission_role_collect
.
find
(
{
'fund_id'
:
fund_id
,
'name'
:
{
'$in'
:
this_fund_role
[
'roles'
]}})
.
to_list
(
length
=
None
)
permission_list
=
list
({
item
for
sublist
in
data
for
item
in
sublist
[
'permissions'
]})
return
permission_list
,
this_fund_role
[
'roles'
]
def
build_permission_tree
(
permissions
,
permission_label_map
):
final
=
{
"data_permission"
:
{
"label"
:
"数据管理权限"
,
"children"
:
{}},
"member_permission"
:
{
"label"
:
"人员管理权限"
,
"children"
:
{}},
"role_permission"
:
{
"label"
:
"角色管理权限"
,
"children"
:
{}}
}
for
permission
in
permissions
:
parts
=
permission
.
split
(
'.'
)
final
.
setdefault
(
parts
[
0
],
{
'label'
:
permission_label_map
[
parts
[
0
]],
'children'
:
{}})
final
[
parts
[
0
]][
'children'
]
.
setdefault
(
f
'{parts[0]}.{parts[1]}'
,
{
'label'
:
permission_label_map
[
f
'{parts[0]}.{parts[1]}'
],
'children'
:
{}})
final
[
parts
[
0
]][
'children'
][
f
'{parts[0]}.{parts[1]}'
][
'children'
][
permission
]
=
{
'label'
:
permission_label_map
[
permission
]}
return
final
all_permission_data
=
make_all_permission_data
()
if
__name__
==
'__main__'
:
import
collections
# print(make_permission_tree_and_label_map())
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