# `MishkaDocument.Resources.Validations.MasterCommentReadOnly`
[🔗](https://github.com/mishka-group/mishka_document/blob/v0.0.1/lib/mishka_document/resources/__validates/master_comment_read_only.ex#L5)

Stops a tenant changing an issue comment a master wrote.

## What it is for

A master can write on any site's issue, and a tenant admin of that site can read what they wrote.
Nothing in the policies stops the tenant editing or deleting it too — both are admins, and the
comment sits on their own site — so a master's answer on an issue could be rewritten or removed
by the site it was written to. A master's comment is theirs; the tenant only sees it.

Only a tenant actor (one with a `site_id`) is checked. A master is never refused, and neither is
system code running without an actor, such as the seeds archiving comments. `authorize?: false`
does not skip it: a tenant actor is a tenant actor either way.

## Usage

    update :update do
      validate MasterCommentReadOnly
    end

Put it on the tenant `:update`, `:destroy`, `:unarchive` and `:permanent_destroy`, never on their
`master_*` twins.

It reads the comment's CURRENT `contributor_id` — `Ash.Changeset.get_data/2`, not
`get_attribute/2` — because the question is who wrote the row, not what the changeset would like
it to say. Who counts as a master is decided by
`MishkaDocument.Resources.Calculations.AuthoredByMaster.master_ids/1`, the same read that tells
the admin which comments to draw without Edit and Delete. When that read fails the change is
refused with its error rather than let through.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
