215 impersonation bugfixes
This commit is contained in:
+50
-28
@@ -57,7 +57,7 @@
|
||||
|
||||
//variables.framework.docs={};
|
||||
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["Access-Control-Expose-Headers"] = "Location";
|
||||
@@ -283,8 +283,8 @@
|
||||
//writeDump(result); abort;
|
||||
try {
|
||||
var idpUserData=deserializeJson(result);
|
||||
arguments.requestArguments.companyUid=idpUserData.userInfo.companyId;//GUID!
|
||||
arguments.requestArguments.usrUid=idpUserData.userInfo.contactId;//userId; //GUID!
|
||||
"arguments.requestArguments.companyUid"=idpUserData.userInfo.companyId;//GUID!
|
||||
"arguments.requestArguments.usrUid"=idpUserData.userInfo.contactId;//userId; //GUID!
|
||||
|
||||
var usrCustomerInfo=getUsrCustomerInfo(idpUserData.userInfo.contactId, idpUserData.userInfo.companyId);
|
||||
} catch (e) {
|
||||
@@ -298,13 +298,13 @@
|
||||
|
||||
if (lCase(arguments.cfc) EQ 'notification_ls') { //*** костыль: для нотификаций можно адресоваться к пользователю без контракта
|
||||
if (structIsEmpty(usrCustomerInfo)) {
|
||||
arguments.requestArguments.usrId=-1; //Integer!
|
||||
arguments.requestArguments.contragentId=-1; //Integer
|
||||
arguments.requestArguments.contractId=-1; //Integer
|
||||
arguments.requestArguments.specificationId=-1; //Integer
|
||||
arguments.requestArguments.isImpersonated=false;
|
||||
arguments.requestArguments.clientID="";
|
||||
arguments.requestArguments.login="";
|
||||
"arguments.requestArguments.usrId"=-1; //Integer!
|
||||
"arguments.requestArguments.contragentId"=-1; //Integer
|
||||
"arguments.requestArguments.contractId"=-1; //Integer
|
||||
"arguments.requestArguments.specificationId"=-1; //Integer
|
||||
"arguments.requestArguments.isImpersonated"=false;
|
||||
"arguments.requestArguments.clientID"="";
|
||||
"arguments.requestArguments.login"="";
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -312,27 +312,27 @@
|
||||
|
||||
if (structIsEmpty(usrCustomerInfo)) return representationOf("Cannot find default specification for current user #result#").withStatus(422); //это создает довольно много лишних движений при отладке
|
||||
|
||||
arguments.requestArguments.usrId=usrCustomerInfo.usrId; //Integer!
|
||||
arguments.requestArguments.contragentId=usrCustomerInfo.contragentId; //Integer
|
||||
arguments.requestArguments.contractId=usrCustomerInfo.contractId; //Integer
|
||||
arguments.requestArguments.specificationId=usrCustomerInfo.specificationId; //Integer
|
||||
"arguments.requestArguments.usrId"=usrCustomerInfo.usrId; //Integer
|
||||
"arguments.requestArguments.contragentId"=usrCustomerInfo.contragentId; //Integer
|
||||
"arguments.requestArguments.contractId"=usrCustomerInfo.contractId; //Integer
|
||||
"arguments.requestArguments.specificationId"=usrCustomerInfo.specificationId; //Integer
|
||||
|
||||
try {
|
||||
arguments.requestArguments.isImpersonated=idpUserData.impersonation.is_impersonated;
|
||||
"arguments.requestArguments.isImpersonated"=idpUserData.impersonation.is_impersonated;
|
||||
} catch (e) {
|
||||
arguments.requestArguments.isImpersonated=false; // так себе решение, надо было бы NULL
|
||||
"arguments.requestArguments.isImpersonated"=false; // так себе решение, надо было бы NULL
|
||||
}
|
||||
|
||||
try {
|
||||
arguments.requestArguments.clientID=idpUserData.userInfo.clientID;
|
||||
"arguments.requestArguments.clientID"=idpUserData.userInfo.clientID;
|
||||
} catch (e) {
|
||||
arguments.requestArguments.clientID="";
|
||||
"arguments.requestArguments.clientID"="";
|
||||
}
|
||||
|
||||
try {
|
||||
arguments.requestArguments.login=idpUserData.userInfo.login;
|
||||
"arguments.requestArguments.login"=idpUserData.userInfo.login;
|
||||
} catch (e) {
|
||||
arguments.requestArguments.login="";
|
||||
"arguments.requestArguments.login"="";
|
||||
}
|
||||
|
||||
return true;
|
||||
@@ -423,6 +423,10 @@
|
||||
|
||||
|
||||
<cffunction name="getUsrCustomerInfo">
|
||||
<!--- Может быть имперсонирована компания, а может контакт,
|
||||
при этом если имперсонируется компания, то спецификацию и контракт нужно брать по компании
|
||||
Кстати, зачем нужен вообще юзер, если компания всегда доступна, а вся информация висит на ней
|
||||
Для того, чтобы разрешить ключ в целочисленный ключ CMDB--->
|
||||
<cfargument name="usrUid"/>
|
||||
<cfargument name="contragentUid"/>
|
||||
|
||||
@@ -443,20 +447,37 @@
|
||||
<cfquery name="local.qGetContragentInfo">
|
||||
select z.contragent_id, c.contract_id, s.specification_id
|
||||
from contragent z
|
||||
left outer join contract c on (z.contragent_id=c.contragent_id)
|
||||
left outer join specification s on (c.contract_id=s.contract_id)
|
||||
join contract c on (z.contragent_id=c.contragent_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)#/>
|
||||
order by s.specification_id desc
|
||||
limit 1;
|
||||
</cfquery>
|
||||
|
||||
<cfif local.qGetContragentInfo.recordCount EQ 0>
|
||||
<cfthrow message="Contragent Not Found in CMDB" detail="Contragent with uuid=(#arguments.contragentUid#) not found in CMDB"/>
|
||||
<!--- диагностика (тут можно не переживать за производительность, история редкая) --->
|
||||
<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>
|
||||
<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>
|
||||
|
||||
|
||||
|
||||
<cfquery name="local.qGetUserInfo">
|
||||
select u.usr_id, u.contragent_id, k.contragent_id as c_contragent_id
|
||||
from usr u
|
||||
@@ -464,6 +485,7 @@
|
||||
where u.idp_usr_uid=<cfqueryparam cfsqltype="cf_sql_other" value="#arguments.usrUid#" null=#!isValid('guid',arguments.usrUid)#/>
|
||||
limit 1;
|
||||
</cfquery>
|
||||
|
||||
<cfif local.qGetUserInfo.recordCount EQ 0>
|
||||
<cfthrow message="User Not Found in CMDB" detail="User with uuid=(#arguments.usrUid#) not found in CMDB"/>
|
||||
</cfif>
|
||||
|
||||
@@ -36,6 +36,7 @@
|
||||
<!--- <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>c.contract_id</m:field>
|
||||
<m:field>c.contragent_id</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_set>
|
||||
@@ -68,6 +69,7 @@
|
||||
|
||||
<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.arguments" = #arguments#/>
|
||||
<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/>
|
||||
|
||||
Reference in New Issue
Block a user