Context | Sensitivity - SeedCompany/cord-docs GitHub Wiki
Bible Translation work takes place in a variety of Social and Political contexts. While we would like to share as much as possible with Staff, Investors, and Users, we first need to focus on mitigating the risk to those who are doing translation work. Depending on the Sensitivity of a Project, we restrict access to specific data by role.
Levels of Sensitivity
There are 3 levels of Sensitivity: High, Medium, and Low.
Assigning Sensitivity
Sensitivity is assigned to Languages and Projects.
Languages
Administrators assign the Sensitivity to a Language.
Projects
When a Project is created the Sensitivity is defaulted to High. The Sensitivity can then be set lower.
Translation Project
Translation Projects have their Sensitivity automatically set based on the most Sensitive Language engaged.
Internship Project
Internship Projects have their Sensitivity manually set by the Project Manager.
Sensitivity Considerations
Some roles are restricted from accessing Sensitive information regardless of the Sensitivity level. Other roles are restricted based on the Sensitivity level of a Language or Project.
Whenever possible we should display the Sensitivity of an entity or its related entity.
Whenever possible we should use a non-sensitive field as the primary field (e.g. Language Display Name vs Language Ethnologue Name) and provide users with access to the Sensitive field a way to view that additional information.
Sensitive information may not be visible to a specific user. How this is handled should be carefully considered.
Sensitive Fields
Table of specifics for each field and the level of restrictions can be found: https://docs.google.com/spreadsheets/d/1GBAyYtzztRGgdIJY44XI27obITYCEDkxY_mLk9IS4jE/edit#gid=1963028748
Example: Budget
universalTemplateFile
and records
are a sensitive field(s).
Global Access to these fields for a specific role (as of now, the global ConsultantManager
role) is limited to Medium, meaning a user with that role can see universalTemplateFile
and properties of the records
(amount, fiscalYear, and organization
) in Medium and Low sensitivity contexts, but not High sensitivity contexts.
Implementation
Translation Project
- Create a Translation Project, assign a universal template file to the budget
- Register a user and assign the
ConsultantManager
role - Create a Partner and Partnership, making them a managed and funded partner/partnership, and assign a date spanning at least a year.
- Since the ConsultantManager only has access if the project's sensitivity is Medium or Low, and the Project is by default at High Sensitivity, a signed-in ConsultantManager user should only see empty rows for those funded years, as well as seeing no evidence of a Universal Template file.
- As an admin (or some user with the correct permissions) Create a language with Medium or Low sensitivity, and create a language engagement on that translation project
- When signed in as the ConsultantManager, user should be able to see the rows and data for each Budget Record, as well as the universal template file.
Intern Project Pretty much the same concept as Translation Project only you can set the sensitivity on the project manually ...
Role Assignment Checklist (relevant to devs)
The following is for programmatically setting a role and making the determination for whether a sensitivity to role mapping should be used for a component.
Global roles
- A. Are any props readable? set
canList: true
- B. Are all props unreadable? set
canList: false
- C. Are all props set to a certain sensitivity (not blank or < 'High')? set
sensitivityAccess: {sensitivity value}
Project roles
- 1. Are any props readable? set
canList: true
- 2. Are all props unreadable? set
canList: false
- 3. Are all props set to a certain sensitivity (not blank or < 'High')? set
sensitivityAccess: {sensitivity value}
getListRoleSensitivityMapping
- Is
C
true for any of the roles? callgetListRoleSensitivityMapping({COMPONENT}, 'global')
whencanList
is true - Is
3
true for any of the roles? callgetListRoleSensitivityMapping({COMPONENT}, 'project')
whencanList
is false - Is
C
and3
true for any of the roles? Call global and project for whencanList
is true, and only call for project whencanList
is false.