The Smile CDR permission model has several key concepts:
FHIR_TRANSACTION
permission grants the user authorization to perform FHIR transaction
operations.FHIR_READ_INSTANCE
permission grants the user authorization to perform FHIR read
operations on a specific instance, which is specified in an argument to the permission (such as Patient/1234
).Note that in many cases a combination of permissions are required in order to allow the user to perform specific functions. Some examples follow:
The FHIR_TRANSACTION
permission allows the user to perform FHIR transaction
operations but does not explicitly authorize any of the operations that can be performed within a transaction. If the user wishes to perform a transaction
containing a Patient create
operation, the user would need both the FHIR_TRANSACTION permission and a permission that explicitly authorizes the create
, such as FHIR_WRITE_ALL_OF_TYPE with an argument of Patient
.
The ROLE_FHIR_CLIENT
permission allows the user to access the FHIR endpoint as a normal client (this is generally desirable) but does not grant the user permission to actually perform any FHIR operations. For example, if the user should be allowed to read anything (i.e. invoke FHIR search
, read
, history
, etc.) but never write, grant the user the ROLE_FHIR_CLIENT
and FHIR_ALL_READ
permissions. If the user should also be allowed to write Observations (but no other types of resources), they should be granted the FHIR_WRITE_ALL_OF_TYPE
permission with an argument of Observation
.
System-Defined Roles are a grouping of permissions mapping to a logical role.
User-Defined Roles are a set of permissions and roles which are tailored to the needs of a specific implementation. (Note that these are not yet available but will be implemented in an upcoming release.)
The following table lists the roles that are built into Smile CDR and may be assigned to a user.
The following table lists the permissions that are built into Smile CDR and may be assigned to a user.
Permission | Description | |
---|---|---|
ACCESS_ADMIN_JSON
|
Access JSON Admin API Endpoint
This permission does not take any arguments. |
|
ACCESS_ADMIN_WEB
Implies:
|
Admin
This permission does not take any arguments. |
|
ACCESS_EASYSHARE
|
Access EasyShare
This permission does not take any arguments. |
|
ACCESS_FHIRWEB
|
Access FHIRWeb Console
This permission does not take any arguments. |
|
ACCESS_FHIR_ENDPOINT
|
FHIR Client
This permission does not take any arguments. |
|
AG_ADMIN_CONSOLE_READ
|
appSphere Admin Console (read)
This permission does not take any arguments. |
|
AG_ADMIN_CONSOLE_WRITE
|
appSphere Admin Console (write)
This permission does not take any arguments. |
|
AG_DEV_PORTAL_READ
|
appSphere Developer Portal (read)
This permission does not take any arguments. |
|
AG_DEV_PORTAL_WRITE
|
appSphere Developer Portal (write)
This permission does not take any arguments. |
|
ARCHIVE_MODULE
Implies:
|
Archive Modules
This permission does not take any arguments. |
|
CDA_IMPORT
Implies:
|
Import CDA Documents
This permission does not take any arguments. |
|
CHANGE_OWN_DEFAULT_LAUNCH_CONTEXTS
|
Change Own Launch Contexts
This permission does not take any arguments. |
|
CHANGE_OWN_PASSWORD
|
Change Own Password
This permission does not take any arguments. |
|
CHANGE_OWN_TFA_KEY
|
Can set own 2FA Key
This permission does not take any arguments. |
|
CONTROL_MODULE
Implies:
|
Control Module
This permission does not take any arguments. |
|
CREATE_CDA_TEMPLATE
Implies:
|
Create CDA templates
This permission does not take any arguments. |
|
CREATE_MODULE
Implies:
|
Create Modules
This permission does not take any arguments. |
|
CREATE_USER
|
Create Users
This permission does not take any arguments. |
|
DELETE_CDA_TEMPLATE
Implies:
|
Delete CDA templates
This permission does not take any arguments. |
|
DOCREF
Implies:
|
DOCREF
This permission does not take any arguments. |
|
DQM_QPP_BUILD
Implies:
|
Dqm QPP Build
This permission does not take any arguments. |
|
EASYSHARE_CREATE_SMART_HEALTH_LINK
Implies:
|
Create SMART Health Link
This permission does not take any arguments. |
|
EMPI_ADMIN
|
EMPI Admin
This permission does not take any arguments. |
|
EMPI_UPDATE_MATCH_RULES
|
EMPI Update Match Rules
This permission does not take any arguments. |
|
EMPI_VIEW_MATCH_RULES
|
EMPI VIEW Match Rules
This permission does not take any arguments. |
|
ETL_IMPORT_PROCESS_FILE
|
ETL Import / Process File
This permission does not take any arguments. |
|
FHIR_ACCESS_PARTITION_ALL
Implies:
|
Access data in ALL Partitions
This permission does not take any arguments. |
|
FHIR_ACCESS_PARTITION_NAME
Implies:
|
Access data in Partition
Argument |
|
FHIR_ALL_DELETE
Implies:
|
FHIR Delete (All)
This permission does not take any arguments. |
|
FHIR_ALL_READ
|
FHIR Read (All)
This permission does not take any arguments. |
|
FHIR_ALL_WRITE
|
FHIR Write (All)
This permission does not take any arguments. |
|
FHIR_AUTO_MDM
|
Automatic MDM Expansion
This permission does not take any arguments. |
|
FHIR_BATCH
Implies:
|
FHIR Batch
This permission does not take any arguments. |
|
FHIR_CAPABILITIES
Implies:
|
FHIR Access Server Capability Statement (metadata)
This permission does not take any arguments. |
|
FHIR_DELETE_ALL_IN_COMPARTMENT
Implies:
|
FHIR Delete (All in Compartment)
Argument |
|
FHIR_DELETE_ALL_OF_TYPE
Implies:
|
FHIR Delete (All of Type)
Argument |
|
FHIR_DELETE_CASCADE_ALLOWED
Implies:
|
FHIR Delete - Cascading Allowed
This permission does not take any arguments. |
|
FHIR_DELETE_EXPUNGE
Implies:
|
FHIR Delete and Expunge ($delete-expunge) All Data
This permission does not take any arguments. |
|
FHIR_DELETE_TYPE_IN_COMPARTMENT
Implies:
|
FHIR Delete (Specific Type in Compartment)
Argument |
|
FHIR_DTR_USER
Implies:
|
DTR User privileges
This permission does not take any arguments. |
|
FHIR_EMPI_ADMIN
|
EMPI Administrative privileges
This permission does not take any arguments. |
|
FHIR_EXPUNGE_DELETED
Implies:
|
FHIR Expunge ($expunge) Deleted Resources
This permission does not take any arguments. |
|
FHIR_EXPUNGE_EVERYTHING
Implies:
|
FHIR Expunge ($expunge) All Data
This permission does not take any arguments. |
|
FHIR_EXPUNGE_PREVIOUS_VERSIONS
Implies:
|
FHIR Expunge ($expunge) Previous Versions
This permission does not take any arguments. |
|
FHIR_EXTENDED_OPERATION_ON_ANY_INSTANCE
Implies:
|
Extended Operation (Instance Level / Unchecked Response)
Argument |
|
FHIR_EXTENDED_OPERATION_ON_ANY_INSTANCE_OF_TYPE
Implies:
|
Extended Operation (Instance Level / Unchecked Response)
Argument |
|
FHIR_EXTENDED_OPERATION_ON_SERVER
Implies:
|
Extended Operation (Server Level / Unchecked Response)
Argument |
|
FHIR_EXTENDED_OPERATION_ON_TYPE
Implies:
|
Extended Operation (Type Level / Unchecked Response)
Argument |
|
FHIR_EXTENDED_OPERATION_SUPERUSER
Implies:
|
Extended Operation (Server Level / Unchecked Response)
This permission does not take any arguments. |
|
FHIR_GET_RESOURCE_COUNTS
Implies:
|
FHIR Get Server Resource Counts
This permission does not take any arguments. |
|
FHIR_GRAPHQL
Implies:
|
FHIR GraphQL Operation
This permission does not take any arguments. |
|
FHIR_LIVEBUNDLE
Implies:
|
FHIR LiveBundle Operations
This permission does not take any arguments. |
|
FHIR_MANAGE_PARTITIONS
Implies:
|
Manage Partitions
This permission does not take any arguments. |
|
FHIR_MANUAL_VALIDATION
Implies:
|
FHIR Manual Validation
This permission does not take any arguments. |
|
FHIR_MDM_ADMIN
|
MDM Administrative privileges
This permission does not take any arguments. |
|
FHIR_META_OPERATIONS_SUPERUSER
Implies:
|
Resource Metadata Operations: Superuser
This permission does not take any arguments. |
|
FHIR_MODIFY_SEARCH_PARAMETERS
|
Modify Search Parameters
This permission does not take any arguments. |
|
FHIR_OP_APPLY
Implies:
|
Apply
This permission does not take any arguments. |
|
FHIR_OP_BINARY_ACCESS_READ
Implies:
|
FHIR Binary Access Operations (read)
This permission does not take any arguments. |
|
FHIR_OP_BINARY_ACCESS_WRITE
Implies:
|
FHIR Binary Access Operations (write)
This permission does not take any arguments. |
|
FHIR_OP_CARE_GAPS
Implies:
|
CR Care Gaps
This permission does not take any arguments. |
|
FHIR_OP_COLLECTDATA
Implies:
|
CR Collect Data
This permission does not take any arguments. |
|
FHIR_OP_CQL
Implies:
|
CR CQL
This permission does not take any arguments. |
|
FHIR_OP_DATAREQUIREMENTS
Implies:
|
CR Data Requirements
This permission does not take any arguments. |
|
FHIR_OP_EMPI_CLEAR
Implies:
|
EMPI Clear Links
This permission does not take any arguments. |
|
FHIR_OP_EMPI_DUPLICATE_PERSONS
Implies:
|
EMPI Duplicate Persons
This permission does not take any arguments. |
|
FHIR_OP_EMPI_MERGE_PERSONS
Implies:
|
Merge to EMPI Person resources
This permission does not take any arguments. |
|
FHIR_OP_EMPI_QUERY_LINKS
Implies:
|
EMPI Query Links
This permission does not take any arguments. |
|
FHIR_OP_EMPI_SUBMIT
Implies:
|
EMPI Batch Processing.
This permission does not take any arguments. |
|
FHIR_OP_EMPI_UPDATE_LINK
Implies:
|
EMPI Update Link
This permission does not take any arguments. |
|
FHIR_OP_ENCOUNTER_EVERYTHING
Implies:
|
Encounter Fetch ($everything)
This permission does not take any arguments. |
|
FHIR_OP_EVALUATE
Implies:
|
CR Evaluate
This permission does not take any arguments. |
|
FHIR_OP_EVALUATE_MEASURE
Implies:
|
Evaluate Measure
This permission does not take any arguments. |
|
FHIR_OP_EVALUATE_MEASURES
Implies:
|
Evaluate Measures
This permission does not take any arguments. |
|
FHIR_OP_EXTRACT
Implies:
|
Extract
This permission does not take any arguments. |
|
FHIR_OP_INITIATE_BULK_DATA_EXPORT
Implies:
|
Initiate Bulk Export ($export) - All Permissions
Argument |
|
FHIR_OP_INITIATE_BULK_DATA_EXPORT_ALL_PATIENTS
Implies:
|
Initiate Bulk Export ($export) - Patient Export with no restrictions
Argument |
|
FHIR_OP_INITIATE_BULK_DATA_EXPORT_GROUP
Implies:
|
Initiate Bulk Export ($export) - Group Export
Argument |
|
FHIR_OP_INITIATE_BULK_DATA_EXPORT_PATIENT
Implies:
|
DEPRECATED: Initiate Bulk Export ($export) - Patient Export
Argument |
|
FHIR_OP_INITIATE_BULK_DATA_EXPORT_PATIENTS
Implies:
|
Initiate Bulk Export ($export) - Patient Export with restrictions on patient IDs and resources
Argument |
|
FHIR_OP_INITIATE_BULK_DATA_EXPORT_SYSTEM
Implies:
|
Initiate Bulk Export ($export) - System Export
Argument |
|
FHIR_OP_INITIATE_BULK_DATA_IMPORT
Implies:
|
Initiate Bulk Import ($import)
This permission does not take any arguments. |
|
FHIR_OP_MDM_CLEAR
Implies:
|
MDM Clear Links
This permission does not take any arguments. |
|
FHIR_OP_MDM_CREATE_LINK
Implies:
|
MDM Create Link
This permission does not take any arguments. |
|
FHIR_OP_MDM_DUPLICATE_GOLDEN_RESOURCES
Implies:
|
MDM Duplicate Golden Resources
This permission does not take any arguments. |
|
FHIR_OP_MDM_LINK_HISTORY
Implies:
|
MDM Link History
This permission does not take any arguments. |
|
FHIR_OP_MDM_MERGE_GOLDEN_RESOURCES
Implies:
|
Merge two MDM Golden Resources
This permission does not take any arguments. |
|
FHIR_OP_MDM_NOT_DUPLICATE
Implies:
|
MDM Not Duplicate
This permission does not take any arguments. |
|
FHIR_OP_MDM_QUERY_LINKS
Implies:
|
MDM Query Links
This permission does not take any arguments. |
|
FHIR_OP_MDM_SUBMIT
Implies:
|
MDM Batch Processing.
This permission does not take any arguments. |
|
FHIR_OP_MDM_UPDATE_LINK
Implies:
|
MDM Update Link
This permission does not take any arguments. |
|
FHIR_OP_MEMBER_MATCH
Implies:
|
Member match
This permission does not take any arguments. |
|
FHIR_OP_PACKAGE
Implies:
|
Package
This permission does not take any arguments. |
|
FHIR_OP_PATIENT_EVERYTHING
Implies:
|
Patient Search Chart ($everything)
This permission does not take any arguments. |
|
FHIR_OP_PATIENT_EVERYTHING_ACCESS_ALL
Implies:
|
Patient Fetch ($everything) - Access All
Argument |
|
FHIR_OP_PATIENT_MATCH
Implies:
|
FHIR MDM Match
This permission does not take any arguments. |
|
FHIR_OP_PATIENT_SUMMARY
Implies:
|
Generate IPS ($summary)
This permission does not take any arguments. |
|
FHIR_OP_POPULATE
Implies:
|
Populate
This permission does not take any arguments. |
|
FHIR_OP_PREPOPULATE
Implies:
|
Prepopulate
This permission does not take any arguments. |
|
FHIR_OP_STRUCTUREDEFINITION_SNAPSHOT
Implies:
|
FHIR StructureDefinition Snapshot
This permission does not take any arguments. |
|
FHIR_OP_SUBMIT_DATA
Implies:
|
CR Submit Data
This permission does not take any arguments. |
|
FHIR_PATCH
Implies:
|
FHIR Patch
This permission does not take any arguments. |
|
FHIR_PROCESS_MESSAGE
Implies:
|
FHIR Process Message ($process-message)
This permission does not take any arguments. |
|
FHIR_READ_ALL_IN_COMPARTMENT
Implies:
|
FHIR Read ANY in Compartment X
Argument |
|
FHIR_READ_ALL_OF_TYPE
Implies:
|
FHIR Read ANY of Type
Argument |
|
FHIR_READ_INSTANCE
Implies:
|
FHIR Read Specific Instance
Argument |
|
FHIR_READ_SEARCH_PARAMETERS
|
Read Search Parameters
This permission does not take any arguments. |
|
FHIR_READ_TYPE_IN_COMPARTMENT
Implies:
|
FHIR Read (Specific Type in Compartment)
Argument |
|
FHIR_TRANSACTION
Implies:
|
FHIR Transaction
This permission does not take any arguments. |
|
FHIR_TRIGGER_SUBSCRIPTION
Implies:
|
FHIR Trigger Subscription
This permission does not take any arguments. |
|
FHIR_UPDATE_REWRITE_HISTORY
Implies:
|
History Rewrite
This permission does not take any arguments. |
|
FHIR_UPLOAD_EXTERNAL_TERMINOLOGY
Implies:
|
Upload External Terminology
This permission does not take any arguments. |
|
FHIR_WRITE_ALL_IN_COMPARTMENT
Implies:
|
FHIR Write ANY in Compartment X
Argument |
|
FHIR_WRITE_ALL_OF_TYPE
Implies:
|
FHIR Write ANY of Type
Argument |
|
FHIR_WRITE_INSTANCE
Implies:
|
FHIR Write Specific Instance
Argument |
|
FHIR_WRITE_TYPE_IN_COMPARTMENT
Implies:
|
FHIR Write (Specific Type in Compartment)
Argument |
|
HFQL_EXECUTE
|
Execute HFQL Query
This permission does not take any arguments. |
|
INVOKE_CDS_HOOKS
|
CDS Hooks
This permission does not take any arguments. |
|
MANAGE_BATCH_JOBS
|
Manage Batch Jobs
This permission does not take any arguments. |
|
MDM_ADMIN
|
MDM Admin
This permission does not take any arguments. |
|
MDM_UPDATE_MATCH_RULES
|
MDM Update Match Rules
This permission does not take any arguments. |
|
MDM_VIEW_MATCH_RULES
|
MDM VIEW Match Rules
This permission does not take any arguments. |
|
MODULE_ADMIN
|
Module Admin
This permission does not take any arguments. |
|
OIDC_CLIENT_PRESET_PERMISSION
Implies:
|
Add OpenID Connect Client with pre-set permissions.
Argument |
|
OPENID_CONNECT_ADD_CLIENT
|
Add OpenID Connect Client
This permission does not take any arguments. |
|
OPENID_CONNECT_ADD_SERVER
|
Add OpenID Connect Server
This permission does not take any arguments. |
|
OPENID_CONNECT_EDIT_CLIENT
|
Edit OpenID Connect Client
This permission does not take any arguments. |
|
OPENID_CONNECT_EDIT_SERVER
|
Edit OpenID Connect Server
This permission does not take any arguments. |
|
OPENID_CONNECT_MANAGE_GLOBAL_SESSIONS
|
Manage Sessions (Global/All Users)
This permission does not take any arguments. |
|
OPENID_CONNECT_VIEW_CLIENT_LIST
|
View OpenID Connect Client List
This permission does not take any arguments. |
|
OPENID_CONNECT_VIEW_SERVER_LIST
|
View OpenID Connect Server List
This permission does not take any arguments. |
|
PACKAGE_REGISTRY_READ
|
Package Registry: Read Operations
This permission does not take any arguments. |
|
PACKAGE_REGISTRY_WRITE
|
Package Registry: Write Operations
This permission does not take any arguments. |
|
REINSTATE_MODULE
Implies:
|
Reinstate Modules
This permission does not take any arguments. |
|
SAVE_USER
Implies:
|
Save Users
This permission does not take any arguments. |
|
START_STOP_MODULE
|
Start/Stop Modules
This permission does not take any arguments. |
|
SUBMIT_ATTACHMENT
Implies:
|
Submit Attachment
This permission does not take any arguments. |
|
UPDATE_MODULE_CONFIG
Implies:
|
Update Module Configuration
This permission does not take any arguments. |
|
UPDATE_USER
|
Update Users
This permission does not take any arguments. |
|
USE_CDA_TEMPLATE
Implies:
|
Generate CDA documents via the templates
This permission does not take any arguments. |
|
VIEW_AUDIT_LOG
|
View Audit Log
This permission does not take any arguments. |
|
VIEW_BATCH_JOBS
|
View Batch Jobs
This permission does not take any arguments. |
|
VIEW_CDA_TEMPLATE
|
View CDA templates
This permission does not take any arguments. |
|
VIEW_METRICS
|
View Metrics
This permission does not take any arguments. |
|
VIEW_MODULE_CONFIG
Implies:
|
View Module Configuration
This permission does not take any arguments. |
|
VIEW_MODULE_STATUS
|
View Module Status
This permission does not take any arguments. |
|
VIEW_TRANSACTION_LOG
|
View Transaction Log
This permission does not take any arguments. |
|
VIEW_TRANSACTION_LOG_EVENT
|
View Transaction Log Entries
This permission does not take any arguments. |
|
VIEW_USERS
|
View Users
This permission does not take any arguments. |
The following table lists the negative permissions that are built into Smile CDR and may be assigned to a user. Negative permissions prevent actions from occurring, and take precedence over positive permissions. In other words, if a user has a normal permission indicating the ability to perform an action, but also has a negative permission that contradicts the given permission, the action will not be permitted.
Negative Permission | Description | |
---|---|---|
BLOCK_FHIR_READ_UNLESS_CODE_IN_VS
Implies:
|
Block FHIR Read Unless Code is in ValueSet
Argument |
|
BLOCK_FHIR_READ_UNLESS_CODE_NOT_IN_VS
Implies:
|
Block FHIR Read Unless Code is not in ValueSet
Argument |
A pair of permissions can be used to authorize access to data by checking if a coded field contains a code that is matched by a ValueSet. This functionality can be an allow-list (only allow access to resources matched by the ValueSet) or a block-list (only allow access to resources that are not matched by the ValueSet).
To specify an allow-list, the BLOCK_FHIR_READ_UNLESS_CODE_IN_VS
permission should be used. To specify a block-list, the BLOCK_FHIR_READ_UNLESS_CODE_NOT_IN_VS
permission should be used. Both of these permissions take an argument in the form: [resourceType]/[param name]/[ValueSet URL]
.
Because these permissions are negative, they must be combined with a normal permission that actually grants access to resources. In other words, if only a negative permission is present, it will not be possible to access data.
For example, to enforce that a user can only access Observations belonging to Patient/123
where the Observation.code
value is in the Vital Signs Result ValueSet, use the following permissions:
FHIR_READ_ALL_IN_COMPARTMENT/Patient/123
BLOCK_FHIR_READ_UNLESS_CODE_IN_VS/Observation/code/http://hl7.org/fhir/ValueSet/observation-vitalsignresult
To enforce that a user can only access Observations belonging to Patient/123
where the Observation.code
value is not in the Vital Signs Result ValueSet, use the following permissions:
FHIR_READ_ALL_IN_COMPARTMENT/Patient/123
BLOCK_FHIR_READ_UNLESS_CODE_NOT_IN_VS/Observation/code/http://hl7.org/fhir/ValueSet/observation-vitalsignresult
When these permissions are used, it can be helpful to also enable Automatically Narrow Search Scope on your FHIR Endpoint module. This will automatically add appropriate search parameters to searches in order to ensure that they are excluded from search results.
When the Automatically Narrow Search Scope configuration has been enabled on your FHIR Endpoint module, the calculation of search result totals will not be available to preserve the privacy of possibly-filtered records. This includes the use of the _total=accurate
and _summary=count
query string parameters.
Note that when using search narrowing with these permissions, the search will have a token:in
or token:not-in
search parameter added to the search.
These operations are currently not suitable for large ValueSets (containing over 500 codes) and may not perform well at that scale.