Files
team/server/channels/app/property_field_helpers.go
zeekay 8feb24ea1f One name for this fork, and it is ours
The server module named github.com/hanzoai/team/server/v8 — a path that
resolves to the retired workspace's repository, not this one — while
server/public still published github.com/mattermost/mattermost/server/public.
Both are github.com/hanzoteam/server/... now, which is where this code
actually lives.

That second half is what made the binary unbootable. Upstream's public path
stayed claimed by upstream, mattermost-plugin-ai imported it, and the build
linked public/model twice; public/plugin's gob.Register then ran twice under
one name and panicked at init, before main. Reverting the rename traded the
brand for a working binary. Rebranding the plugin alongside it needs no such
trade: the agents fork is github.com/hanzoteam/agents/v2 against our public
module, so no module named mattermost/mattermost is in the graph at all.

Measured: `go list -deps ./cmd/mattermost` names exactly one public/model, and
it is ours.
2026-08-28 23:35:36 -07:00

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/hanzoteam/server/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 Hanzo Team 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
}