123 resource realm relaxation
This commit is contained in:
+1
-1
@@ -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();
|
||||
|
||||
@@ -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>
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user