Платформа 3V/Формы/Выражения/Параметры/Атрибут токена пользователя (EntryExpressionTokenAttributeParameter)

Материал из 3v-wiki
Перейти к навигации Перейти к поиску

Для использования данных токена пользователя, можно воспользоваться операндом для выражения EntryExpressionTokenAttributeParameter, который возвращает значение выбранного атрибута токена пользователя. Он имеет следующую структуру:

1  {
2           "attributeId": "preferred_username",
3           "discriminator": "EntryExpressionTokenAttributeParameter",
4           "id": 1,
5           "allowMultipleValues": false
6  }

Описание свойств параметра

Свойство Описание
id Идентификатор операнда
allowMultipleValues Флаг об получении результата в виде коллекции значений (true/false)
discriminator EntryExpressionTokenAttributeParameter
attributeId Идентификатор атрибута из токена.

Обращение к некоторым атрибутам токена

Из-за особенностей реализации чтения атрибутов токена на текущий момент, к некоторым атрибутам необходимо обращаться по другому наименованию внутри платформы.

Общий перечень измененных имен атрибутов токена в платформе:

Наименование из токена атрибута (можно увидеть через https://jwt.io/) - значение из колонки слева с маленькой буквы JwtRegisteredClaimNames - https://docs.microsoft.com/en-us/dotnet/api/system.identitymodel.tokens.jwt.jwtregisteredclaimnames?view=azure-dotnet

Наименование атрибута в платформе - Значение из колонки из колонки справа - https://docs.microsoft.com/ru-ru/dotnet/api/system.security.claims.claimtypes?view=net-5.0

Название атрибута в токене Название атрибута в платформе
email "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress"
family_name "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress"


 1  { /* пример чтения атрибута токена family_name */
 2       "expression": "ToString([3])",
 3       "returnFirstParameterValue": false,
 4       "operands": [
 5         {
 6           "attributeId": "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname",
 7           "discriminator": "EntryExpressionTokenAttributeParameter",
 8           "id": 3,
 9           "allowMultipleValues": false
10         }
11       ],
12       "id": 1104,
13       "name": null,
14       "code": null
15     }

Пример использования в качестве параметра выражения

Кейс: Выставить в первый текстовое поле true/false, в зависимости от того, есть ли у пользователя роль администратора, или нет. Во второе текстовое поле выставить логин пользователя.
Ссылка на пример: https://study.3v-cloud.com/navigator/#/home?objectId=867
read token.png

JSON серверной карточки
  1 {
  2   "id": 866,
  3   "name": "чтение токена",
  4   "description": null,
  5   "title": "",
  6   "uiSources": [
  7     {
  8       "trimSpaces": false,
  9       "defaultValue": null,
 10       "value": "",
 11       "doActionOnChangeValue": false,
 12       "rebuildDependentsObjectOnChange": true,
 13       "expressionId": 1100,
 14       "isNullable": true,
 15       "onAfterChangeValueConditionalActions": [],
 16       "onAfterChangeValueActions": [],
 17       "onAfterChangeValueByClientActions": [],
 18       "discriminator": "StringSourceEntry",
 19       "id": 500,
 20       "caption": "номер заказа",
 21       "enable": true,
 22       "visible": true,
 23       "hint": null,
 24       "enableRuleIds": [],
 25       "enableExpressionIds": [],
 26       "visibleRuleIds": [],
 27       "visibleExpressionIds": []
 28     },
 29     {
 30       "trimSpaces": false,
 31       "defaultValue": null,
 32       "value": "",
 33       "doActionOnChangeValue": false,
 34       "rebuildDependentsObjectOnChange": true,
 35       "expressionId": 1101,
 36       "isNullable": true,
 37       "onAfterChangeValueConditionalActions": [],
 38       "onAfterChangeValueActions": [],
 39       "onAfterChangeValueByClientActions": [],
 40       "discriminator": "StringSourceEntry",
 41       "id": 501,
 42       "caption": "номер заказа",
 43       "enable": true,
 44       "visible": true,
 45       "hint": null,
 46       "enableRuleIds": [],
 47       "enableExpressionIds": [],
 48       "visibleRuleIds": [],
 49       "visibleExpressionIds": []
 50     }
 51   ],
 52   "entryDataSources": [],
 53   "parameters": [],
 54   "binaryConditionsRules": [],
 55   "submitValidateRules": [],
 56   "expressions": [
 57     {
 58       "expression": "if (in('realm-admin', [1]), true, false)",
 59       "returnFirstParameterValue": false,
 60       "operands": [
 61         {
 62           "attributeId": "$Role",
 63           "discriminator": "EntryExpressionTokenAttributeParameter",
 64           "id": 1,
 65           "allowMultipleValues": true
 66         }
 67       ],
 68       "id": 1100,
 69       "name": null,
 70       "code": null
 71     },
 72     {
 73       "expression": "[1]",
 74       "returnFirstParameterValue": false,
 75       "operands": [
 76         {
 77           "attributeId": "preferred_username",
 78           "discriminator": "EntryExpressionTokenAttributeParameter",
 79           "id": 1,
 80           "allowMultipleValues": false
 81         }
 82       ],
 83       "id": 1101,
 84       "name": null,
 85       "code": null
 86     }
 87   ],
 88   "controlsValueCalculateRules": [],
 89   "actions": [],
 90   "conditionActionIdsOnOpen": [],
 91   "actionIdsOnOpen": [],
 92   "conditionalActions": [],
 93   "selectionSets": [],
 94   "reportTemplates": [],
 95   "featureFlags": {
 96     "useNewDependenciesBuilder": null,
 97     "includeDataToDto": null,
 98     "useLightDictionaryFormat": null,
 99     "checkChangesPivotOnDtoBuild": null,
100     "ignoreCycles": null,
101     "ignoreMissingDependencies": null,
102     "convertModel": null
103   }
104 }