mirror of
https://github.com/gristlabs/grist-core.git
synced 2026-03-02 04:09:24 +00:00
(core) add per-user per-org preferences to database
Summary: Adds preferences to orgs. There are a few flavors: * `userOrgPrefs`: these are specific to a certain user and a certain org. * `orgPrefs`: these are specific to a certain org, and apply to all users. * `userPrefs`: these are specific to a certain user, and apply to all orgs. The three flavors of prefs are reported by `GET` for an org, and can be modified by `PATCH` for an org. The user needs to have UPDATE rights to change `orgPrefs`, but can change `userOrgPrefs` and `userPrefs` without that right since the settings only affect themselves. Test Plan: added tests Reviewers: dsagal Reviewed By: dsagal Differential Revision: https://phab.getgrist.com/D2572
This commit is contained in:
31
app/gen-server/entity/Pref.ts
Normal file
31
app/gen-server/entity/Pref.ts
Normal file
@@ -0,0 +1,31 @@
|
||||
import {Prefs} from 'app/common/Prefs';
|
||||
import {Organization} from 'app/gen-server/entity/Organization';
|
||||
import {User} from 'app/gen-server/entity/User';
|
||||
import {nativeValues} from 'app/gen-server/lib/values';
|
||||
import {Column, Entity, JoinColumn, ManyToOne, PrimaryColumn} from 'typeorm';
|
||||
|
||||
@Entity({name: 'prefs'})
|
||||
export class Pref {
|
||||
// This table may refer to users and/or orgs.
|
||||
// We pretend userId/orgId are the primary key since TypeORM insists on having
|
||||
// one, but we haven't marked them as so in the DB since the SQL standard frowns
|
||||
// on nullable primary keys (and Postgres doesn't support them). We could add
|
||||
// another primary key, but we don't actually need one.
|
||||
@PrimaryColumn({name: 'user_id'})
|
||||
public userId: number|null;
|
||||
|
||||
@PrimaryColumn({name: 'org_id'})
|
||||
public orgId: number|null;
|
||||
|
||||
@ManyToOne(type => User)
|
||||
@JoinColumn({name: 'user_id'})
|
||||
public user?: User;
|
||||
|
||||
@ManyToOne(type => Organization)
|
||||
@JoinColumn({name: 'org_id'})
|
||||
public org?: Organization;
|
||||
|
||||
// Finally, the actual preferences, in JSON.
|
||||
@Column({type: nativeValues.jsonEntityType})
|
||||
public prefs: Prefs;
|
||||
}
|
||||
Reference in New Issue
Block a user