Files
team/server/channels/app/property_field_helpers.go

44 lines
1.8 KiB
Go

// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
package app
import (
"github.com/mattermost/mattermost/server/public/model"
)
// DefaultPropertyFieldPermissionLevel returns the permission level that
// nil-fill / non-admin-pin should use for this field. Templates and system
// fields default to sysadmin (templates define the schema linked fields
// inherit; system fields attach to the Mattermost instance and only an
// administrator should write them). Other object types default to member.
func DefaultPropertyFieldPermissionLevel(field *model.PropertyField) model.PermissionLevel {
if field.ObjectType == model.PropertyFieldObjectTypeTemplate ||
field.ObjectType == model.PropertyFieldObjectTypeSystem {
return model.PermissionLevelSysadmin
}
return model.PermissionLevelMember
}
// CanonicalizeSystemObjectField forces a system-object field to its only
// valid shape: TargetType="system", TargetID="", and all three Permission*
// pinned to sysadmin. A system field's TargetType makes member-level scope
// checks resolve to "any authenticated user" (see hasPropertyFieldScopeAccess
// in app/authorization.go), so honouring a member-level permission would
// expose the field's definition, options, and values to every logged-in user.
//
// Idempotent. Safe to call from both the API handler (before scope check)
// and from inside App.CreatePropertyField (defense in depth, covers
// plugin/internal callers).
func CanonicalizeSystemObjectField(field *model.PropertyField) {
if field == nil || field.ObjectType != model.PropertyFieldObjectTypeSystem {
return
}
field.TargetType = string(model.PropertyFieldTargetLevelSystem)
field.TargetID = ""
sysadmin := model.PermissionLevelSysadmin
field.PermissionField = &sysadmin
field.PermissionValues = &sysadmin
field.PermissionOptions = &sysadmin
}