mirror of
https://git.mirrors.martin98.com/https://github.com/langgenius/dify.git
synced 2025-08-04 05:40:38 +08:00
feat(license): update workspaces and workspace_members limits
This commit is contained in:
parent
3a7ce5e27b
commit
6dd5d16998
@ -2,6 +2,7 @@ from urllib import parse
|
|||||||
|
|
||||||
from flask_login import current_user # type: ignore
|
from flask_login import current_user # type: ignore
|
||||||
from flask_restful import Resource, abort, marshal_with, reqparse # type: ignore
|
from flask_restful import Resource, abort, marshal_with, reqparse # type: ignore
|
||||||
|
from shapely.speedups import available
|
||||||
|
|
||||||
import services
|
import services
|
||||||
from configs import dify_config
|
from configs import dify_config
|
||||||
@ -55,10 +56,11 @@ class MemberInviteEmailApi(Resource):
|
|||||||
inviter = current_user
|
inviter = current_user
|
||||||
invitation_results = []
|
invitation_results = []
|
||||||
console_web_url = dify_config.CONSOLE_WEB_URL
|
console_web_url = dify_config.CONSOLE_WEB_URL
|
||||||
|
|
||||||
|
workspace_members = FeatureService.get_features(tenant_id=inviter.current_tenant.id).workspace_members
|
||||||
if (
|
if (
|
||||||
FeatureService.get_system_features().license.product_id == "DIFY_ENTERPRISE_STANDARD"
|
FeatureService.get_system_features().license.product_id == "DIFY_ENTERPRISE_STANDARD"
|
||||||
and len(invitee_emails)
|
and len(invitee_emails) > workspace_members.limit - workspace_members.size
|
||||||
> FeatureService.get_features(tenant_id=inviter.current_tenant.id).available_team_members
|
|
||||||
):
|
):
|
||||||
return {
|
return {
|
||||||
"code": "limit-exceeded",
|
"code": "limit-exceeded",
|
||||||
|
@ -585,11 +585,12 @@ class TenantService:
|
|||||||
if not FeatureService.get_system_features().is_allow_create_workspace and not is_setup:
|
if not FeatureService.get_system_features().is_allow_create_workspace and not is_setup:
|
||||||
raise WorkSpaceNotAllowedCreateError()
|
raise WorkSpaceNotAllowedCreateError()
|
||||||
|
|
||||||
|
workspaces = FeatureService.get_system_features().license.workspaces
|
||||||
if (
|
if (
|
||||||
FeatureService.get_system_features().license.product_id == "DIFY_ENTERPRISE_STANDARD"
|
FeatureService.get_system_features().license.product_id == "DIFY_ENTERPRISE_STANDARD"
|
||||||
and FeatureService.get_system_features().available_workspaces <= 0
|
and workspaces.limit - workspaces.size <= 0
|
||||||
):
|
):
|
||||||
raise WorkSpaceNotAllowedCreateError()
|
raise WorkSpaceNotAllowedCreateError("workspace creation limit exceeded")
|
||||||
|
|
||||||
if name:
|
if name:
|
||||||
tenant = TenantService.create_tenant(name=name, is_setup=is_setup)
|
tenant = TenantService.create_tenant(name=name, is_setup=is_setup)
|
||||||
|
@ -35,7 +35,8 @@ class LicenseModel(BaseModel):
|
|||||||
status: LicenseStatus = LicenseStatus.NONE
|
status: LicenseStatus = LicenseStatus.NONE
|
||||||
expired_at: str = ""
|
expired_at: str = ""
|
||||||
product_id: str = ""
|
product_id: str = ""
|
||||||
available_workspaces: int = 0
|
workspaces: LimitationModel = LimitationModel(size=0, limit=0)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class BrandingModel(BaseModel):
|
class BrandingModel(BaseModel):
|
||||||
@ -58,7 +59,7 @@ class FeatureModel(BaseModel):
|
|||||||
model_load_balancing_enabled: bool = False
|
model_load_balancing_enabled: bool = False
|
||||||
dataset_operator_enabled: bool = False
|
dataset_operator_enabled: bool = False
|
||||||
webapp_copyright_enabled: bool = False
|
webapp_copyright_enabled: bool = False
|
||||||
available_team_members: int = 0
|
workspace_members: LimitationModel = LimitationModel(size=0, limit=0)
|
||||||
|
|
||||||
# pydantic configs
|
# pydantic configs
|
||||||
model_config = ConfigDict(protected_namespaces=())
|
model_config = ConfigDict(protected_namespaces=())
|
||||||
@ -92,7 +93,7 @@ class FeatureService:
|
|||||||
|
|
||||||
if dify_config.ENTERPRISE_ENABLED:
|
if dify_config.ENTERPRISE_ENABLED:
|
||||||
features.webapp_copyright_enabled = True
|
features.webapp_copyright_enabled = True
|
||||||
cls._fulfill_parms_from_license(features, tenant_id)
|
cls._fulfill_parms_from_license_info(features, tenant_id)
|
||||||
|
|
||||||
return features
|
return features
|
||||||
|
|
||||||
@ -125,9 +126,10 @@ class FeatureService:
|
|||||||
features.dataset_operator_enabled = dify_config.DATASET_OPERATOR_ENABLED
|
features.dataset_operator_enabled = dify_config.DATASET_OPERATOR_ENABLED
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def _fulfill_parms_from_license(cls, features: FeatureModel, tenant_id: str):
|
def _fulfill_parms_from_license_info(cls, features: FeatureModel, tenant_id: str):
|
||||||
license_info = EnterpriseService.get_info(tenant_id)["License"]
|
license_info = EnterpriseService.get_info(tenant_id)["License"]
|
||||||
features.available_team_members = license_info["availableTeamMembers"]
|
features.workspace_members.limit = license_info["workspaceMembers"]["limit"]
|
||||||
|
features.workspace_members.size = license_info["workspaceMembers"]["used"]
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def _fulfill_params_from_billing_api(cls, features: FeatureModel, tenant_id: str):
|
def _fulfill_params_from_billing_api(cls, features: FeatureModel, tenant_id: str):
|
||||||
@ -215,8 +217,6 @@ class FeatureService:
|
|||||||
if "productId" in license_info:
|
if "productId" in license_info:
|
||||||
features.license.product_id = license_info["productId"]
|
features.license.product_id = license_info["productId"]
|
||||||
|
|
||||||
# if "availableTeamMembers" in license_info:
|
if "workspaces" in license_info:
|
||||||
# features.license.available_team_members = license_info["availableTeamMembers"]
|
features.license.workspaces.limit = license_info["workspaces"]["limit"]
|
||||||
|
features.license.workspaces.size = license_info["workspaces"]["used"]
|
||||||
if "availableWorkspaces" in license_info:
|
|
||||||
features.license.available_workspaces = license_info["availableWorkspaces"]
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user