Skip to content

Commit

Permalink
Change field permissions to use Perm definitions rather than explicit…
Browse files Browse the repository at this point in the history
… strings.
  • Loading branch information
Misterblue committed Jan 16, 2021
1 parent c522861 commit d3568df
Show file tree
Hide file tree
Showing 4 changed files with 100 additions and 162 deletions.
144 changes: 57 additions & 87 deletions src/Entities/AccountFields.ts
Expand Up @@ -24,6 +24,7 @@ import { isStringValidator, isBooleanValidator, isPathValidator, isNumberValidat
import { isObjectValidator, isSArraySet, isDateValidator } from '@Route-Tools/Validators';
import { simpleGetter, simpleSetter, sArraySetter, dateStringGetter } from '@Route-Tools/Validators';
import { noGetter, noSetter, verifyAllSArraySetValues } from '@Route-Tools/Validators';
import { Perm } from '@Route-Tools/Perm';
import { FieldDefn, ValidateResponse } from '@Route-Tools/EntityFieldDefn';

import { VKeyedCollection } from '@Tools/vTypes';
Expand All @@ -47,54 +48,23 @@ export function CheckAccountFields(): void {
// END DEBUG DEBUG
};

/*
// Get the value of a domain field with the fieldname.
// Checks to make sure the getter has permission to get the values.
// Returns the value. Could be 'undefined' whether the requestor doesn't have permissions or that's
// the actual field value.
export async function getAccountField(pAuthToken: AuthToken, pAccount: AccountEntity,
pField: string, pRequestingAccount?: AccountEntity): Promise<any> {
return getEntityField(accountFields, pAuthToken, pAccount, pField, pRequestingAccount);
};
// Set a domain field with the fieldname and a value.
// Checks to make sure the setter has permission to set.
// Returns 'true' if the value was set and 'false' if the value could not be set.
export async function setAccountField(pAuthToken: AuthToken, // authorization for making this change
pAccount: AccountEntity, // the account being changed
pField: string, pVal: any, // field being changed and the new value
pRequestingAccount?: AccountEntity, // Account associated with pAuthToken, if known
pUpdates?: VKeyedCollection // where to record updates made (optional)
): Promise<ValidateResponse> {
return setEntityField(accountFields, pAuthToken, pAccount, pField, pVal, pRequestingAccount, pUpdates);
};
// Generate an 'update' block for the specified field or fields.
// This is a field/value collection that can be passed to the database routines.
// Note that this directly fetches the field value rather than using 'getter' since
// we want the actual value (whatever it is) to go into the database.
// If an existing VKeyedCollection is passed, it is added to an returned.
export function getAccountUpdateForField(pAccount: AccountEntity,
pField: string | string[], pExisting?: VKeyedCollection): VKeyedCollection {
return getEntityUpdateForField(accountFields, pAccount, pField, pExisting);
};
*/

// Naming and access for the fields in a AccountEntity.
// Indexed by request_field_name.
export const accountFields: { [key: string]: FieldDefn } = {
'id': {
entity_field: 'id',
request_field_name: 'id',
get_permissions: [ 'all' ],
set_permissions: [ 'none' ],
get_permissions: [ Perm.ALL ],
set_permissions: [ Perm.NONE ],
validate: isStringValidator,
setter: simpleSetter,
getter: simpleGetter
},
'username': {
entity_field: 'username',
request_field_name: 'username',
get_permissions: [ 'all' ],
set_permissions: [ 'owner', 'admin' ],
get_permissions: [ Perm.ALL ],
set_permissions: [ Perm.OWNER, Perm.ADMIN ],
validate: async (pField: FieldDefn, pEntity: Entity, pVal: any): Promise<ValidateResponse> => {
let validity: ValidateResponse;
if (typeof(pVal) === 'string') {
Expand Down Expand Up @@ -123,8 +93,8 @@ export const accountFields: { [key: string]: FieldDefn } = {
'email': {
entity_field: 'email',
request_field_name: 'email',
get_permissions: [ 'all' ],
set_permissions: [ 'owner', 'admin' ],
get_permissions: [ Perm.ALL ],
set_permissions: [ Perm.OWNER, Perm.ADMIN ],
validate: async (pField: FieldDefn, pEntity: Entity, pVal: any): Promise<ValidateResponse> => {
let validity: ValidateResponse;
if (typeof(pVal) === 'string') {
Expand Down Expand Up @@ -160,107 +130,107 @@ export const accountFields: { [key: string]: FieldDefn } = {
'account_settings': {
entity_field: 'accountSettings',
request_field_name: 'account_settings',
get_permissions: [ 'all' ],
set_permissions: [ 'owner', 'admin' ],
get_permissions: [ Perm.ALL ],
set_permissions: [ Perm.OWNER, Perm.ADMIN ],
validate: isStringValidator,
setter: simpleSetter,
getter: simpleGetter
},
'images_hero': {
entity_field: 'imagesHero',
request_field_name: 'images_hero',
get_permissions: [ 'all' ],
set_permissions: [ 'owner', 'admin' ],
get_permissions: [ Perm.ALL ],
set_permissions: [ Perm.OWNER, Perm.ADMIN ],
validate: isStringValidator,
setter: simpleSetter,
getter: simpleGetter
},
'images_tiny': {
entity_field: 'imagesTiny',
request_field_name: 'images_tiny',
get_permissions: [ 'all' ],
set_permissions: [ 'owner', 'admin' ],
get_permissions: [ Perm.ALL ],
set_permissions: [ Perm.OWNER, Perm.ADMIN ],
validate: isStringValidator,
setter: simpleSetter,
getter: simpleGetter
},
'images_thumbnail': {
entity_field: 'imagesThumbnail',
request_field_name: 'images_thumbnail',
get_permissions: [ 'all' ],
set_permissions: [ 'owner', 'admin' ],
get_permissions: [ Perm.ALL ],
set_permissions: [ Perm.OWNER, Perm.ADMIN ],
validate: isStringValidator,
setter: simpleSetter,
getter: simpleGetter
},
'connected': {
entity_field: 'locationConnected',
request_field_name: 'connected',
get_permissions: [ 'all' ],
set_permissions: [ 'owner', 'admin' ],
get_permissions: [ Perm.ALL ],
set_permissions: [ Perm.OWNER, Perm.ADMIN ],
validate: isBooleanValidator,
setter: simpleSetter,
getter: simpleGetter
},
'path': {
entity_field: 'locationPath',
request_field_name: 'path',
get_permissions: [ 'all' ],
set_permissions: [ 'owner', 'admin' ],
get_permissions: [ Perm.ALL ],
set_permissions: [ Perm.OWNER, Perm.ADMIN ],
validate: isPathValidator,
setter: simpleSetter,
getter: simpleGetter
},
'place_id': {
entity_field: 'locationPlaceId',
request_field_name: 'place_id',
get_permissions: [ 'all' ],
set_permissions: [ 'owner', 'admin' ],
get_permissions: [ Perm.ALL ],
set_permissions: [ Perm.OWNER, Perm.ADMIN ],
validate: isStringValidator,
setter: simpleSetter,
getter: simpleGetter
},
'domain_id': {
entity_field: 'locationDomainId',
request_field_name: 'domain_id',
get_permissions: [ 'all' ],
set_permissions: [ 'owner', 'admin' ],
get_permissions: [ Perm.ALL ],
set_permissions: [ Perm.OWNER, Perm.ADMIN ],
validate: isStringValidator,
setter: simpleSetter,
getter: simpleGetter
},
'network_address': {
entity_field: 'locationNetworkAddress',
request_field_name: 'network_address',
get_permissions: [ 'all' ],
set_permissions: [ 'owner', 'admin' ],
get_permissions: [ Perm.ALL ],
set_permissions: [ Perm.OWNER, Perm.ADMIN ],
validate: isStringValidator,
setter: simpleSetter,
getter: simpleGetter
},
'network_port': {
entity_field: 'locationNetworkPort',
request_field_name: 'network_port',
get_permissions: [ 'all' ],
set_permissions: [ 'owner', 'admin' ],
get_permissions: [ Perm.ALL ],
set_permissions: [ Perm.OWNER, Perm.ADMIN ],
validate: isNumberValidator,
setter: simpleSetter,
getter: simpleGetter
},
'node_id': {
entity_field: 'locationNodeId',
request_field_name: 'node_id',
get_permissions: [ 'all' ],
set_permissions: [ 'owner', 'admin' ],
get_permissions: [ Perm.ALL ],
set_permissions: [ Perm.OWNER, Perm.ADMIN ],
validate: isStringValidator,
setter: simpleSetter,
getter: simpleGetter
},
'availability': {
entity_field: 'availability',
request_field_name: 'availability',
get_permissions: [ 'all' ],
set_permissions: [ 'owner', 'admin' ],
get_permissions: [ Perm.ALL ],
set_permissions: [ Perm.OWNER, Perm.ADMIN ],
validate: async (pField: FieldDefn, pEntity: Entity, pVal: any): Promise<ValidateResponse> => {
if (await verifyAllSArraySetValues(pVal, Availability.KnownAvailability)) {
return { valid: true };
Expand All @@ -273,35 +243,35 @@ export const accountFields: { [key: string]: FieldDefn } = {
'connections': {
entity_field: 'connections',
request_field_name: 'connections',
get_permissions: [ 'owner', 'admin', 'friend', 'connection' ],
set_permissions: [ 'owner', 'admin' ],
get_permissions: [ Perm.OWNER, Perm.ADMIN, 'friend', 'connection' ],
set_permissions: [ Perm.OWNER, Perm.ADMIN ],
validate: isSArraySet,
setter: sArraySetter,
getter: simpleGetter
},
'friends': {
entity_field: 'friends',
request_field_name: 'friends',
get_permissions: [ 'owner', 'admin', 'friend' ],
set_permissions: [ 'owner', 'admin' ],
get_permissions: [ Perm.OWNER, Perm.ADMIN, 'friend' ],
set_permissions: [ Perm.OWNER, Perm.ADMIN ],
validate: isSArraySet,
setter: sArraySetter,
getter: simpleGetter
},
'locker': {
entity_field: 'locker',
request_field_name: 'locker',
get_permissions: [ 'owner', 'admin' ],
set_permissions: [ 'owner', 'admin' ],
get_permissions: [ Perm.OWNER, Perm.ADMIN ],
set_permissions: [ Perm.OWNER, Perm.ADMIN ],
validate: isObjectValidator,
setter: simpleSetter,
getter: simpleGetter
},
'profile_detail': {
entity_field: 'profileDetail',
request_field_name: 'profile_detail',
get_permissions: [ 'all' ],
set_permissions: [ 'owner', 'admin' ],
get_permissions: [ Perm.ALL ],
set_permissions: [ Perm.OWNER, Perm.ADMIN ],
validate: isObjectValidator,
setter: simpleSetter,
getter: simpleGetter
Expand All @@ -311,8 +281,8 @@ export const accountFields: { [key: string]: FieldDefn } = {
'password': {
entity_field: 'password',
request_field_name: 'password',
get_permissions: [ 'none' ],
set_permissions: [ 'owner', 'admin' ],
get_permissions: [ Perm.NONE ],
set_permissions: [ Perm.OWNER, Perm.ADMIN ],
validate: isStringValidator,
setter: (pField: FieldDefn, pEntity: Entity, pVal: any): void => {
Accounts.storePassword((pEntity as AccountEntity), pVal);
Expand All @@ -327,8 +297,8 @@ export const accountFields: { [key: string]: FieldDefn } = {
'public_key': {
entity_field: 'sessionPublicKey',
request_field_name: 'public_key',
get_permissions: [ 'all' ],
set_permissions: [ 'owner', 'admin' ],
get_permissions: [ Perm.ALL ],
set_permissions: [ Perm.OWNER, Perm.ADMIN ],
validate: isStringValidator,
setter: simpleSetter,
getter: simpleGetter
Expand All @@ -338,26 +308,26 @@ export const accountFields: { [key: string]: FieldDefn } = {
'xmpp_password': {
entity_field: 'xmppPassword',
request_field_name: 'xmpp_password',
get_permissions: [ 'owner' ],
set_permissions: [ 'owner', 'admin' ],
get_permissions: [ Perm.OWNER ],
set_permissions: [ Perm.OWNER, Perm.ADMIN ],
validate: isStringValidator,
setter: simpleSetter,
getter: simpleGetter
},
'discourse_api_key': {
entity_field: 'discourseApiKey',
request_field_name: 'discourse_api_key',
get_permissions: [ 'owner' ],
set_permissions: [ 'owner', 'admin' ],
get_permissions: [ Perm.OWNER ],
set_permissions: [ Perm.OWNER, Perm.ADMIN ],
validate: isStringValidator,
setter: simpleSetter,
getter: simpleGetter
},
'wallet_id': {
entity_field: 'walletId',
request_field_name: 'wallet_id',
get_permissions: [ 'owner' ],
set_permissions: [ 'owner', 'admin' ],
get_permissions: [ Perm.OWNER ],
set_permissions: [ Perm.OWNER, Perm.ADMIN ],
validate: isStringValidator,
setter: simpleSetter,
getter: simpleGetter
Expand All @@ -367,8 +337,8 @@ export const accountFields: { [key: string]: FieldDefn } = {
'roles': {
entity_field: 'roles',
request_field_name: 'roles',
get_permissions: [ 'all' ],
set_permissions: [ 'admin' ],
get_permissions: [ Perm.ALL ],
set_permissions: [ Perm.ADMIN ],
validate: async (pField: FieldDefn, pEntity: Entity, pVal: any): Promise<ValidateResponse> => {
if (await verifyAllSArraySetValues(pVal, Roles.KnownRole)) {
return { valid: true };
Expand All @@ -381,26 +351,26 @@ export const accountFields: { [key: string]: FieldDefn } = {
'ip_addr_of_creator': {
entity_field: 'IPAddrOfCreator',
request_field_name: 'ip_addr_of_creator',
get_permissions: [ 'all' ],
set_permissions: [ 'none' ],
get_permissions: [ Perm.ALL ],
set_permissions: [ Perm.NONE ],
validate: isStringValidator,
setter: noSetter,
getter: simpleGetter
},
'when_account_created': {
entity_field: 'whenCreated',
request_field_name: 'when_account_created',
get_permissions: [ 'all' ],
set_permissions: [ 'none' ],
get_permissions: [ Perm.ALL ],
set_permissions: [ Perm.NONE ],
validate: isDateValidator,
setter: noSetter,
getter: dateStringGetter
},
'time_of_last_heartbeat': {
entity_field: 'timeOfLastHeartbeat',
request_field_name: 'time_of_last_heartbeat',
get_permissions: [ 'all' ],
set_permissions: [ 'admin' ],
get_permissions: [ Perm.ALL ],
set_permissions: [ Perm.ADMIN ],
validate: isDateValidator,
setter: noSetter,
getter: dateStringGetter
Expand Down

0 comments on commit d3568df

Please sign in to comment.