Raw data row from the metadata dataset / database view.
copyInitData maps this into the typed properties (ID, Name, ParentID, etc.).
Optionalmd: IMetadataProviderThe provider that owns this metadata (the universal
new m.class(dataRow, metadataProvider) convention used by
MetadataFromSimpleObjectWithoutUser); Roles resolves through it.
Timestamp when the authorization was created
Timestamp when the authorization was last updated
Description of the authorization
Unique identifier for the authorization
Indicates whether this authorization is currently active and can be granted to users or roles
Name of the authorization
Name of the parent authorization
The unique identifier for the parent authorization, if applicable
When set to 1, Audit Log records are created whenever this authorization is invoked for a user
The metadata provider that built this Info object, when known.
Info getters that resolve sibling metadata (an entity's IS-A children, a permission's RLS
filter, a query's fields, an authorization's roles, …) must read from the SAME provider the
object came from. In a multi-provider process — several GraphQLDataProvider instances with
separateConnection, or a server servicing several connections — the global
Metadata.Provider is a different provider or not set at all. Providers pass themselves to
every Info constructor (new m.class(row, provider)), and container Info objects hand it to
the child Info objects they construct.
undefined for an Info object built outside a provider (tests, ad-hoc construction). Callers
then fall back to the global provider, which is exactly the pre-existing behavior.
Returns the role assignments for this authorization.
Lazy resolution — filters the owning provider's AuthorizationRoles collection
(see BaseInfo.OwningProvider; the global provider only when there is no owner) on
every call, like QueryInfo.Permissions filters QueryPermissions. No result caching is applied because
AuthorizationRoleInfo objects are lightweight and the collection is small.
ProtectedcopyCopies initialization data from a plain object to the class instance. Only copies properties that already exist on the class to prevent creating new fields. Special handling for DefaultValue fields to extract actual values from SQL Server syntax.
The initialization data object
OptionalskipKeys: ReadonlySet<string>Optional set of property keys handled directly by the subclass constructor
Determines if a given role can execute actions under this authorization.
Phase 2b also honours Deny semantics for consistency with UserCanExecute.
The role to check for execution rights.
True if an Allow authorization-role exists for this role and no Deny does.
Records the provider that owns this Info object. A null/undefined provider is ignored, so passing an optional constructor argument straight through is always safe.
the provider whose metadata this object belongs to
Default JSON serialization for BaseInfo subclasses.
Emits all non-underscored direct field declarations. For _-prefixed private backing fields
(the MJ pattern for collection storage — e.g. _Fields, _RelatedEntities, _OrganicKeys),
emits the value of the corresponding same-named public getter instead. Purely computed getters
without a backing field (display-name formatters, derived flags) are intentionally skipped —
they can throw when source fields are null and don't belong on the wire anyway.
A _-backed getter that throws is omitted from the output rather than aborting the whole
serialization. That omission is safe ONLY because such getters are recomputable: the backing
field is a lazy cache over other serialized state (e.g. QueryInfo.CategoryPath over CategoryID),
so the value is rebuilt on the next access after a warm boot. Do not add a _-backed getter
whose value cannot be recomputed from the serialized fields — a throw would silently drop it.
Nested BaseInfo instances and arrays of them unwrap automatically via JSON.stringify's native toJSON() protocol.
Subclasses may override to emit a filtered subset or custom shape (see EntityFieldValueInfo).
Determines if a given user can execute actions under this authorization based on their roles.
Evaluation rules (fixed in Phase 2b):
AuthorizationRoleInfo.RoleID (the FK to Roles), not the authorization-role PK.Type column: any matching Deny row wins; without a Deny, at least one Allow is required.The user to check for execution rights.
True if the user has a matching Allow role and no matching Deny role; false otherwise.
Stores the fundamental permissions and access rights that can be granted to users and roles throughout the system.