123 resource realm relaxation

This commit is contained in:
msyu
2025-07-09 17:12:14 +03:00
parent f0d0bda87c
commit 903c0b8e65
4 changed files with 20 additions and 56 deletions
+1 -1
View File
@@ -51,7 +51,7 @@
//variables.framework.docs={};
variables.framework.docs.APIName="Deck API";
variables.framework.docs.APIVersion="0.122"; /*$ git config --global --unset user.password*/
variables.framework.docs.APIVersion="0.123"; /*$ git config --global --unset user.password*/
variables.framework.globalHeaders = structNew();
+1 -1
View File
@@ -363,7 +363,7 @@
<cffunction name="patch">
<cfargument name="instanceUid" type="string" required=true hint="type:guid"/>
<cfargument name="displayName" type="string" required=false hint="type:string"/>
<cfargument name="resourceRealmId" type="string" required=false hint="type:integer"/>
<!--- <cfargument name="resourceRealmId" type="string" required=false hint="type:integer"/> --->
<cfargument name="descr" type="string" required=false default="" hint="type:varchar (no cleanup here!)"/>
<!--- ****** проверка уникальности --->
@@ -228,48 +228,5 @@
</cfswitch>
</cffunction>
<!--- <cffunction name="getAvailableResourceRealms" returnType="string">
<cfargument name="svcId"/>
<cfargument name="contractId"/>
<cfset var local={}/>
<cfquery name="local.qAvailableResourceRealm"><!--- *** distinct халява, но придумывать корректную формулировку времени мало --->
select distinct r.resource_realm, r.sort
from resource_realm r
join resource_realm_access a on
(r.resource_realm_id=a.resource_realm_id
AND (a.contract_id=<cfqueryparam cfsqltype="CF_SQL_INTEGER" value=#arguments.contractId# null=#!isValid("integer", arguments.contractId)#/>
OR a.contract_id=0) /*0 means access to any contract*/
AND a.is_enabled)
join svc s on r.resource_realm_type_id=s.resource_realm_type_id
where s.svc_id=<cfqueryparam cfsqltype="CF_SQL_INTEGER" value=#arguments.svcId# null=#!isValid("integer", arguments.svcId)#/>
order by r.sort, r.resource_realm
</cfquery> <!--- <cfdump var=#arguments#/> cfdump здесь провоцирует NPE --->
<cfreturn valueList(local.qAvailableResourceRealm.resource_realm)/>
</cffunction>
<cffunction name="generateValueList" returntype="string">
<cfargument name="functionName" type="string" required="true"/>
<!--- остальные атрибуты необязательные, в argumentCollection (еще вопрос, насколько безопасно объявлять один из аргументов без остальных) --->
<cfswitch expression=#arguments.functionName#>
<cfcase value="">
<cfreturn ""/>
</cfcase>
<cfcase value="getAvailableResourceRealms">
<cfreturn getAvailableResourceRealms(arguments.svcId, arguments.contractId)/>
</cfcase>
<cfcase value="getSampleList"><!--- for debug --->
<cfreturn "dummy1,dummy2"/>
</cfcase>
<cfdefaultcase>
<cfreturn "function not found"/>
</cfdefaultcase>
</cfswitch>
</cffunction> --->
</cfcomponent>
+18 -11
View File
@@ -129,10 +129,6 @@
<cfset setInstanceOperationRfsParam(arguments.instanceOperationUid, "contragentCode", getContragentCode(arguments.contragentId))/>
</cfif>
<!--- <cfif listFind("create,redeploy",qSvcOperation.operation)>
<cfset CreateObject("component", "instance_operation_ls").checkResourceRealmId(qSvcOperation.resource_realm_id, qSvcOperation.instance_uid)/>
<cfset setInstanceOperationRfsParam(arguments.instanceOperationUid, "resourceRealm", qSvcOperation.resource_realm)/>
</cfif> --->
<cfquery name="qWriteRfsFromCfsParams">
insert into instance_operation_param (instance_operation_uid,param,param_value)
@@ -360,7 +356,9 @@
<cfset var local={}/>
<!--- Проверяем наличие CFS параметра resourceRealm у операции инстанса (не глядя на то, определен он или нет у операции сервиса) --->
<!--- Проверяем наличие CFS параметра resourceRealm у операции инстанса,
если он определен у операции сервиса
--->
<!--- структура cfs и rfs параметров отличается, поэтому селекты разные --->
<cfquery name="local.qParam">
select sop.svc_operation_cfs_param
@@ -392,8 +390,7 @@
where io.instance_operation_uid=<cfqueryparam cfsqltype="cf_sql_other" value="#arguments.instanceOperationUid#" null=#!isValid("guid",arguments.instanceOperationUid)#/>
</cfquery>
<!--- пробегаемся по CFS параметрам данной операции--->
<!---*** Нужно проверять только для тех операций, которые предусматривают resourceRealm --->
<!--- проверяем доступ к CFS параметру resourceRealm данной операции --->
<cfquery name="local.qCheckResourceRealmAccess">
select r.resource_realm_id, r.resource_realm, sop.svc_operation_cfs_param, iop.param_value, a.contract_id, a.is_enabled
from instance_operation_cfs_param iop
@@ -419,17 +416,27 @@
<cfset var local={}/>
<!--- Проверяем наличие RFS параметра resourceRealm у операции сервиса --->
<cfquery name="local.qParam">
<!--- <cfquery name="local.qParam">
select iop.param
from instance_operation io
join instance_operation_param iop on (io.instance_operation_uid=iop.instance_operation_uid)
where io.instance_operation_uid=<cfqueryparam cfsqltype="cf_sql_other" value="#arguments.instanceOperationUid#" null=#!isValid("guid",arguments.instanceOperationUid)#/>
AND LOWER(iop.param)=LOWER('resourceRealm')
</cfquery> <!--- Проверка на LOWER: возможная атака, поэтому трактуем расширенно --->
</cfquery> --->
<cfquery name="local.qParam">
select sop.svc_operation_param
from instance_operation io
join instance e on (io.instance_uid=e.instance_uid)
join svc_operation so on (e.service_id=so.svc_id AND io.operation=so.operation)
join svc_operation_param sop on (so.svc_operation_id=sop.svc_operation_id)
where io.instance_operation_uid=<cfqueryparam cfsqltype="cf_sql_other" value="#arguments.instanceOperationUid#" null=#!isValid("guid",arguments.instanceOperationUid)#/>
AND LOWER(sop.svc_operation_param)=LOWER('resourceRealm')
</cfquery><!--- Проверка на LOWER: возможная атака, поэтому трактуем расширенно --->
<cfif local.qParam.recordCount EQ 0>
<cfreturn/><!--- нечего проверять --->
<cfreturn/><!--- параметр операции сервиса не найден, нечего проверять --->
</cfif>
<!--- *** Особенность: если параметр resourceRealm определен у операции сервиса, он ведет себя как обязательный - его отсутствие у инстанса вызовет ошибку при проверке --->
<cfquery name="local.qOperation">
select io.operation
@@ -447,7 +454,7 @@
where io.instance_operation_uid=<cfqueryparam cfsqltype="cf_sql_other" value="#arguments.instanceOperationUid#" null=#!isValid("guid",arguments.instanceOperationUid)#/>
</cfquery>
<!--- пробегаемся по RFS параметрам данной операции--->
<!--- проверяем доступ к RFS параметру resourceRealm данной операции --->
<cfquery name="local.qCheckResourceRealmAccess">
select r.resource_realm_id, r.resource_realm, iop.param, iop.param_value, a.contract_id, a.is_enabled
from resource_realm r