from arkid.core.b64_compress import Compress
from arkid.core.openapi import get_permissions
from arkid.core.models import (
UserPermissionResult, SystemPermission, User,
Tenant, App, Permission, UserGroup,
ExpiringToken, GroupPermissionResult, AppPermissionResult,
OpenPermission,
)
from arkid.core.api import api
from django.db.models import Q
import collections
import requests
import logging
import uuid
import jwt
import re
from oauth2_provider.models import Application
class PermissionData(object):
'''
权限数据的统一处理类
'''
def __init__(self):
pass
def update_system_permission(self):
'''
更新系统权限
'''
# 取得所有的系统权限
return_change_group_info, return_change_sort_ids = self.update_arkid_system_permission()
# 更新所有用户的系统权限
tenants = Tenant.valid_objects.all()
for tenant in tenants:
self.update_arkid_all_user_permission(str(tenant.id), change_sort_ids=return_change_sort_ids)
def update_app_permission(self, tenant_id, app_id):
'''
更新应用权限
'''
tenant = Tenant.valid_objects.filter(id=tenant_id).first()
app = App.valid_objects.filter(id=app_id).first()
if tenant and app:
app_config = app.config.config
openapi_uris = app_config.get('openapi_uris', None)
if openapi_uris:
# 取得应用所有的权限
return_change_group_info, return_change_sort_ids = self.update_app_all_permission(tenant, app)
# 更新应用所有用户权限
uprs = UserPermissionResult.valid_objects.filter(
app=app
).exclude(tenant=tenant)
tenants = []
tenants.append(tenant)
for upr in uprs:
tenant = upr.tenant
if tenant not in tenants:
tenants.append(tenant)
for tenant in tenants:
# 需要更新对应租户的所有用户
self.update_app_all_user_permission(tenant, app, change_sort_ids=return_change_sort_ids)
def update_only_user_app_permission(self, tenant_id, app_id):
'''
仅仅更新用户的应用权限
'''
tenant = Tenant.valid_objects.filter(id=tenant_id).first()
app = App.valid_objects.filter(id=app_id).first()
if tenant and app:
# 更新应用所有用户权限
uprs = UserPermissionResult.valid_objects.filter(
app=app
).exclude(tenant=tenant)
tenants = []
tenants.append(tenant)
for upr in uprs:
tenant = upr.tenant
if tenant not in tenants:
tenants.append(tenant)
for tenant in tenants:
# 需要更新对应租户的所有用户
self.update_app_all_user_permission(tenant, app)
def update_tenant_permission(self, tenant_id):
'''
更新租户权限
'''
tenant = Tenant.valid_objects.filter(id=tenant_id).first()
if tenant and app:
# 更新租户的所有用户权限
self.update_tenant_all_user_permission(tenant)
def get_platfrom_tenant(self):
'''
获取平台租户
'''
# tenant, _ = Tenant.objects.get_or_create(
# slug='',
# name="平台租户",
# )
tenant = Tenant.objects.filter(
slug=''
).first()
if tenant is None:
tenant = Tenant()
tenant.slug = ''
tenant.name = '平台租户'
tenant.save()
return tenant
def api_system_permission_check(self, tenant, user, operation_id):
'''
检查api接口权限
'''
systempermission = SystemPermission.valid_objects.filter(tenant=None, is_system=True, operation_id=operation_id, category='api').first()
if systempermission:
sort_id = systempermission.sort_id
permission_result_arr = self.get_permission_result(tenant, user, None)
if permission_result_arr and len(permission_result_arr) > sort_id and int(permission_result_arr[sort_id]) == 0:
return False
return True
def api_system_permission_check_app(self, tenant, app, operation_id):
'''
根据应用检查api接口权限
'''
systempermission = SystemPermission.valid_objects.filter(tenant=None, is_system=True, operation_id=operation_id, category='api').first()
if systempermission:
sort_id = systempermission.sort_id
permission_result_arr = self.get_app_system_permission_result(tenant, app, None)
if permission_result_arr is None:
return False
if len(permission_result_arr) <= sort_id:
return False
if permission_result_arr and len(permission_result_arr) > sort_id and int(permission_result_arr[sort_id]) == 0:
return False
return True
def get_app_system_permission_result(self, tenant, app, select_app):
'''
取得应用解码后的权限数组
'''
apppermissionresult = AppPermissionResult.valid_objects.filter(
tenant=tenant,
self_app=app,
app=select_app,
).first()
compress = Compress()
permission_result_arr = []
if apppermissionresult:
permission_result = compress.decrypt(apppermissionresult.result)
permission_result_arr = list(permission_result)
return permission_result_arr
def get_permission_result(self, tenant, user, app):
'''
取得用户解码后的权限数组
'''
userpermissionresult = UserPermissionResult.valid_objects.filter(
user=user,
tenant=tenant,
app=app,
).first()
compress = Compress()
permission_result_arr = []
if userpermissionresult:
permission_result = compress.decrypt(userpermissionresult.result)
permission_result_arr = list(permission_result)
return permission_result_arr
def add_system_permission_to_user(self, tenant_id, user_id, permission_id):
'''
给某个用户增加系统权限
'''
tenant = Tenant.valid_objects.filter(id=tenant_id).first()
user = User.valid_objects.filter(id=user_id).first()
permission = SystemPermission.valid_objects.filter(id=permission_id).first()
if tenant:
self.update_arkid_single_user_permission(tenant, user, permission, 1)
else:
print('不存在租户或者用户无法更新')
def add_user_many_permission(self, permissions_dict):
'''
给用户添加多个权限自动区分类型
'''
user_ids = permissions_dict.get('user_ids', [])
data_arr = permissions_dict.get('data_arr', [])
tenant_id = permissions_dict.get('tenant_id', None)
for user_id in user_ids:
if user_id and data_arr and tenant_id:
for permission_id in data_arr:
permission = SystemPermission.valid_objects.filter(id=permission_id).first()
if permission is None:
permission = Permission.valid_objects.filter(id=permission_id).first()
if isinstance(permission, SystemPermission):
# 添加系统权限
self.add_system_permission_to_user(tenant_id, user_id, permission_id)
else:
# 添加应用权限
self.add_app_permission_to_user(tenant_id, str(permission.app_id), user_id, permission_id
没有合适的资源?快使用搜索试试~ 我知道了~
一账通是一款开源的统一身份认证授权管理解决方案,企业级IDaaS/IAM平台系统
共1177个文件
py:820个
md:260个
toml:22个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 1 下载量 120 浏览量
2023-05-27
10:43:22
上传
评论
收藏 3.4MB ZIP 举报
温馨提示
ArkID : 企业级IDaaS/IAM平台系统;丰富的插件,快速构建专属IDaaS/IAM平台;轻松集成您的所有应用。统一的身份,认证,权限管理系统。一账通是一款开源的统一身份认证授权管理解决方案,支持多种标准协议(LDAP, OAuth2, SAML, OpenID),细粒度权限控制,完整的WEB管理功能,钉钉、企业微信集成等,
资源推荐
资源详情
资源评论
收起资源包目录
一账通是一款开源的统一身份认证授权管理解决方案,企业级IDaaS/IAM平台系统 (1177个子文件)
assets 12B
assets 12B
portal.conf 2KB
supervisor.conf 823B
fe.conf 378B
pip.conf 68B
extra.css 491B
Dockerfile 1KB
.gitignore 3KB
.gitkeep 0B
header.html 4KB
login_enter.html 3KB
logout.html 3KB
switch_tenant.html 3KB
form_login.html 3KB
main.html 2KB
application_form.html 2KB
application_detail.html 1KB
authorize.html 1KB
base.html 1KB
redoc.html 937B
application_list.html 799B
swagger.html 786B
authorized-tokens.html 776B
application_confirm_delete.html 726B
authorized-oob.html 525B
tabs.html 525B
application_registration_form.html 343B
authorized-token-delete.html 291B
index.html 151B
uwsgi.ini 424B
LICENSE 34KB
Pipfile.lock 74KB
OpenAPI Plus.md 19KB
index.md 18KB
OpenAPI Plus.md 16KB
index.md 16KB
Front-EndInterface.md 16KB
前端界面.md 13KB
OIDC.md 13KB
Case.md 13KB
Case.md 12KB
index.md 12KB
OIDC.md 12KB
OAuth2.md 12KB
OAuth2.md 11KB
应用.md 11KB
Application.md 10KB
IncomeCalculator.md 9KB
UnifiedAuthority.md 9KB
收益计算器.md 9KB
统一权限.md 8KB
DeployThroughK8S.md 7KB
DeployThroughArkos.md 7KB
index.md 7KB
应用商店-私有化应用.md 7KB
通过k8s部署.md 7KB
AlibabaCloudConfiguration.md 6KB
ApplicationStore-PrivateApplication.md 6KB
通过ArkOS部署.md 6KB
index.md 6KB
Agent.md 6KB
API.md 6KB
AuthorityManagement.md 5KB
index.md 5KB
index.md 5KB
DataSynchronization.md 5KB
CertificationManagement.md 5KB
API.md 5KB
代理商.md 5KB
DevelopTheFirstPlug-In.md 5KB
权限管理.md 5KB
index.md 5KB
Database.md 5KB
index.md 5KB
index.md 5KB
数据同步.md 4KB
数据库.md 4KB
开发第一个插件.md 4KB
index.md 4KB
Configuration.md 4KB
认证管理.md 4KB
index.md 4KB
index.md 4KB
Docs.md 4KB
index.md 4KB
index.md 4KB
AuthorizationRules.md 4KB
StaticStorage.md 4KB
配置.md 4KB
静态存储.md 4KB
index.md 4KB
UserManagement.md 4KB
index.md 4KB
index.md 4KB
index.md 3KB
用户管理.md 3KB
index.md 3KB
ApplicationManagement.md 3KB
授权规则.md 3KB
共 1177 条
- 1
- 2
- 3
- 4
- 5
- 6
- 12
资源评论
- yjc26882024-02-05超级好的资源,很值得参考学习,对我启发很大,支持!
Java程序员-张凯
- 粉丝: 1w+
- 资源: 6649
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 学生成绩管理系统-C++版本
- 吉林大学离散数学2笔记.pdf
- 通道处理过程的模拟通常涉及对通道处理机制的理解与实现.txt
- Flume进阶-自定义拦截器jar包
- Dubins曲线算法讲解和在运动规划中的使用.pdf
- 上市公司-股票性质数据-工具变量(民企、国企、央企)2003-2022年.dta
- 上市公司-股票性质数据-工具变量(民企、国企、央企)2003-2022年.xlsx
- Reeds+Shepp曲线算法讲解和实现.pdf
- 毕业设计基于SpringBoot+MyBatisPlus+MySQL+Vue的外卖配送信息系统源代码+数据库
- 词向量(Word Embeddings)是自然语言处理(NLP)领域的一种重要技术.txt
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功