Права доступа
У любого ресурса в системе есть владелец и права доступа.
Владелец у ресурса может быть только один и не может меняться. У владельца всегда есть все права на ресурс, даже если не указаны явно.
Права доступа может изменять только владелец ресурса.
Существует три типа доступа:
Чтение ресурса (read)
Чтение истории изменений (readhistory)
Изменение ресурса (updatebody)
Получение списка прав доступа
Получить метаданные можно простым получением ресурса
GET fhir/<Resource>/<id>
Имя | Location | Описание |
---|---|---|
Authorization | Header | см. Авторизация |
Content-Type | Header | application/json |
Request | Body | Fhir Resource |
Request: Object
В ответе в поле meta
указаны права доступа, например:
{
"id": "000015b8-1788-49b0-b3d4-988e38467216",
"resourceType": "organization",
"meta": {
"security": [
{
"system": "https://api.medlinx.online/security/read",
"code": "clinics.migrator"
},
{
"system": "https://api.medlinx.online/security/readhistory",
"code": "clinics.migrator"
},
{
"system": "https://api.medlinx.online/security/updatebody",
"code": "clinics.migrator"
},
{
"system": "https://api.medlinx.online/security/owner",
"code": "clinics.migrator"
}
]
}
}
Так же получить метаданные можно через специальную операцию:
GET fhir/<Resource>/<id>/$meta
Имя | Location | Описание |
---|---|---|
Authorization | Header | см. Авторизация |
Content-Type | Header | application/json |
Request | Body | Parameters (Fhir Resource) |
Request: Object
В ответ сервер отправит ресурс Parameters с указанием только метаданных, например:
{
"resourceType": "Parameters",
"id": "000015b8-1788-49b0-b3d4-988e38467216",
"meta": {
"security": [
{
"system": "https://api.medlinx.online/security/read",
"code": "clinics.migrator"
},
{
"system": "https://api.medlinx.online/security/readhistory",
"code": "clinics.migrator"
},
{
"system": "https://api.medlinx.online/security/updatebody",
"code": "clinics.migrator"
},
{
"system": "https://api.medlinx.online/security/owner",
"code": "clinics.migrator"
}
]
}
}
Изменение прав доступа
Права досупа могут быть назначены при создании ресурса или командами управления правами доступа.
Для управления доступом сущестует две операции:
$meta-add
$meta-delete
Права доступа при создании ресурса
При создании ресурса можно явно указать секцию meta.security
с указанием дополнительных прав на ресурс. В блоке meta.security
каждая секция описывает связку - группа прав и идентификатор пользователя.
Пример секции meta.security
для ресурса пациент.
{
"resourceType": "Patient",
"meta": {
"security": [{
"system": "read",
"code": "staff_reader"
}, {
"system": "read",
"code": "patient_reader"
}, {
"system": "readhistory",
"code": "superman"
}, {
"system": "updatebody",
"code": "superman"
}
]
},
"name": [{
"family": "Duck",
"given": ["Donald"]
}
],
"gender": "male"
}
По умолчанию для ресурса все права есть у владельца.
В поле type должны писаться права вида read
, readhistory
, updatebody
, а не полное название.
Добавление прав доступа
POST fhir/<Resource>/<resource guid>/$meta-add
Имя | Location | Описание |
---|---|---|
Authorization | Header | см. Авторизация |
Content-Type | Header | application/json |
Request | Body | Parameters (Fhir Resource) |
Request: Object
Пример
{
"resourceType": "Parameters",
"id": "<resource guid>",
"meta": {
"security": [{
"system": "<type>",
"code": "<contragent guid>"
}
]
}
}
В поле type должны писаться права вида read
, readhistory
, updatebody
, а не полное название.
Удаление прав доступа
POST fhir/<Resource>/<resource guid>/$meta-delete
Имя | Location | Описание |
---|---|---|
Authorization | Header | см. Авторизация |
Content-Type | Header | application/json |
Request | Body | Parameters (Fhir Resource) |
Request: Object
Пример
{
"resourceType": "Parameters",
"id": "<resource guid>",
"meta": {
"security": [{
"system": "<type>",
"code": "<contragent guid>"
}
]
}
}
В поле type должны писаться права вида read
, readhistory
, updatebody
, а не полное название.
Удалено будет только значение указанное в поле code.