mirror of
https://github.com/documize/community.git
synced 2025-07-24 15:49:44 +02:00
Provider foundation for doc lifecycle and versions
This commit is contained in:
parent
4e32bffebe
commit
958f4d30b9
19 changed files with 918 additions and 782 deletions
|
@ -22,18 +22,23 @@ import (
|
|||
// Document represents the purpose of Documize.
|
||||
type Document struct {
|
||||
model.BaseEntity
|
||||
OrgID string `json:"orgId"`
|
||||
LabelID string `json:"folderId"`
|
||||
UserID string `json:"userId"`
|
||||
Job string `json:"job"`
|
||||
Location string `json:"location"`
|
||||
Title string `json:"name"`
|
||||
Excerpt string `json:"excerpt"`
|
||||
Slug string `json:"-"`
|
||||
Tags string `json:"tags"`
|
||||
Template bool `json:"template"`
|
||||
Protection workflow.Protection `json:"protection"`
|
||||
Approval workflow.Approval `json:"approval"`
|
||||
OrgID string `json:"orgId"`
|
||||
LabelID string `json:"folderId"`
|
||||
UserID string `json:"userId"`
|
||||
Job string `json:"job"`
|
||||
Location string `json:"location"`
|
||||
Title string `json:"name"`
|
||||
Excerpt string `json:"excerpt"`
|
||||
Slug string `json:"-"`
|
||||
Tags string `json:"tags"`
|
||||
Template bool `json:"template"`
|
||||
Protection workflow.Protection `json:"protection"`
|
||||
Approval workflow.Approval `json:"approval"`
|
||||
Lifecycle workflow.Lifecycle `json:"lifecycle"`
|
||||
Versioned bool `json:"versioned"`
|
||||
VersionID string `json:"versionId"`
|
||||
VersionOrder int `json:"versionOrder"`
|
||||
GroupID string `json:"groupId"`
|
||||
}
|
||||
|
||||
// SetDefaults ensures on blanks and cleans.
|
||||
|
|
|
@ -93,6 +93,12 @@ const (
|
|||
// DocumentApprove means you can approve a change to a document
|
||||
DocumentApprove Action = "doc-approve"
|
||||
|
||||
// DocumentLifecycle means you can move a document between DRAFT/LIVE/ARCHIVE states
|
||||
DocumentLifecycle Action = "doc-lifecycle"
|
||||
|
||||
// DocumentVersion means you can manage document versions
|
||||
DocumentVersion Action = "doc-version"
|
||||
|
||||
// CategoryView action means you can view a category and documents therein
|
||||
CategoryView Action = "view"
|
||||
)
|
||||
|
|
|
@ -15,21 +15,23 @@ package permission
|
|||
// This data structure is made from database permission records for the space,
|
||||
// and it is designed to be sent to HTTP clients (web, mobile).
|
||||
type Record struct {
|
||||
OrgID string `json:"orgId"`
|
||||
SpaceID string `json:"folderId"`
|
||||
WhoID string `json:"whoId"`
|
||||
Who WhoType `json:"who"`
|
||||
SpaceView bool `json:"spaceView"`
|
||||
SpaceManage bool `json:"spaceManage"`
|
||||
SpaceOwner bool `json:"spaceOwner"`
|
||||
DocumentAdd bool `json:"documentAdd"`
|
||||
DocumentEdit bool `json:"documentEdit"`
|
||||
DocumentDelete bool `json:"documentDelete"`
|
||||
DocumentMove bool `json:"documentMove"`
|
||||
DocumentCopy bool `json:"documentCopy"`
|
||||
DocumentTemplate bool `json:"documentTemplate"`
|
||||
DocumentApprove bool `json:"documentApprove"`
|
||||
Name string `json:"name"` // read-only, user or group name
|
||||
OrgID string `json:"orgId"`
|
||||
SpaceID string `json:"folderId"`
|
||||
WhoID string `json:"whoId"`
|
||||
Who WhoType `json:"who"`
|
||||
SpaceView bool `json:"spaceView"`
|
||||
SpaceManage bool `json:"spaceManage"`
|
||||
SpaceOwner bool `json:"spaceOwner"`
|
||||
DocumentAdd bool `json:"documentAdd"`
|
||||
DocumentEdit bool `json:"documentEdit"`
|
||||
DocumentDelete bool `json:"documentDelete"`
|
||||
DocumentMove bool `json:"documentMove"`
|
||||
DocumentCopy bool `json:"documentCopy"`
|
||||
DocumentTemplate bool `json:"documentTemplate"`
|
||||
DocumentApprove bool `json:"documentApprove"`
|
||||
DocumentLifecycle bool `json:"documentLifecycle"`
|
||||
DocumentVersion bool `json:"documentVersion"`
|
||||
Name string `json:"name"` // read-only, user or group name
|
||||
}
|
||||
|
||||
// DecodeUserPermissions returns a flat, usable permission summary record
|
||||
|
@ -67,6 +69,10 @@ func DecodeUserPermissions(perm []Permission) (r Record) {
|
|||
r.DocumentTemplate = true
|
||||
case DocumentApprove:
|
||||
r.DocumentApprove = true
|
||||
case DocumentLifecycle:
|
||||
r.DocumentLifecycle = true
|
||||
case DocumentVersion:
|
||||
r.DocumentVersion = true
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -107,6 +113,12 @@ func EncodeUserPermissions(r Record) (perm []Permission) {
|
|||
if r.DocumentApprove {
|
||||
perm = append(perm, EncodeRecord(r, DocumentApprove))
|
||||
}
|
||||
if r.DocumentVersion {
|
||||
perm = append(perm, EncodeRecord(r, DocumentVersion))
|
||||
}
|
||||
if r.DocumentLifecycle {
|
||||
perm = append(perm, EncodeRecord(r, DocumentLifecycle))
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
@ -114,7 +126,8 @@ func EncodeUserPermissions(r Record) (perm []Permission) {
|
|||
// HasAnyPermission returns true if user has at least one permission.
|
||||
func HasAnyPermission(p Record) bool {
|
||||
return p.SpaceView || p.SpaceManage || p.SpaceOwner || p.DocumentAdd || p.DocumentEdit ||
|
||||
p.DocumentDelete || p.DocumentMove || p.DocumentCopy || p.DocumentTemplate || p.DocumentApprove
|
||||
p.DocumentDelete || p.DocumentMove || p.DocumentCopy || p.DocumentTemplate || p.DocumentApprove ||
|
||||
p.DocumentLifecycle || p.DocumentVersion
|
||||
}
|
||||
|
||||
// EncodeRecord creates standard permission record representing user permissions for a space.
|
||||
|
@ -138,7 +151,6 @@ type CategoryViewRequestModel struct {
|
|||
CategoryID string `json:"categoryID"`
|
||||
WhoID string `json:"whoId"`
|
||||
Who WhoType `json:"who"`
|
||||
// UserID string `json:"userId"`
|
||||
}
|
||||
|
||||
// SpaceRequestModel details which users have what permissions on a given space.
|
||||
|
|
|
@ -63,3 +63,17 @@ const (
|
|||
// ChangePendingNew means a new section to a document is pending review
|
||||
ChangePendingNew ChangeStatus = 4
|
||||
)
|
||||
|
||||
// Lifecycle tells us if document is in Draft, Live, Archived
|
||||
type Lifecycle int
|
||||
|
||||
const (
|
||||
// LifecycleDraft means document is in draft mode with restricted viewing
|
||||
LifecycleDraft Lifecycle = 0
|
||||
|
||||
// LifecycleLive means document can be seen by all
|
||||
LifecycleLive Lifecycle = 1
|
||||
|
||||
// LifecycleArchived means document has been archived
|
||||
LifecycleArchived Lifecycle = 2
|
||||
)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue