d2
Version:
Javascript library for DHIS2
491 lines (432 loc) • 40.2 kB
HTML
<html lang="en">
<head>
<meta charset="utf-8">
<title>current-user/CurrentUser.js - Documentation</title>
<script src="scripts/prettify/prettify.js"></script>
<script src="scripts/prettify/lang-css.js"></script>
<!--[if lt IE 9]>
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<link type="text/css" rel="stylesheet" href="styles/prettify.css">
<link type="text/css" rel="stylesheet" href="styles/jsdoc.css">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<input type="checkbox" id="nav-trigger" class="nav-trigger" />
<label for="nav-trigger" class="navicon-button x">
<div class="navicon"></div>
</label>
<label for="nav-trigger" class="overlay"></label>
<nav >
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="GeoFeatures.html">GeoFeatures</a></li><li></li><li><a href="module-analytics.Analytics.html">Analytics</a><ul class='methods'><li data-type='method'><a href="module-analytics.Analytics.html#.getAnalytics">getAnalytics</a></li></ul></li><li><a href="module-analytics.AnalyticsAggregate.html">AnalyticsAggregate</a><ul class='methods'><li data-type='method'><a href="module-analytics.AnalyticsAggregate.html#get">get</a></li><li data-type='method'><a href="module-analytics.AnalyticsAggregate.html#getDataValueSet">getDataValueSet</a></li><li data-type='method'><a href="module-analytics.AnalyticsAggregate.html#getDebugSql">getDebugSql</a></li><li data-type='method'><a href="module-analytics.AnalyticsAggregate.html#getRawData">getRawData</a></li></ul></li><li><a href="module-analytics.AnalyticsEvents.html">AnalyticsEvents</a><ul class='methods'><li data-type='method'><a href="module-analytics.AnalyticsEvents.html#get">get</a></li><li data-type='method'><a href="module-analytics.AnalyticsEvents.html#getAggregate">getAggregate</a></li><li data-type='method'><a href="module-analytics.AnalyticsEvents.html#getCluster">getCluster</a></li><li data-type='method'><a href="module-analytics.AnalyticsEvents.html#getCount">getCount</a></li><li data-type='method'><a href="module-analytics.AnalyticsEvents.html#getQuery">getQuery</a></li></ul></li><li><a href="module-analytics.AnalyticsRequest.html">AnalyticsRequest</a><ul class='methods'><li data-type='method'><a href="module-analytics.AnalyticsRequest.html#fromModel">fromModel</a></li></ul></li><li><a href="module-api.Api.html">Api</a><ul class='methods'><li data-type='method'><a href="module-api.Api.html#get">get</a></li><li data-type='method'><a href="module-api.Api.html#patch">patch</a></li><li data-type='method'><a href="module-api.Api.html#post">post</a></li><li data-type='method'><a href="module-api.Api.html#setBaseUrl">setBaseUrl</a></li><li data-type='method'><a href="module-api.Api.html#setDefaultHeaders">setDefaultHeaders</a></li><li data-type='method'><a href="module-api.Api.html#setUnauthorizedCallback">setUnauthorizedCallback</a></li><li data-type='method'><a href="module-api.Api.html#update">update</a></li></ul></li><li><a href="module-current-user.CurrentUser.html">CurrentUser</a><ul class='methods'><li data-type='method'><a href="module-current-user.CurrentUser.html#.create">create</a></li><li data-type='method'><a href="module-current-user.CurrentUser.html#canCreate">canCreate</a></li><li data-type='method'><a href="module-current-user.CurrentUser.html#canCreatePrivate">canCreatePrivate</a></li><li data-type='method'><a href="module-current-user.CurrentUser.html#canCreatePublic">canCreatePublic</a></li><li data-type='method'><a href="module-current-user.CurrentUser.html#canDelete">canDelete</a></li><li data-type='method'><a href="module-current-user.CurrentUser.html#canUpdate">canUpdate</a></li><li data-type='method'><a href="module-current-user.CurrentUser.html#getDataViewOrganisationUnits">getDataViewOrganisationUnits</a></li><li data-type='method'><a href="module-current-user.CurrentUser.html#getOrganisationUnits">getOrganisationUnits</a></li><li data-type='method'><a href="module-current-user.CurrentUser.html#getUserGroupIds">getUserGroupIds</a></li><li data-type='method'><a href="module-current-user.CurrentUser.html#getUserGroups">getUserGroups</a></li><li data-type='method'><a href="module-current-user.CurrentUser.html#getUserRoles">getUserRoles</a></li></ul></li><li><a href="module-current-user.UserAuthorities.html">UserAuthorities</a><ul class='methods'><li data-type='method'><a href="module-current-user.UserAuthorities.html#.create">create</a></li><li data-type='method'><a href="module-current-user.UserAuthorities.html#has">has</a></li></ul></li><li><a href="module-current-user.UserDataStore.html">UserDataStore</a><ul class='methods'><li data-type='method'><a href="module-current-user.UserDataStore.html#.getUserDataStore">getUserDataStore</a></li><li data-type='method'><a href="module-current-user.UserDataStore.html#create">create</a></li><li data-type='method'><a href="module-current-user.UserDataStore.html#delete">delete</a></li><li data-type='method'><a href="module-current-user.UserDataStore.html#get">get</a></li><li data-type='method'><a href="module-current-user.UserDataStore.html#getAll">getAll</a></li><li data-type='method'><a href="module-current-user.UserDataStore.html#has">has</a></li></ul></li><li><a href="module-current-user.UserDataStoreNamespace.html">UserDataStoreNamespace</a><ul class='methods'><li data-type='method'><a href="module-current-user.UserDataStoreNamespace.html#delete">delete</a></li><li data-type='method'><a href="module-current-user.UserDataStoreNamespace.html#get">get</a></li><li data-type='method'><a href="module-current-user.UserDataStoreNamespace.html#getKeys">getKeys</a></li><li data-type='method'><a href="module-current-user.UserDataStoreNamespace.html#set">set</a></li><li data-type='method'><a href="module-current-user.UserDataStoreNamespace.html#update">update</a></li></ul></li><li><a href="module-current-user.UserSettings.html">UserSettings</a><ul class='methods'><li data-type='method'><a href="module-current-user.UserSettings.html#all">all</a></li><li data-type='method'><a href="module-current-user.UserSettings.html#get">get</a></li><li data-type='method'><a href="module-current-user.UserSettings.html#set">set</a></li></ul></li><li><a href="module-datastore.DataStore.html">DataStore</a><ul class='methods'><li data-type='method'><a href="module-datastore.DataStore.html#.getDataStore">getDataStore</a></li><li data-type='method'><a href="module-datastore.DataStore.html#create">create</a></li><li data-type='method'><a href="module-datastore.DataStore.html#delete">delete</a></li><li data-type='method'><a href="module-datastore.DataStore.html#get">get</a></li><li data-type='method'><a href="module-datastore.DataStore.html#getAll">getAll</a></li><li data-type='method'><a href="module-datastore.DataStore.html#has">has</a></li></ul></li><li><a href="module-datastore.DataStoreNamespace.html">DataStoreNamespace</a><ul class='methods'><li data-type='method'><a href="module-datastore.DataStoreNamespace.html#delete">delete</a></li><li data-type='method'><a href="module-datastore.DataStoreNamespace.html#get">get</a></li><li data-type='method'><a href="module-datastore.DataStoreNamespace.html#getKeys">getKeys</a></li><li data-type='method'><a href="module-datastore.DataStoreNamespace.html#getMetaData">getMetaData</a></li><li data-type='method'><a href="module-datastore.DataStoreNamespace.html#set">set</a></li><li data-type='method'><a href="module-datastore.DataStoreNamespace.html#update">update</a></li></ul></li><li><a href="module-i18n-I18n.html">I18n</a><ul class='methods'><li data-type='method'><a href="module-i18n-I18n.html#.getI18n">getI18n</a></li><li data-type='method'><a href="module-i18n-I18n.html#addSource">addSource</a></li><li data-type='method'><a href="module-i18n-I18n.html#addStrings">addStrings</a></li><li data-type='method'><a href="module-i18n-I18n.html#getTranslation">getTranslation</a></li><li data-type='method'><a href="module-i18n-I18n.html#getUntranslatedStrings">getUntranslatedStrings</a></li><li data-type='method'><a href="module-i18n-I18n.html#isTranslated">isTranslated</a></li><li data-type='method'><a href="module-i18n-I18n.html#load">load</a></li></ul></li><li><a href="module-model.Filter.html">Filter</a><ul class='methods'><li data-type='method'><a href="module-model.Filter.html#.getFilter">getFilter</a></li><li data-type='method'><a href="module-model.Filter.html#equals">equals</a></li><li data-type='method'><a href="module-model.Filter.html#ilike">ilike</a></li><li data-type='method'><a href="module-model.Filter.html#in">in</a></li><li data-type='method'><a href="module-model.Filter.html#like">like</a></li><li data-type='method'><a href="module-model.Filter.html#notEqual">notEqual</a></li><li data-type='method'><a href="module-model.Filter.html#notIn">notIn</a></li><li data-type='method'><a href="module-model.Filter.html#nToken">nToken</a></li><li data-type='method'><a href="module-model.Filter.html#on">on</a></li><li data-type='method'><a href="module-model.Filter.html#operator">operator</a></li><li data-type='method'><a href="module-model.Filter.html#token">token</a></li></ul></li><li><a href="module-model.Filters.html">Filters</a><ul class='methods'><li data-type='method'><a href="module-model.Filters.html#.getFilters">getFilters</a></li><li data-type='method'><a href="module-model.Filters.html#getFilterList">getFilterList</a></li><li data-type='method'><a href="module-model.Filters.html#getFilters">getFilters</a></li><li data-type='method'><a href="module-model.Filters.html#getQueryFilterValues">getQueryFilterValues</a></li><li data-type='method'><a href="module-model.Filters.html#list">list</a></li><li data-type='method'><a href="module-model.Filters.html#logicMode">logicMode</a></li><li data-type='method'><a href="module-model.Filters.html#on">on</a></li></ul></li><li><a href="module-model.Model.html">Model</a><ul class='methods'><li data-type='method'><a href="module-model.Model.html#.create">create</a></li></ul></li><li><a href="module-model.ModelBase.html">ModelBase</a><ul class='methods'><li data-type='method'><a href="module-model.ModelBase.html#create">create</a></li><li data-type='method'><a href="module-model.ModelBase.html#delete">delete</a></li><li data-type='method'><a href="module-model.ModelBase.html#getCollectionChildren">getCollectionChildren</a></li><li data-type='method'><a href="module-model.ModelBase.html#getCollectionChildrenPropertyNames">getCollectionChildrenPropertyNames</a></li><li data-type='method'><a href="module-model.ModelBase.html#getDirtyChildren">getDirtyChildren</a></li><li data-type='method'><a href="module-model.ModelBase.html#getDirtyPropertyNames">getDirtyPropertyNames</a></li><li data-type='method'><a href="module-model.ModelBase.html#getEmbeddedObjectCollectionPropertyNames">getEmbeddedObjectCollectionPropertyNames</a></li><li data-type='method'><a href="module-model.ModelBase.html#getReferenceProperties">getReferenceProperties</a></li><li data-type='method'><a href="module-model.ModelBase.html#hasDirtyChildren">hasDirtyChildren</a></li><li data-type='method'><a href="module-model.ModelBase.html#isDirty">isDirty</a></li><li data-type='method'><a href="module-model.ModelBase.html#resetDirtyState">resetDirtyState</a></li><li data-type='method'><a href="module-model.ModelBase.html#save">save</a></li><li data-type='method'><a href="module-model.ModelBase.html#toJSON">toJSON</a></li><li data-type='method'><a href="module-model.ModelBase.html#validate">validate</a></li></ul></li><li><a href="module-model.ModelCollection.html">ModelCollection</a><ul class='methods'><li data-type='method'><a href="module-model.ModelCollection.html#add">add</a></li><li data-type='method'><a href="module-model.ModelCollection.html#clear">clear</a></li><li data-type='method'><a href="module-model.ModelCollection.html#toArray">toArray</a></li></ul></li><li><a href="module-model.ModelCollectionProperty.html">ModelCollectionProperty</a><ul class='methods'><li data-type='method'><a href="module-model.ModelCollectionProperty.html#.create">create</a></li><li data-type='method'><a href="module-model.ModelCollectionProperty.html#add">add</a></li><li data-type='method'><a href="module-model.ModelCollectionProperty.html#isDirty">isDirty</a></li><li data-type='method'><a href="module-model.ModelCollectionProperty.html#remove">remove</a></li><li data-type='method'><a href="module-model.ModelCollectionProperty.html#resetDirtyState">resetDirtyState</a></li><li data-type='method'><a href="module-model.ModelCollectionProperty.html#save">save</a></li><li data-type='method'><a href="module-model.ModelCollectionProperty.html#updateDirty">updateDirty</a></li></ul></li><li><a href="module-model.ModelDefinition.html">ModelDefinition</a><ul class='methods'><li data-type='method'><a href="module-model.ModelDefinition.html#.createFromSchema">createFromSchema</a></li><li data-type='method'><a href="module-model.ModelDefinition.html#create">create</a></li><li data-type='method'><a href="module-model.ModelDefinition.html#delete">delete</a></li><li data-type='method'><a href="module-model.ModelDefinition.html#get">get</a></li><li data-type='method'><a href="module-model.ModelDefinition.html#getOwnedPropertyNames">getOwnedPropertyNames</a></li><li data-type='method'><a href="module-model.ModelDefinition.html#getTranslatableProperties">getTranslatableProperties</a></li><li data-type='method'><a href="module-model.ModelDefinition.html#getTranslatablePropertiesWithKeys">getTranslatablePropertiesWithKeys</a></li><li data-type='method'><a href="module-model.ModelDefinition.html#isTranslatable">isTranslatable</a></li><li data-type='method'><a href="module-model.ModelDefinition.html#list">list</a></li><li data-type='method'><a href="module-model.ModelDefinition.html#save">save</a></li></ul></li><li><a href="module-model.ModelDefinitions.html">ModelDefinitions</a><ul class='methods'><li data-type='method'><a href="module-model.ModelDefinitions.html#add">add</a></li><li data-type='method'><a href="module-model.ModelDefinitions.html#mapThroughDefinitions">mapThroughDefinitions</a></li></ul></li><li><a href="module-model.ModelValidation.html">ModelValidation</a><ul class='methods'><li data-type='method'><a href="module-model.ModelValidation.html#.getModelValidation">getModelValidation</a></li><li data-type='method'><a href="module-model.ModelValidation.html#validate">validate</a></li><li data-type='method'><a href="module-model.ModelValidation.html#validateAgainstSchema">validateAgainstSchema</a></li></ul></li><li><a href="module-model.Pager.html">Pager</a><ul class='methods'><li data-type='method'><a href="module-model.Pager.html#getNextPage">getNextPage</a></li><li data-type='method'><a href="module-model.Pager.html#getPreviousPage">getPreviousPage</a></li><li data-type='method'><a href="module-model.Pager.html#goToPage">goToPage</a></li><li data-type='method'><a href="module-model.Pager.html#hasNextPage">hasNextPage</a></li><li data-type='method'><a href="module-model.Pager.html#hasPreviousPage">hasPreviousPage</a></li></ul></li><li><a href="module-system.System.html">System</a><ul class='methods'><li data-type='method'><a href="module-system.System.html#.compareVersions">compareVersions</a></li><li data-type='method'><a href="module-system.System.html#.getSystem">getSystem</a></li><li data-type='method'><a href="module-system.System.html#.isVersionCompatible">isVersionCompatible</a></li><li data-type='method'><a href="module-system.System.html#.parseVersionString">parseVersionString</a></li><li data-type='method'><a href="module-system.System.html#installAppVersion">installAppVersion</a></li><li data-type='method'><a href="module-system.System.html#loadAppStore">loadAppStore</a></li><li data-type='method'><a href="module-system.System.html#loadInstalledApps">loadInstalledApps</a></li><li data-type='method'><a href="module-system.System.html#reloadApps">reloadApps</a></li><li data-type='method'><a href="module-system.System.html#setInstalledApps">setInstalledApps</a></li><li data-type='method'><a href="module-system.System.html#setSystemInfo">setSystemInfo</a></li><li data-type='method'><a href="module-system.System.html#uninstallApp">uninstallApp</a></li><li data-type='method'><a href="module-system.System.html#uploadApp">uploadApp</a></li></ul></li><li><a href="module-system.SystemConfiguration.html">SystemConfiguration</a><ul class='methods'><li data-type='method'><a href="module-system.SystemConfiguration.html#all">all</a></li><li data-type='method'><a href="module-system.SystemConfiguration.html#get">get</a></li></ul></li><li><a href="module-system.SystemSettings.html">SystemSettings</a><ul class='methods'><li data-type='method'><a href="module-system.SystemSettings.html#all">all</a></li><li data-type='method'><a href="module-system.SystemSettings.html#get">get</a></li></ul></li></ul><h3>Modules</h3><ul><li><a href="module-analytics.html">analytics</a></li><li><a href="module-api.html">api</a></li><li><a href="module-current-user.html">current-user</a></li><li><a href="module-d2.html">d2</a><ul class='members'><li data-type='member'><a href="module-d2.html#.config">config</a></li></ul><ul class='methods'><li data-type='method'><a href="module-d2.html#.getInstance">getInstance</a></li><li data-type='method'><a href="module-d2.html#.getManifest">getManifest</a></li><li data-type='method'><a href="module-d2.html#.init">init</a></li><li data-type='method'><a href="module-d2.html#~getUserSettings">getUserSettings</a></li></ul></li><li><a href="module-datastore.html">datastore</a></li><li><a href="module-i18n.html">i18n</a></li><li><a href="module-lib_check.html">lib/check</a><ul class='methods'><li data-type='method'><a href="module-lib_check.html#.checkDefined">checkDefined</a></li><li data-type='method'><a href="module-lib_check.html#.isValidUid">isValidUid</a></li></ul></li><li><a href="module-lib_utils.html">lib/utils</a><ul class='methods'><li data-type='method'><a href="module-lib_utils.html#.customEncodeURIComponent">customEncodeURIComponent</a></li><li data-type='method'><a href="module-lib_utils.html#.pick">pick</a></li></ul></li><li><a href="module-model.html">model</a></li><li><a href="module-period_generators.html">period/generators</a><ul class='methods'><li data-type='method'><a href="module-period_generators.html#.createPeriodGeneratorsForLocale">createPeriodGeneratorsForLocale</a></li></ul></li><li><a href="module-system.html">system</a></li><li><a href="module-uid.html">uid</a><ul class='methods'><li data-type='method'><a href="module-uid.html#.generateUid">generateUid</a></li><li data-type='method'><a href="module-uid.html#.isValidUid">isValidUid</a></li></ul></li></ul><h3>Namespaces</h3><ul><li><a href="module-d2.init-d2.html">d2</a></li></ul><h3>Tutorials</h3><ul><li><a href="tutorial-FAQ.html">FAQ</a></li><li><a href="tutorial-overview.html">overview</a></li></ul><h3>Global</h3><ul><li><a href="global.html#addDataDimension">addDataDimension</a></li><li><a href="global.html#addDataFilter">addDataFilter</a></li><li><a href="global.html#addDimension">addDimension</a></li><li><a href="global.html#addFilter">addFilter</a></li><li><a href="global.html#addOrgUnitDimension">addOrgUnitDimension</a></li><li><a href="global.html#addOrgUnitFilter">addOrgUnitFilter</a></li><li><a href="global.html#addPeriodDimension">addPeriodDimension</a></li><li><a href="global.html#addPeriodFilter">addPeriodFilter</a></li><li><a href="global.html#byOrgUnit">byOrgUnit</a></li><li><a href="global.html#computeWeekBasedPeriod">computeWeekBasedPeriod</a></li><li><a href="global.html#getAll">getAll</a></li><li><a href="global.html">getGeoFeatures</a></li><li><a href="global.html">isValidDisplayName</a></li><li><a href="global.html">isValidOrgUnit</a></li><li><a href="global.html">isValidOrgUnitGroup</a></li><li><a href="global.html">isValidOrgUnitLevel</a></li><li><a href="global.html">isValidUserOrgUnit</a></li><li><a href="global.html#withAggregateData">withAggregateData</a></li><li><a href="global.html#withAggregationType">withAggregationType</a></li><li><a href="global.html#withApprovalLevel">withApprovalLevel</a></li><li><a href="global.html#withAsc">withAsc</a></li><li><a href="global.html#withBbox">withBbox</a></li><li><a href="global.html#withClusterSize">withClusterSize</a></li><li><a href="global.html#withCollapseDataDimensions">withCollapseDataDimensions</a></li><li><a href="global.html#withColumns">withColumns</a></li><li><a href="global.html#withCoordinateField">withCoordinateField</a></li><li><a href="global.html#withCoordinatesOnly">withCoordinatesOnly</a></li><li><a href="global.html#withDesc">withDesc</a></li><li><a href="global.html#withDisplayProperty">withDisplayProperty</a></li><li><a href="global.html#withEndDate">withEndDate</a></li><li><a href="global.html#withEventStatus">withEventStatus</a></li><li><a href="global.html#withFormat">withFormat</a></li><li><a href="global.html#withHideEmptyColumns">withHideEmptyColumns</a></li><li><a href="global.html#withHideEmptyRows">withHideEmptyRows</a></li><li><a href="global.html#withHierarchyMeta">withHierarchyMeta</a></li><li><a href="global.html#withIgnoreLimit">withIgnoreLimit</a></li><li><a href="global.html#withIncludeClusterPoints">withIncludeClusterPoints</a></li><li><a href="global.html#withIncludeMetadataDetails">withIncludeMetadataDetails</a></li><li><a href="global.html#withIncludeNumDen">withIncludeNumDen</a></li><li><a href="global.html#withInputIdScheme">withInputIdScheme</a></li><li><a href="global.html#withLimit">withLimit</a></li><li><a href="global.html#withMeasureCriteria">withMeasureCriteria</a></li><li><a href="global.html#withOuMode">withOuMode</a></li><li><a href="global.html#withOutputIdScheme">withOutputIdScheme</a></li><li><a href="global.html#withOutputType">withOutputType</a></li><li><a href="global.html#withPage">withPage</a></li><li><a href="global.html#withPageSize">withPageSize</a></li><li><a href="global.html#withParameters">withParameters</a></li><li><a href="global.html#withPath">withPath</a></li><li><a href="global.html#withPreAggregationMeasureCriteria">withPreAggregationMeasureCriteria</a></li><li><a href="global.html#withProgram">withProgram</a></li><li><a href="global.html#withProgramStatus">withProgramStatus</a></li><li><a href="global.html#withRelativePeriodDate">withRelativePeriodDate</a></li><li><a href="global.html#withRows">withRows</a></li><li><a href="global.html#withShowHierarchy">withShowHierarchy</a></li><li><a href="global.html#withSkipData">withSkipData</a></li><li><a href="global.html#withSkipMeta">withSkipMeta</a></li><li><a href="global.html#withSkipRounding">withSkipRounding</a></li><li><a href="global.html#withSortOrder">withSortOrder</a></li><li><a href="global.html#withStage">withStage</a></li><li><a href="global.html#withStartDate">withStartDate</a></li><li><a href="global.html#withTableLayout">withTableLayout</a></li><li><a href="global.html#withUserOrgUnit">withUserOrgUnit</a></li><li><a href="global.html#withValue">withValue</a></li></ul>
</nav>
<div id="main">
<h1 class="page-title">current-user/CurrentUser.js</h1>
<section>
<article>
<pre class="prettyprint source linenums"><code>/**
* @module current-user
*/
import UserAuthorities from './UserAuthorities'
import UserSettings from './UserSettings'
import { noCreateAllowedFor } from '../defaultConfig'
import UserDataStore from '../datastore/UserDataStore'
const models = Symbol('models')
const propertiesToIgnore = new Set([
'userCredentials',
'userGroups',
'userRoles',
'organisationUnits',
'dataViewOrganisationUnits',
])
/**
* Authorities lookup map to be used for determining the list of authorities to check.
*
* @private
* @type {Object.<string, string[]>}
* @readonly
* @typedef {Object} AuthorityType
* @memberof module:current-user
*/
const authTypes = {
READ: ['READ'],
CREATE: ['CREATE', 'CREATE_PUBLIC', 'CREATE_PRIVATE'],
CREATE_PUBLIC: ['CREATE_PUBLIC'],
CREATE_PRIVATE: ['CREATE_PRIVATE'],
DELETE: ['DELETE'],
UPDATE: ['UPDATE'],
EXTERNALIZE: ['EXTERNALIZE'],
}
/**
* Create a map of `propertyName` -> `Symbol`. This map is used to hide values for these properties. We will instead add
* add convenience methods for these properties. (e.g. the `userGroups` property on the currentUser object becomes
* `getUserGroups()`
*
* @private
* @type {Object.<string, Symbol>}
*/
const propertySymbols = Array.from(propertiesToIgnore).reduce(
(result, property) => {
result[property] = Symbol(property)
return result
},
{}
)
/**
* Creates a map of propertyName and propertyValue pairs of properties to be attached to the currentUser object.
* These are all the regular properties that are returned when calling `api/27/me` but with the `userCredentials`
* merged onto the same object.
*
* What would originally be `currentUser.userCredentials.username` would just be `currentUser.username`
*
* @private
* @param {Object} currentUserObject The user payload as it is received from the api. https://play.dhis2.org/demo/api/27/me
* @returns {Object} A map with propertyName/propertyValue pairs.
*/
function getPropertiesForCurrentUserObject(currentUserObject) {
let properties
// The userCredentials object on the userObject is confusing so we set the properties straight onto the currentUser
// object itself
if (currentUserObject.userCredentials) {
properties = Object.assign(
{},
currentUserObject.userCredentials,
currentUserObject
)
} else {
properties = Object.assign({}, currentUserObject)
}
return Object.keys(properties).reduce((result, property) => {
if (propertiesToIgnore.has(property)) {
if (properties[property].map) {
result[propertySymbols[property]] = properties[property].map(
value => value.id
)
}
} else {
result[property] = properties[property]
}
return result
}, {})
}
/**
* Checks the noCreateAllowedFor list if the object can be created.
*
* @private
* @param {ModelDefinition} modelDefinition The modelDefinition to check for.
* @returns {boolean} True when it exists in the list, false otherwise.
*/
function isInNoCreateAllowedForList(modelDefinition) {
return Boolean(
modelDefinition && noCreateAllowedFor.has(modelDefinition.name)
)
}
/**
* Represents the current logged in user
*
* @memberof module:current-user
*/
class CurrentUser {
/**
* Creates the CurrentUser.
*
* @param {Object} userData Payload as returned from the api when requesting the currentUser object.
* @param {UserAuthorities} userAuthorities The UserAuthorities object for the currentUsers authorities.
* @param {ModelDefinition[]} modelDefinitions The modelDefinitions that need to be used for checking access.
* @param {UserSettings} settings The userSettings object to be set onto the current user object.
*/
constructor(userData, userAuthorities, modelDefinitions, settings) {
Object.assign(this, getPropertiesForCurrentUserObject(userData))
/**
*
* @type {UserAuthorities}
*/
this.authorities = userAuthorities
this[models] = modelDefinitions
/**
* Contains a reference to a `UserSettings` instance that can be used
* to retrieve and save system settings.
* @type {UserSettings}
* @description
* ```js
* d2.currentUser.userSettings.get('keyUiLocale')
* .then(userSettingsValue => {
* console.log('UI Locale: ' + userSettingsValue);
* });
* ```
*/
this.userSettings = settings
/**
* Contains a reference to {@link module:current-user.UserDataStore UserDataStore}
* @type UserDataStore
*
*/
this.dataStore = UserDataStore.getUserDataStore()
}
/**
* Get a list of group ids the current user belongs to.
*
* @returns {Array} The list of ids of all the user's groups.
*/
getUserGroupIds() {
return this[propertySymbols.userGroups]
}
/**
* Get a ModelCollection of userGroup models that are assigned to the currentUser
*
* The user groups are lazy loaded on init of the library. This method can be used to load the full representation
* of the userGroups.
*
* The request done is equivalent do doing https://play.dhis2.org/demo/api/27/me.json?fields=userGroups[:all]
*
* @param {Object} [listOptions={}] Additional query parameters that should be send with the request.
* @returns {Promise<ModelCollection>} The model collection that contains the user's groups.
*/
getUserGroups(listOptions = {}) {
const userGroupIds = this[propertySymbols.userGroups]
return this[models].userGroup.list(
Object.assign({ paging: false }, listOptions, {
filter: [`id:in:[${userGroupIds.join(',')}]`],
})
)
}
/**
* Get a ModelCollection of userRole models that are assigned to the currentUser
*
* The user roles are lazy loaded on init of the library. This method can be used to load the full representation
* of the userGroups.
*
* The request done is equivalent do doing https://play.dhis2.org/demo/api/27/me.json?fields=userCredentials[userRoles[:all]]
*
* @returns {Promise<ModelCollection>} A ModelCollection that contains the user's groups.
*/
getUserRoles() {
const userRoleIds = this[propertySymbols.userRoles]
return this[models].userRole.list({
filter: [`id:in:[${userRoleIds.join(',')}]`],
paging: false,
})
}
/**
* Requests a users primary organisation units from the api.
*
* The users organisation units are lazy loaded on init of the library (just the ids). This method can be used to
* load the full representation of the organisationUnits.
*
* @param {Object} [listOptions={}] Additional query parameters that should be send with the request.
* @returns {Promise<ModelCollection>} A ModelCollection that contains the user's organisationUnits.
*/
getOrganisationUnits(listOptions = {}) {
const organisationUnitsIds = this[propertySymbols.organisationUnits]
return this[models].organisationUnit.list(
Object.assign(
{
fields:
':all,displayName,path,children[id,displayName,path,children::isNotEmpty]',
paging: false,
},
listOptions,
{ filter: [`id:in:[${organisationUnitsIds.join(',')}]`] }
)
)
}
/**
* Requests a users data view organisation units from the api.
*
* The users data view organisation units are lazy loaded on init of the library (just the ids). This method can
* be used to load the full representation of the dataViewOrganisationUnits.
*
* @param {Object} [listOptions={}] Additional query parameters that should be send with the request.
* @returns {Promise<ModelCollection>} A ModelCollection that contains the user's dataViewOrganisationUnits.
*/
getDataViewOrganisationUnits(listOptions) {
const organisationUnitsIds = this[
propertySymbols.dataViewOrganisationUnits
]
return this[models].organisationUnit.list(
Object.assign(
{
fields:
':all,displayName,path,children[id,displayName,path,children::isNotEmpty]',
paging: false,
},
listOptions,
{ filter: [`id:in:[${organisationUnitsIds.join(',')}]`] }
)
)
}
/**
* Helper function to check if the currentUser can perform an action.
*
* A schema from the api defines the authorities as follows:
* "authorities": [
* {
* "type": "CREATE_PUBLIC",
* "authorities": [
* "F_DATAELEMENT_PUBLIC_ADD"
* ]
* }, {
* "type": "CREATE_PRIVATE",
* "authorities": [
* "F_DATAELEMENT_PRIVATE_ADD"
* ]
* }, {
* "type": "DELETE",
* "authorities": [
* "F_DATAELEMENT_DELETE"
* ]
* }
*
* ],
*
* So for example, when asking for `currentUser.canCreate(modelDefinition)` we look at the authorities map for CREATE, we
* collect the authorities from the schema based on the values of `CREATE`. So in the case of above schema authorities
* we take the authorities for 'CREATE_PUBLIC' and 'CREATE_PRIVATE' and check if the user has at least one of the
* authorities in the combined list. If we had asked for `currentUser.canCreatePrivate(modelDefinition)` we would only
* need to check if the user has `F_DATAELEMENT_PRIVATE_ADD` However for just create the user could still create when he
* has either private or public.
*
* @private
* @param {AuthorityType} authorityType The type of authority to check for.
* @param {ModelDefinition} modelDefinition The ModelDefinition for the type of object that the authority should
* be checked for.
* @returns {boolean} True when the user has the authority to perform the action, otherwise false.
*/
checkAuthorityForType(authorityType, modelDefinition) {
if (!modelDefinition || !Array.isArray(modelDefinition.authorities)) {
return false
}
return (
modelDefinition.authorities
// Filter the correct authority to check for from the model
.filter(authority =>
authorityType.some(
authToHave => authToHave === authority.type
)
)
// Check the left over schema authority types
.some(
schemaAuthority =>
schemaAuthority.authorities.some(authorityToCheckFor =>
this.authorities.has(authorityToCheckFor)
) // Check if one of the schema authorities are available in the users authorities
)
)
}
/**
* Helper method to first check the special "not allowed to create list" before checking the users authorities.
*
* @private
* @param {AuthorityType} authType The type of authority that should be checked. (CREATE, CREATE_PRIVATE
* or CREATE_PUBLIC)
* @param {ModelDefinition} modelDefinition The modelDefinition that the authorities should be checked for.
* @returns {boolean} True when the user has the permission to create the object
*/
checkCreateAuthorityForType(authType, modelDefinition) {
// When the modelDefinition is mentioned in the the list of modelTypes that are not
// allowed to be created we return false
if (isInNoCreateAllowedForList(modelDefinition)) {
return false
}
// Otherwise we check using the normal procedure for checking authorities
return this.checkAuthorityForType(authType, modelDefinition)
}
/**
* Check if the user has the authority to create objects of a type of Model (based on it's modelDefinition)
* If the object supports public and private objects then both are checked, and the method will return true if one
* of them is true. (e.g. will also return true if the user can only create private objects)
*
* @param {ModelDefinition} modelDefinition The modelDefinition that the authorities should be checked for.
* @returns {boolean} True when the user has the permission to create the object
*/
canCreate(modelDefinition) {
return this.checkCreateAuthorityForType(
authTypes.CREATE,
modelDefinition
)
}
/**
* Check if the user has the authority to create public objects of a type of Model (based on it's modelDefinition)
*
* @param {ModelDefinition} modelDefinition The modelDefinition that the authorities should be checked for.
* @returns {boolean} True when the user has the permission to create the object
*/
canCreatePublic(modelDefinition) {
return this.checkCreateAuthorityForType(
authTypes.CREATE_PUBLIC,
modelDefinition
)
}
/**
* Check if the user has the authority to create private objects of a type of Model (based on it's modelDefinition)
*
* @param {ModelDefinition} modelDefinition The modelDefinition that the authorities should be checked for.
* @returns {boolean} True when the user has the permission to create the object
*/
canCreatePrivate(modelDefinition) {
return this.checkCreateAuthorityForType(
authTypes.CREATE_PRIVATE,
modelDefinition
)
}
/**
* Check if the user has the authority to delete objects of a type of Model (based on it's modelDefinition)
*
* @param {ModelDefinition} modelDefinition The modelDefinition that the authorities should be checked for.
* @returns {boolean} True when the user has the permission to delete the object
*
* @deprecated Delete should be checked through the `Model.access.delete` property instead, as that also takes into
* account sharing. Just checking if the user has the authority to delete a specific object does not take into account
* the full ACL.
*/
canDelete(modelDefinition) {
return this.checkAuthorityForType(authTypes.DELETE, modelDefinition)
}
/**
* Check if the user has the authority to update objects of a type of Model (based on it's modelDefinition)
*
* @param {ModelDefinition} modelDefinition The modelDefinition that the authorities should be checked for.
* @returns {boolean} True when the user has the permission to update the object
*
* @deprecated Update should be checked through the `Model.access.update` property instead, as that also takes into
* account sharing. Just checking if the user has the authority to update a specific object does not take into account
* the full ACL.
*/
canUpdate(modelDefinition) {
if (this.checkAuthorityForType(authTypes.UPDATE, modelDefinition)) {
return true
}
return this.checkAuthorityForType(authTypes.CREATE, modelDefinition)
}
/**
* Factory method for creating a CurrentUser instance
*
* @param {Object} userData Payload as returned from the api when requesting the currentUser object.
* @param {string[]} authorities A list of authorities that the currentUser has.
* @param {ModelDefinition[]} modelDefinitions The modelDefinitions that need to be used for checking access.
* @param {Object} userSettings Payload as returned from the api when request the userSettings
* @returns {CurrentUser} The created CurrentUser object based on the data given.
*/
static create(userData, authorities, modelDefinitions, userSettings) {
return new CurrentUser(
userData,
UserAuthorities.create(authorities),
modelDefinitions,
new UserSettings(userSettings)
)
}
}
export default CurrentUser
</code></pre>
</article>
</section>
</div>
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.6.6</a> on Thu Nov 18 2021 08:51:53 GMT+0000 (Coordinated Universal Time) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
</footer>
<script>prettyPrint();</script>
<script src="scripts/linenumber.js"></script>
</body>
</html>