215 impersonation bugfixes
This commit is contained in:
+50
-28
@@ -57,7 +57,7 @@
|
|||||||
|
|
||||||
//variables.framework.docs={};
|
//variables.framework.docs={};
|
||||||
variables.framework.docs.APIName="svc-api";
|
variables.framework.docs.APIName="svc-api";
|
||||||
variables.framework.docs.APIVersion="0.214"; /*$ git config --global --unset user.password*/
|
variables.framework.docs.APIVersion="0.215"; /*$ git config --global --unset user.password*/
|
||||||
|
|
||||||
variables.framework.globalHeaders = structNew();
|
variables.framework.globalHeaders = structNew();
|
||||||
variables.framework.globalHeaders["Access-Control-Expose-Headers"] = "Location";
|
variables.framework.globalHeaders["Access-Control-Expose-Headers"] = "Location";
|
||||||
@@ -283,8 +283,8 @@
|
|||||||
//writeDump(result); abort;
|
//writeDump(result); abort;
|
||||||
try {
|
try {
|
||||||
var idpUserData=deserializeJson(result);
|
var idpUserData=deserializeJson(result);
|
||||||
arguments.requestArguments.companyUid=idpUserData.userInfo.companyId;//GUID!
|
"arguments.requestArguments.companyUid"=idpUserData.userInfo.companyId;//GUID!
|
||||||
arguments.requestArguments.usrUid=idpUserData.userInfo.contactId;//userId; //GUID!
|
"arguments.requestArguments.usrUid"=idpUserData.userInfo.contactId;//userId; //GUID!
|
||||||
|
|
||||||
var usrCustomerInfo=getUsrCustomerInfo(idpUserData.userInfo.contactId, idpUserData.userInfo.companyId);
|
var usrCustomerInfo=getUsrCustomerInfo(idpUserData.userInfo.contactId, idpUserData.userInfo.companyId);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
@@ -298,13 +298,13 @@
|
|||||||
|
|
||||||
if (lCase(arguments.cfc) EQ 'notification_ls') { //*** костыль: для нотификаций можно адресоваться к пользователю без контракта
|
if (lCase(arguments.cfc) EQ 'notification_ls') { //*** костыль: для нотификаций можно адресоваться к пользователю без контракта
|
||||||
if (structIsEmpty(usrCustomerInfo)) {
|
if (structIsEmpty(usrCustomerInfo)) {
|
||||||
arguments.requestArguments.usrId=-1; //Integer!
|
"arguments.requestArguments.usrId"=-1; //Integer!
|
||||||
arguments.requestArguments.contragentId=-1; //Integer
|
"arguments.requestArguments.contragentId"=-1; //Integer
|
||||||
arguments.requestArguments.contractId=-1; //Integer
|
"arguments.requestArguments.contractId"=-1; //Integer
|
||||||
arguments.requestArguments.specificationId=-1; //Integer
|
"arguments.requestArguments.specificationId"=-1; //Integer
|
||||||
arguments.requestArguments.isImpersonated=false;
|
"arguments.requestArguments.isImpersonated"=false;
|
||||||
arguments.requestArguments.clientID="";
|
"arguments.requestArguments.clientID"="";
|
||||||
arguments.requestArguments.login="";
|
"arguments.requestArguments.login"="";
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -312,27 +312,27 @@
|
|||||||
|
|
||||||
if (structIsEmpty(usrCustomerInfo)) return representationOf("Cannot find default specification for current user #result#").withStatus(422); //это создает довольно много лишних движений при отладке
|
if (structIsEmpty(usrCustomerInfo)) return representationOf("Cannot find default specification for current user #result#").withStatus(422); //это создает довольно много лишних движений при отладке
|
||||||
|
|
||||||
arguments.requestArguments.usrId=usrCustomerInfo.usrId; //Integer!
|
"arguments.requestArguments.usrId"=usrCustomerInfo.usrId; //Integer
|
||||||
arguments.requestArguments.contragentId=usrCustomerInfo.contragentId; //Integer
|
"arguments.requestArguments.contragentId"=usrCustomerInfo.contragentId; //Integer
|
||||||
arguments.requestArguments.contractId=usrCustomerInfo.contractId; //Integer
|
"arguments.requestArguments.contractId"=usrCustomerInfo.contractId; //Integer
|
||||||
arguments.requestArguments.specificationId=usrCustomerInfo.specificationId; //Integer
|
"arguments.requestArguments.specificationId"=usrCustomerInfo.specificationId; //Integer
|
||||||
|
|
||||||
try {
|
try {
|
||||||
arguments.requestArguments.isImpersonated=idpUserData.impersonation.is_impersonated;
|
"arguments.requestArguments.isImpersonated"=idpUserData.impersonation.is_impersonated;
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
arguments.requestArguments.isImpersonated=false; // так себе решение, надо было бы NULL
|
"arguments.requestArguments.isImpersonated"=false; // так себе решение, надо было бы NULL
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
arguments.requestArguments.clientID=idpUserData.userInfo.clientID;
|
"arguments.requestArguments.clientID"=idpUserData.userInfo.clientID;
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
arguments.requestArguments.clientID="";
|
"arguments.requestArguments.clientID"="";
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
arguments.requestArguments.login=idpUserData.userInfo.login;
|
"arguments.requestArguments.login"=idpUserData.userInfo.login;
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
arguments.requestArguments.login="";
|
"arguments.requestArguments.login"="";
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@@ -423,6 +423,10 @@
|
|||||||
|
|
||||||
|
|
||||||
<cffunction name="getUsrCustomerInfo">
|
<cffunction name="getUsrCustomerInfo">
|
||||||
|
<!--- Может быть имперсонирована компания, а может контакт,
|
||||||
|
при этом если имперсонируется компания, то спецификацию и контракт нужно брать по компании
|
||||||
|
Кстати, зачем нужен вообще юзер, если компания всегда доступна, а вся информация висит на ней
|
||||||
|
Для того, чтобы разрешить ключ в целочисленный ключ CMDB--->
|
||||||
<cfargument name="usrUid"/>
|
<cfargument name="usrUid"/>
|
||||||
<cfargument name="contragentUid"/>
|
<cfargument name="contragentUid"/>
|
||||||
|
|
||||||
@@ -443,19 +447,36 @@
|
|||||||
<cfquery name="local.qGetContragentInfo">
|
<cfquery name="local.qGetContragentInfo">
|
||||||
select z.contragent_id, c.contract_id, s.specification_id
|
select z.contragent_id, c.contract_id, s.specification_id
|
||||||
from contragent z
|
from contragent z
|
||||||
left outer join contract c on (z.contragent_id=c.contragent_id)
|
join contract c on (z.contragent_id=c.contragent_id)
|
||||||
left outer join specification s on (c.contract_id=s.contract_id)
|
join specification s on (c.contract_id=s.contract_id)
|
||||||
where z.external_uid=<cfqueryparam cfsqltype="cf_sql_other" value="#arguments.contragentUid#" null=#!isValid('guid',arguments.contragentUid)#/>
|
where z.external_uid=<cfqueryparam cfsqltype="cf_sql_other" value="#arguments.contragentUid#" null=#!isValid('guid',arguments.contragentUid)#/>
|
||||||
order by s.specification_id desc
|
order by s.specification_id desc
|
||||||
limit 1;
|
limit 1;
|
||||||
</cfquery>
|
</cfquery>
|
||||||
<cfif local.qGetContragentInfo.recordCount EQ 0>
|
|
||||||
<cfthrow message="Contragent Not Found in CMDB" detail="Contragent with uuid=(#arguments.contragentUid#) not found in CMDB"/>
|
|
||||||
</cfif>
|
|
||||||
<cfif !len(local.qGetContragentInfo.contract_id)>
|
|
||||||
<cfthrow message="Contragent does not have a contract in CMDB" detail="No contract for contragent with uuid=(#arguments.contragentUid#) found in CMDB (contragent_id=#local.qGetContragentInfo.contragent_id#)"/>
|
|
||||||
</cfif>
|
|
||||||
|
|
||||||
|
<cfif local.qGetContragentInfo.recordCount EQ 0>
|
||||||
|
<!--- диагностика (тут можно не переживать за производительность, история редкая) --->
|
||||||
|
<cfquery name="local.qGetContragent">
|
||||||
|
select z.contragent_id
|
||||||
|
from contragent z
|
||||||
|
where z.external_uid=<cfqueryparam cfsqltype="cf_sql_other" value="#arguments.contragentUid#" null=#!isValid('guid',arguments.contragentUid)#/>
|
||||||
|
</cfquery>
|
||||||
|
<cfif local.qGetContragent.recordCount EQ 0>
|
||||||
|
<cfthrow message="Contragent Not Found in CMDB" detail="Contragent with uuid=(#arguments.contragentUid#) not found in CMDB"/>
|
||||||
|
</cfif>
|
||||||
|
|
||||||
|
<cfquery name="local.qGetContract">
|
||||||
|
select z.contragent_id, c.contract_id
|
||||||
|
from contragent z
|
||||||
|
join contract c on (z.contragent_id=c.contragent_id)
|
||||||
|
where z.external_uid=<cfqueryparam cfsqltype="cf_sql_other" value="#arguments.contragentUid#" null=#!isValid('guid',arguments.contragentUid)#/>
|
||||||
|
</cfquery>
|
||||||
|
<cfif local.qGetContract.recordCount EQ 0>
|
||||||
|
<cfthrow message="Contragent does not have a contract in CMDB" detail="No contract for contragent with uuid=(#arguments.contragentUid#) found in CMDB (contragent_id=#local.qGetContragent.contragent_id#)"/>
|
||||||
|
</cfif>
|
||||||
|
|
||||||
|
<cfthrow message="Contragent does not have a specification in CMDB" detail="No specification for contragent with uuid=(#arguments.contragentUid#) found in CMDB (contragent_id=#local.qGetContragent.contragent_id#)"/>
|
||||||
|
</cfif>
|
||||||
|
|
||||||
<cfquery name="local.qGetUserInfo">
|
<cfquery name="local.qGetUserInfo">
|
||||||
select u.usr_id, u.contragent_id, k.contragent_id as c_contragent_id
|
select u.usr_id, u.contragent_id, k.contragent_id as c_contragent_id
|
||||||
@@ -464,6 +485,7 @@
|
|||||||
where u.idp_usr_uid=<cfqueryparam cfsqltype="cf_sql_other" value="#arguments.usrUid#" null=#!isValid('guid',arguments.usrUid)#/>
|
where u.idp_usr_uid=<cfqueryparam cfsqltype="cf_sql_other" value="#arguments.usrUid#" null=#!isValid('guid',arguments.usrUid)#/>
|
||||||
limit 1;
|
limit 1;
|
||||||
</cfquery>
|
</cfquery>
|
||||||
|
|
||||||
<cfif local.qGetUserInfo.recordCount EQ 0>
|
<cfif local.qGetUserInfo.recordCount EQ 0>
|
||||||
<cfthrow message="User Not Found in CMDB" detail="User with uuid=(#arguments.usrUid#) not found in CMDB"/>
|
<cfthrow message="User Not Found in CMDB" detail="User with uuid=(#arguments.usrUid#) not found in CMDB"/>
|
||||||
</cfif>
|
</cfif>
|
||||||
|
|||||||
@@ -36,6 +36,7 @@
|
|||||||
<!--- <m:field>s.specification</m:field>
|
<!--- <m:field>s.specification</m:field>
|
||||||
<m:field>(select count(*) from specification_item i where i.specification_id=s.specification_id) as specification_item_count</m:field> --->
|
<m:field>(select count(*) from specification_item i where i.specification_id=s.specification_id) as specification_item_count</m:field> --->
|
||||||
<m:field>c.contract_id</m:field>
|
<m:field>c.contract_id</m:field>
|
||||||
|
<m:field>c.contragent_id</m:field>
|
||||||
<!--- <m:field>c.contract</m:field>
|
<!--- <m:field>c.contract</m:field>
|
||||||
<m:field>to_char(c.dt_contract, 'YYYY-MM-DD"T"HH24:MI:SS.FF3TZHTZM') as dt_contract</m:field> --->
|
<m:field>to_char(c.dt_contract, 'YYYY-MM-DD"T"HH24:MI:SS.FF3TZHTZM') as dt_contract</m:field> --->
|
||||||
</m:field_set>
|
</m:field_set>
|
||||||
@@ -68,6 +69,7 @@
|
|||||||
|
|
||||||
<cfset var resultCollection=[]/>
|
<cfset var resultCollection=[]/>
|
||||||
<cfset "out.usr" = (local.qRead.recordCount GT 0) ? this.helper.appendRecord(structNew("linked"), "", local.titleMap, local.qRead, this.helper.snake2camel) : {}/>
|
<cfset "out.usr" = (local.qRead.recordCount GT 0) ? this.helper.appendRecord(structNew("linked"), "", local.titleMap, local.qRead, this.helper.snake2camel) : {}/>
|
||||||
|
<cfset "out.arguments" = #arguments#/>
|
||||||
<cfset "out.defaultSpecification" = (local.qSpec.recordCount GT 0) ? this.helper.appendRecord(structNew("linked"), "", local.specTitleMap, local.qSpec, this.helper.snake2camel) : {}/>
|
<cfset "out.defaultSpecification" = (local.qSpec.recordCount GT 0) ? this.helper.appendRecord(structNew("linked"), "", local.specTitleMap, local.qSpec, this.helper.snake2camel) : {}/>
|
||||||
|
|
||||||
<cfset "out.runDurationMs"=getTickCount()-request.startTickCount/>
|
<cfset "out.runDurationMs"=getTickCount()-request.startTickCount/>
|
||||||
|
|||||||
Reference in New Issue
Block a user