# Åtkomst

> Handbok · 2026-10-30 · https://groovy.simplo.dev/handbok/atkomst

Vem som får läsa sajten och enskilda sidor: skyddet gäller nedåt, med ett medlemsexempel.

Vem som får göra vad, roll för roll: [Roller](https://groovy.simplo.dev/handbok/atkomst/roller).

## Hela sajten
Vem som får läsa sajten ställs in av sajtens site-admin på sajten, under
**Site-Admin** i sidhuvudet → *Ã
tkomst*, eller i Admin → Themes →
Groovy Docs → *Access* (samma inställning). En editor som inte är
site-admin ser inte avsnittet (se [Editors och site-admins](https://groovy.simplo.dev/handbok/atkomst/redaktorer)):

| Val | Vem får läsa |
|---|---|
| *Alla* | alla (standard) |
| *Inloggade besökare* | den som är inloggad |
| *Medlemmar i grupperna nedan* | den som är med i någon av de valda grupperna |
| *Domänregistret* | den vars e-postdomän står för sajten i domänregistret, eller som är med i någon av de valda grupperna |

Regeln ligger ovanför alla sidor. Ingen sida blir mer öppen än sajten, men
en sida kan ha egna regler som gör den ännu strängare (nedan). Inloggningen
och sidan för att be om en inloggningslänk går alltid att nå.

- **Öppna sajten för alla är ett medvetet val.** Byter du från ett stängt
  val till *Alla* på sajten visar avsnittet en röd varning: vem som helst
  kan då läsa alla sidor och filer som inte är skyddade var för sig, och
  sökmotorer kan hitta dem. Du måste kryssa i *Jag förstår: öppna … för
  alla* innan knappen *Öppna för alla* går att trycka på. Vem som
  öppnade sajten och vad regeln var före skrivs i Gravs logg
  (`logs/grav.log`). *Medlemmar i grupperna nedan* utan vald grupp går
  inte att spara på sajten.
- **Gäller bara den sajt du ställer in.** Med flera sajter ställer du in
  regeln på varje sajt (eller i dess egen Admin, `/<sajt>/admin`). En sajt som inte har
  ställt in något är öppen för alla, vad bas-sajten än säger.
- **En sajt som skapas i sajtregistret är stängd från början:** bara
  editors (och super-admin) kan läsa den. Avsnittet visar det som
  *Bara editorer (välj vem som får läsa)*. Sajtens site-admin väljer vem som
  ska få läsa och sparar; att öppna den för alla kräver varningen och
  krysset ovan. Se [Skapa en sajt](https://groovy.simplo.dev/kom-igang/skapa-en-sajt).
- **Grupperna** är de som finns i Admin → Accounts → Groups och ger
  rättigheten `site.group.<gruppens namn>`, till exempel `site.group.styrelsen`
  för gruppen *styrelsen*. Med flera sajter erbjuds sajtens egna grupper
  (`<sajt>--<namn>`) och de gemensamma (utan sajtnamn, märkta *shared*),
  aldrig en annan sajts (se [Inloggning](https://groovy.simplo.dev/handbok/atkomst/inloggning)). Sajtens site-admin
  lägger till medlemmar och skapar sajtens grupper ([Medlemmar och
  grupper](medlemmar)). Valet finns bara när inloggning med e-post är
  installerad, eftersom det är den som ser till att en borttagen medlem
  förlorar åtkomsten direkt.
- **Den som får redigera sajten kommer alltid in**: sajtens
  [editors](https://groovy.simplo.dev/handbok/atkomst/redaktorer) och super-admin, också när de inte är med i
  någon av grupperna. För alla andra gäller grupperna. Är ingen grupp vald
  får ingen annan läsa. Hälsokontrollen varnar om ingen grupp är vald
  eller om en grupp saknar rättigheten.

- **Domänregistret** är en fil som ett annat system (till exempel n8n)
  skriver: vilka e-postdomäner som får läsa vilka sajter. Välj
  *Domänregistret* för en sajt som läses av kunder. Den som ber om en
  inloggningslänk med en adress vars domän står för sajten får ett konto
  automatiskt och läser sajten; andra adresser får samma besked som när
  en okänd adress ber om länk, men inget konto och inget mejl.
  Gratisadresser (gmail.com, outlook.com, hotmail.se …) räknas aldrig.
  Tas en domän bort ur registret slutar kontona läsa vid nästa
  sidladdning. Kontona finns kvar tills super-admin gallrar dem: under
  **System-Admin** → *Domain accounts* visas först vilka konton
  som berörs, sedan gallras de med **Prune** (samma sak på kommandoraden:
  `php bin/plugin mail-auth prune-domains`, och `--apply` för att utföra).
  Ett konto som också är med i andra grupper, har egna rättigheter eller
  är editor tas bara ur domängruppen; andra raderas. Konton som
  registret skapade och som inte är med i någon grupp alls raderas också,
  om de inte har egna rättigheter eller är editor någonstans.
  Inaktiverade konton rörs aldrig. Det går bara när registret är läsbart,
  aktuellt och inte tomt. Skulle mer än hälften av registrets konton (och
  fler än fem) gallras på en gång säger listan det, och du måste kryssa i
  en extra bekräftelse (på kommandoraden `--apply --force`): kontrollera
  först att domains.json inte tappat en domän eller sajt. Hälsokontrollen
  visar hur många konton som kan gallras. Registret gör aldrig någon till editor. Valet finns bara
  när inloggning med e-post är installerad. Hälsokontrollen varnar om
  filen saknas, inte går att läsa, är gammal eller har poster som
  hoppats över, och om ingen domän står för sajten.
- **Konton från domänregistret räknas inte som inloggade besökare** i en
  annan sajt: på en sajt med *Inloggade besökare*, och på en sida som
  kräver inloggning (`site.login`), kommer de bara in om deras domän står
  för den sajten eller om de är med i någon av sajtens grupper.
- **Inloggad men utan läsrätt:** den som är inloggad men inte får läsa
  sajten ser *Ingen åtkomst till sajten*, utan förklaring.

## Enskilda sidor
Sajtens site-admin (och super-admin) väljer vem som får läsa en sida,
direkt på sajten. En editor som inte är site-admin ser valet under
*Vem får läsa*, men kan inte ändra det:

1. Öppna sidan och välj **⋮** → **Redigera sidan**.
2. Välj **Inställningar** i raden överst. Första kortet är *Vem får läsa*.
3. Välj bland:

   | Val | Vem får läsa sidan |
   |---|---|
   | *Ärv (…, från …)* | samma som sidan ovanför, eller sajten; texten säger vad och varifrån |
   | *Inloggade besökare* | den som är inloggad |
   | *Vissa grupper* | den som är med i någon av de grupper du kryssar i |
   | *Egen regel (ändras i Admin)* | sidan har en regel som bara går att ändra i Admin |

4. Läs texten under valet. Den säger vad ändringen betyder: hur många
   undersidor som följer med, om sidan slutar eller börjar gå att läsa
   utan inloggning, och hur många filer som då blir öppna för vem som
   helst som har adressen.
5. Klicka **Spara vem som får läsa**.

- **Det gäller direkt**, också när sajten har utkast. Valet sparas för
  sig, inte med sidans text, och syns i sidans historik.
- **Det finns inget val för "alla".** En sida kan bara bli strängare än
  sidan ovanför och sajten. Vill du att en sida ska vara öppen: välj
  *Ärv*, och se till att den inte ligger i en skyddad gren.
- **Grupperna** är desamma som sajtens regel erbjuder. Du skapar dem och
  lägger till medlemmar i [Medlemmar och grupper](https://groovy.simplo.dev/handbok/atkomst/medlemmar). Valet finns
  bara när inloggning med e-post är installerad.
- **Låset:** som editor ser du en låsikon vid titeln på en skyddad sida,
  och i sidomenyn vid sidor med egna regler. Ett blekt lås betyder att
  sidan ärver skyddet. Håll muspekaren över låset för att se vem som får
  läsa. Läsare ser aldrig låset.
- I Admin ligger regeln i sidans frontmatter som `access` (under sidans
  *Security*). Där kan du skriva regler som inte är något av valen.

Den som inte får läsa sidan ser den inte i menyer, sök, brödsmulor,
export eller versionsväljaren, och direktadressen visar inloggningen.

**Skyddet gäller nedåt.** Skyddar du en sida skyddar du allt under den. En
undersida kan få egna, strängare regler, men aldrig öppna upp: den visas
bara för den som får läsa både den och varje skyddad sida ovanför.

**Editors ser allt i sin sajt.** Den som får redigera sajten (sajtens
editors och super-admin) läser alla dess sidor, också de skyddade, och
ser dem i menyer, sök och export. I en annan sajt är editorn en vanlig
läsare.

## Exempel: en medlemsdel
En del som alla medlemmar ser, med en del bara för vissa medlemmar:

```
Medlemmar          Inloggade besökare            alla inloggade medlemmar
├─ Nyheter         Ärv                           ärver: alla medlemmar
└─ Grupp A         Vissa grupper: Grupp A        bara medlemmar i Grupp A
   └─ Protokoll    Ärv                           ärver: bara Grupp A
```

| Besökare | Ser |
|---|---|
| inte inloggad | ingenting under *Medlemmar* |
| medlem | *Medlemmar* och *Nyheter* |
| medlem i Grupp A | allt, även *Grupp A* och *Protokoll* |

Så gör du:
1. Skapa gruppen *Grupp A* och lägg till medlemmarna i den
   ([Medlemmar och grupper](https://groovy.simplo.dev/handbok/atkomst/medlemmar)).
2. Välj *Inloggade besökare* för sidan *Medlemmar*.
3. Välj *Vissa grupper* och *Grupp A* för sidan *Grupp A*. Sidorna under
   den behöver inga egna val.

> [!WARNING]
> En öppen sida inne i en skyddad gren går inte, till exempel en publik sida
> under *Medlemmar*. Lägg den utanför grenen i stället. Hälsokontrollen
> varnar om någon sida har regler som försöker öppna upp.

## Roller

De sex rollerna: vad var och en får göra, var den arbetar och vem som utser den.

Systemet har sex roller: super-admin, system-admin, site-admin, editor,
member och public.

- **Två roller gäller hela installationen:** super-admin och
  system-admin.
- **Två roller gäller en sajt:** site-admin och editor. En person har en
  roll per sajt, och kan vara editor i en sajt och member i en annan.
- **En site-admin är också editor.** Allt som står under Editor nedan
  gäller också site-admin.
- **System-admin har site-adminens rätt i alla sajter,** utan att stå som
  editor eller site-admin i dem.
- **Super-admin får allt.**

| Roll | Gäller | Arbetar i | Gör |
|---|---|---|---|
| **Super-admin** | installationen | Admin, System-Admin och varje sajts Site-Admin | Ansvarar för allt. Ensam om lösenord, Admin, konton och rättigheter, om att ta bort, byta namn på och återställa sajter och om att radera för gott. |
| **System-admin** | installationen | System-Admin och varje sajts Site-Admin | Sköter registret och skapar sajter. Skapar, ändrar och tar bort presets. Sköter den gemensamma tagglistan och de delade läsgrupperna. |
| **Site-admin** | en sajt | sajtens Site-Admin och sidans åtgärder (**⋮**) | Bestämmer vem som läser, *Members*, vilka som är editor och site-admin, sajtens preset och sajtens val. Begär att sajten tas bort. |
| **Editor** | en sajt | sidans åtgärder (**⋮**) och *Papperskorg* i Site-Admin | Skriver, flyttar, ordnar och publicerar sidor. Bilagor, historik och papperskorgen. |
| **Member** | sajter där läsregeln släpper in kontot | sajten | Läser, inloggad. Också konton från domänregistret och kundkonton. |
| **Public** | sajter som är öppna för alla | sajten | Läser utan inloggning. |

Panelerna Site-Admin och System-Admin beskrivs i
[Skriva och redigera → Site-Admin och System-Admin](https://groovy.simplo.dev/handbok/skriva).

### Super-admin
Super-admin ansvarar för installationen och får allt de andra rollerna
får, i alla sajter. Det här får bara super-admin:

- **Admin:** Gravs administrationsgränssnitt på `/admin` och
  `/<sajt>/admin` (se [Admin: en per sajt](https://groovy.simplo.dev/handbok/kom-igang/admin)). Admin
  kräver lösenord, och bara super-admin har ett (se
  [Inloggning](https://groovy.simplo.dev/handbok/atkomst/inloggning)). Där finns all konfiguration: temats
  inställningar, presets och pluginens inställningar.
- **Konton och rättigheter:** konton, grupper och rättigheter för hela
  installationen ändras i Admin. Super-admin ger rätten att skapa sajter
  (gör någon till system-admin) och gör någon till super-admin.
- **Ta bort en sajt:** sajten flyttas till installationens papperskorg,
  efter en granskning och en bekräftelse. Site-admin och system-admin
  begär borttagning i stället.
- **Byta namn på en sajt och återställa en borttagen sajt** (se
  [Skapa en sajt → Byta namn på eller ta bort en sajt](https://groovy.simplo.dev/handbok/kom-igang/skapa-en-sajt)).
- **Radera för gott:** radera något ur en sajts papperskorg, eller tömma
  den. Det går inte att ångra (se
  [Radera och papperskorg](https://groovy.simplo.dev/handbok/skriva/papperskorg)).
- **Två val per sajt:** om sökningen görs i webbläsaren eller på servern
  ([Sökning på servern](https://groovy.simplo.dev/handbok/drift/sokning-pa-servern)), och om
  produkterna får öppna sajten för sina kunder
  ([Från produkterna](https://groovy.simplo.dev/handbok/atkomst/fran-produkterna)).
- **Hela hälsokontrollen:** alla kontroller, per sajt i registret i
  System-Admin och i Admin. Site-Admin visar ett urval (se
  [Hälsokontroll](https://groovy.simplo.dev/handbok/drift/halsokontroll)).
- **Domain accounts** i System-Admin: gallra konton vars domän inte längre
  står i domänregistret (se [Ã
tkomst](..)).
- **AI-klient:** verktygen för System-Admin → *Temainställningar*, och att
  läsa *Domain accounts*. Klienten gallrar aldrig.

Övrigt:

- Super-admin är undantagen från en sajts lås och kan ändra sidor fast
  sajten är låst.
- Super-admin begär inte att en sajt tas bort, utan tar bort den själv.
- En sajt som blivit utan site-admin får en ny av super-admin eller
  system-admin.
- Presets konstruerar super-admin i System-Admin.
- I en vanlig sajt, utan flera sajter, ändrar super-admin sajtens titel
  i Admin.

### System-admin
System-admin förvaltar alla sajter. Rollen arbetar i **System-Admin** och
har dessutom site-adminens rätt i varje sajt.

**Läsa**
- Läser alla sajter och alla sidor, också utkast och opublicerade sidor.
- Söker över alla sajter, när valet är påslaget (se
  [Sökning över sajter](https://groovy.simplo.dev/handbok/drift/sokning-over-sajter)).
- Ser alla sajter i sajtväljaren och i listan över sajter.

**Sidor och Site-Admin**
- Allt en site-admin får (nedan), i alla sajter. System-admin behöver
  inte först göra sig själv till editor i sajten.
- Är undantagen från en sajts lås och kan ändra sidor fast sajten är
  låst.
- Hälsokontrollen i Site-Admin visar samma urval som för site-admin.

**System-Admin**
- *Sites*, registret: ser alla sajter, med titel, editors, preset och
  lås.
- Skapar sajter. En ny sajt är stängd för läsare, och den som skapar den
  blir site-admin där (se [Skapa en sajt](https://groovy.simplo.dev/handbok/kom-igang/skapa-en-sajt)).
- Ändrar editors, titel, beskrivning, preset, taggar och lås för varje
  sajt från registret.
- Ser etiketten *Borttagning begärd* på en sajt där borttagning är begärd,
  och kan avfärda begäran med **Avvisa**.
- *Taggar*: den gemensamma tagglistan (se [Taggar](https://groovy.simplo.dev/handbok/skriva/taggar)).
- *Reading groups*: de delade läsgrupperna, som alla sajter kan välja.
  System-admin skapar dem, ger dem ny etikett och tar bort dem. Vem som
  är med bestäms i grundsajtens *Members*.
- *Presets*: skapar, ändrar och tar bort installationens presets (se
  [Presets](https://groovy.simplo.dev/handbok/utseende/presets)).

**AI-klient** (se [AI-klient](https://groovy.simplo.dev/handbok/atkomst/ai-klient))
- Läser och ändrar sidor i alla sajter, och varje sajts *Inställningar* och
  *Site*.
- Registrets verktyg: lista sajterna, skapa en sajt och ändra en sajt.
- Presetverktygen. Klienten tar aldrig bort en preset.
- Den gemensamma tagglistan. Inte *Temainställningar*, som bara super-admin
  ändrar.
- Läser åtkomsten i alla sajter och föreslår ändringar, som du bekräftar
  i webbläsaren (se [Ändra åtkomsten](https://groovy.simplo.dev/handbok/atkomst/ai-klient#andra-atkomsten)).

**Får inte**
- Ta bort en sajt. System-admin begär det, som en site-admin, och
  super-admin tar bort den.
- Byta namn på en sajt eller återställa en borttagen sajt.
- Radera för gott ur en papperskorg, eller tömma den.
- Gallra under *Domain accounts*.
- Välja sökmotor eller slå på produkternas åtkomst för en sajt.
- Ge någon rätten att skapa sajter, eller göra någon till super-admin.
- Använda Admin. System-admin har inget lösenord. Presets görs i
  System-Admin i stället.

### Site-admin
En site-admin ansvarar för en sajt. Rollen arbetar i sajtens
**Site-Admin** och i sidans åtgärder (**⋮**), och gäller bara den sajten
(se [Editors och site-admins](https://groovy.simplo.dev/handbok/atkomst/redaktorer)).

**Läsa**
- Läser alltid sin sajt, oavsett vem sajten är öppen för, också utkast
  och opublicerade sidor.
- Söker över de sajter där den är site-admin eller editor, när valet är
  påslaget.
- Ser sina egna sajter i sajtväljaren och i listan över sajter, och de
  sajter vars regel släpper in kontot.
- Site-adminernas namn kan visas i listan över sajter, för inloggade (se
  [Innehåll → Listan över sajterna](https://groovy.simplo.dev/handbok/skriva/innehall)). Editors namn
  visas inte.

**Sidor**
- Allt en editor får (nedan).
- Väljer vem som får läsa en enskild sida: inloggade eller vissa
  läsgrupper, för sidan och dess undersidor (se [Ã
tkomst](..)).

**Site-Admin**
- *Ã
tkomst*: vem som får läsa sajten: alla, inloggade, valda läsgrupper
  eller domänregistret. Att öppna sajten för alla kräver en extra
  bekräftelse (se [Ã
tkomst](..)).
- *Members*: lägger till en person med e-postadress, tar bort den ur
  sajten och skapar sajtens egna läsgrupper (se
  [Medlemmar och grupper](https://groovy.simplo.dev/handbok/atkomst/medlemmar)). På grundsajten skapas grupperna
  i System-Admin.
- Utser editors och site-admins i *Members*. Den sista site-adminen som
  kan arbeta i sajten kan inte tas bort.
- Ser i *Members* vilka domäner som läser sajten, men ändrar dem inte.
  Det gör ingen roll: listan skrivs utanför systemet.
- *Inställningar*: väljer sajtens preset bland de färdiga, slår på eller av
  utkast, historik, versioner, taggar, sidinfo och export, och ställer in
  sajtens identitet: loggan (uppladdad till sajten), texten vid den,
  länkarna i sidhuvudet, GitHub-länken och sidfotens text. Sajtens
  övriga inställningar ändrar bara super-admin.
- *Site* (finns bara med flera sajter): titel, beskrivning och sajtens
  taggar.
- Låser och låser upp sin sajt, i *Site*. En site-admin är inte
  undantagen från låset, och låser upp sajten för att ändra en sida.
- Begär att sajten tas bort, i *Site*, och kan ta tillbaka begäran. Det
  går inte för grundsajten. Inget mejl skickas: begäran syns i registret.
- *Papperskorg*: ser borttagna sidor och filer och återställer dem.
- *Hälsokontroll*: ett urval av hälsokontrollen, det som gäller sajten och
  som site-admin själv kan rätta. Servern och installationen ingår inte.

**AI-klient** (se [AI-klient](https://groovy.simplo.dev/handbok/atkomst/ai-klient))
- Läser och ändrar sidor, som en editor.
- Sajtens *Inställningar* (preset, funktioner och identitet) och *Site*
  (titel, beskrivning, taggar och lås).
- Läser åtkomsten (sajtens regel, *Members*, läsgrupperna, sidornas
  åtkomst) och föreslår ändringar, som du bekräftar i webbläsaren (se
  [Ändra åtkomsten](https://groovy.simplo.dev/handbok/atkomst/ai-klient#andra-atkomsten)). Aldrig att öppna för
  alla. Inte heller att begära att sajten tas bort.

**Får inte**
- Radera för gott ur papperskorgen, eller tömma den.
- Ta bort sajten. Site-admin begär det.
- Välja sökmotor eller slå på produkternas åtkomst.
- Konstruera presets. Site-admin väljer bland de färdiga.
- Se System-Admin: registret, skapa sajter, den gemensamma tagglistan
  och de delade läsgrupperna.
- Använda Admin.

### Editor
En editor skriver i en sajt. Rollen arbetar i sidans åtgärder (**⋮**)
och gäller bara den sajten (se [Skriva och redigera](https://groovy.simplo.dev/handbok/skriva)).

**Läsa**
- Läser alltid sin sajt, oavsett vem sajten är öppen för, och alla dess
  sidor.
- Ser nya och opublicerade sidor och utkast.
- Förhandsvisar en preset med `?preset=<namn>` på adressen. Den följer
  med när du klickar vidare i sajten. Inget sparas.
- Söker över de sajter där den är editor, när valet är påslaget.
- Ser sina egna sajter i sajtväljaren och i listan över sajter, och de
  sajter vars regel släpper in kontot.

**Sidor**
- Skapar, redigerar och sparar sidor (**Ny sida här**, **Redigera sidan**).
- Flyttar och kopierar sidor, ångrar en flytt och gör en ny version när
  sajten har versioner (se
  [Flytta och kopiera sidor](https://groovy.simplo.dev/handbok/skriva/flytta-kopiera)).
- Publicerar utkast, när sajten har utkast. Det finns ingen egen roll
  för att publicera (se [Utkast och publicering](https://groovy.simplo.dev/handbok/skriva/utkast)).
- Ser sidans historik och återställer en tidigare sparning, när sajten
  har historik (se [Sidans historik](https://groovy.simplo.dev/handbok/skriva/historik)).
- Laddar upp bilagor, ändrar deras namn och beskrivning och lägger dem i
  papperskorgen (se [Bilagor](https://groovy.simplo.dev/handbok/skriva/bilagor)).
- Väljer taggar på en sida (se [Taggar](https://groovy.simplo.dev/handbok/skriva/taggar)).
- Tar bort en sida. Den hamnar i sajtens papperskorg.
- Ser vem som får läsa en sida, men ändrar det inte.

**Site-Admin**
- Bara *Papperskorg*: ser borttagna sidor och filer och återställer dem (se
  [Radera och papperskorg](https://groovy.simplo.dev/handbok/skriva/papperskorg)).

**AI-klient**
- Läser, och gör det en editor får göra med sidor: skapa, ändra, flytta,
  publicera, bilagor och papperskorgen.
- Läser vem som får läsa en sida, men föreslår inga ändringar.

**Får inte**
- Ändra vem som får läsa sajten eller en sida.
- Se *Members*, utse editors eller site-admins.
- Ändra sajtens preset, funktioner, titel eller lås, eller begära att
  sajten tas bort.
- Se hälsokontrollen.
- Ändra sidor eller filer i en låst sajt.
- Radera för gott ur papperskorgen, eller tömma den.
- Se System-Admin eller använda Admin.

Editorns namn visas inte i listan över sajter.

### Member
En member är en inloggad läsare. Dit hör också konton från
domänregistret och kundkonton från en produkt.

- Läser de sajter vars regel släpper in kontot, och de sidor vars
  åtkomst släpper in kontot (se [Ã
tkomst](..)).
- Export, sidans `.md`-adress, `llms.txt` och sök visar bara de sidor
  kontot får läsa (se [Läsa och hitta](https://groovy.simplo.dev/handbok/lasa)).
- Ser i sajtväljaren och i listan över sajter de sajter vars regel
  släpper in kontot.
- Kan koppla in en AI-klient. Den läser och söker i det kontot får läsa
  (se [AI-klient](https://groovy.simplo.dev/handbok/atkomst/ai-klient)). Ett kundkonto bara i sajter där det är
  påslaget, och utan panel och personliga nycklar.

En member ser inte utkast och opublicerade sidor, söker inte över sajter,
ändrar ingenting och ser varken Site-Admin eller System-Admin.

### Public
Public är den som inte är inloggad.

- Läser bara sajter som är öppna för alla, och där bara sidor utan egna
  krav på åtkomst.
- Export, sidans `.md`-adress, `llms.txt` och sök visar bara sidor som
  är öppna för alla.
- Ser i sajtväljaren och i listan över sajter bara sajter som är öppna
  för alla.
- Kan inte koppla in en AI-klient. Det kräver ett konto.

### Så får du en roll
| Roll | Vem utser | Var |
|---|---|---|
| Member | sajtens site-admin lägger till adressen; konton från domänregistret och kundkonton skapas utanför sajten | *Members* i Site-Admin ([Medlemmar och grupper](https://groovy.simplo.dev/handbok/atkomst/medlemmar)) |
| Editor | en site-admin i sajten, system-admin eller super-admin | *Members* i Site-Admin, eller registret i System-Admin |
| Site-admin | en site-admin i samma sajt, system-admin eller super-admin | *Members* i Site-Admin |
| System-admin | super-admin | Admin: en grupp med behörigheten ([Skapa en sajt → System-admin](https://groovy.simplo.dev/handbok/kom-igang/skapa-en-sajt)) |
| Super-admin | super-admin | Admin |

- **Den som skapar en sajt blir site-admin där.** Bara system-admin och
  super-admin skapar sajter.
- **En sajt lämnas aldrig utan site-admin från *Members*.** Den sista
  site-adminen kan inte tas bort där.
- **Bara super-admin har ett lösenord.** Alla andra loggar in med en
  länk via e-post (se [Inloggning](https://groovy.simplo.dev/handbok/atkomst/inloggning)).

Vill du ha något gjort som din roll inte får: en editor ber sajtens
site-admin, en site-admin ber system-admin, och det som bara super-admin
får gör super-admin.

### En vanlig sajt, utan flera sajter
Rollerna är samma grupper som på grundsajten, `editors` och
`site-admins`, men med sina rättigheter i Admin (se
[Editors och site-admins → I en vanlig sajt](https://groovy.simplo.dev/handbok/atkomst/redaktorer)). Avsnittet
*Site* i Site-Admin finns inte, och super-admin ändrar sajtens titel i
Admin.

System-admin finns bara i en installation som kan ha flera sajter. Där
finns rollen och registret också innan den första sajten är skapad, så
att den kan skapas i System-Admin.

## Inloggning

Inloggning med e-post: magisk länk för alla utom super-admin.

Med pluginet `mail-auth` loggar alla utom super-admin in med e-post: de
skriver in sin adress och får en länk som loggar in dem. De har inget
lösenord.

| Konto | Loggar in | Glömt lösenord | Profilsidan |
|---|---|---|---|
| **Super-admin** (behörigheten `api.super`) | användarnamn och lösenord, också i Admin | ja | ja |
| **Alla andra** (e-postkonton) | länk via e-post (*Logga in med länk* på inloggningssidan, eller direkt om sajten börjar med länk) | nej | nej |

- **Länken gäller 10 minuter och en gång.** Den leder tillbaka till den
  sajt där den begärdes.
- **Samma svar oavsett adress.** Den som ber om en länk får alltid samma
  besked på inloggningssidan (*Om kontot finns har vi skickat en
  inloggningslänk till din e-post.*), också om adressen saknar konto; mejl går bara
  till kända adresser. Så avslöjas inte vilka adresser som har konto.
- **En adress, ett konto.** Har två konton samma adress skickas ingen
  länk. Hälsokontrollen säger till.
- **Ändrade rättigheter gäller direkt.** Tar du bort någon ur en grupp,
  eller stänger av kontot, gäller det vid nästa sidvisning, inte först när
  personen loggar ut.
- **Mejlen är på svenska** (eller engelska), se Mejlen nedan.

### Formuläret sajten börjar med
*Logga in* i sidhuvudet, och en skyddad sida för den som inte är inloggad,
visar ett av två formulär:

- **Användarnamn och lösenord** (standard). Det formulär super-admin
  använder. Alla andra klickar vidare till *Logga in med länk*.
- **Länk via e-post.** Formuläret där man skriver in sin adress och får
  en länk. Under det står länken *Logga in med användarnamn och lösenord*,
  så super-admin når alltid sitt formulär.

Välj länk via e-post när nästan alla som loggar in är e-postkonton.

- **Alla sajter, också nya:** System-Admin → *Temainställningar* →
  *Header — links* → *Sign-in form*. Det gäller varje sajt som inte har
  ett eget val.
- **En sajts eget val:** sajtens Site-Admin → *Inställningar*, samma fält.
  Bara super-admin ändrar det.

Inloggningsmejlet leder alltid till formuläret för länk via e-post,
oavsett vad sajten börjar med (Mejlen, nedan).

### Hur länge inloggningen gäller
En inloggning gäller tills den inte har använts på en viss tid. Tiden
ställs in en gång, för alla sajter i installationen:

- **Var:** Admin på grundsajten → Configuration → System → Session →
  *Timeout*, i sekunder. Det sparas i `user/config/system.yaml` som
  `session.timeout`.
- **Standard:** 1800, alltså 30 minuter. 7200 är 2 timmar, 2592000 är 30
  dagar.
- **Räknat från senaste aktivitet.** Varje sidvisning eller sparning
  startar om tiden. Den som är borta längre än så får logga in igen.
- **Gäller alla sajter.** En inloggning gäller alla sajter, och därför är
  tiden densamma överallt. Detsamma gäller alla andra inställningar under
  Session. En sajts egen Admin visar grundsajtens värden och säger ifrån
  om man försöker ändra dem där.
- **Kom ihåg mig** (rutan vid super-adminens inloggning med lösenord) håller
  inte kvar någon längre än den inställda tiden.
- **Admin** har en egen inloggning, men den följer samma tid. Står Admin
  öppen utan att användas längre än så, ber den om en ny inloggning.

### Mejlen
Tre mejl kan gå ut, alla som HTML och text. Ämnesraden har sajtens titel
(en subsajts egen titel i dess mejl), och mejlet slutar med sajtens
titel, inte med någons namn:

| Mejl | När | Ämnesrad | Utdrag |
|---|---|---|---|
| **Magisk länk** | någon ber om en länk på inloggningssidan | *Logga in på Dokumentation* | "Här är länken för att logga in på Dokumentation. Den gäller i 10 minuter och kan bara användas en gång." |
| **Inloggningsmejlet** | en site-admin lägger till någon, eller `mail-auth add --mail` | *Du kan nu logga in på Dokumentation* | "Du kan nu logga in på Dokumentation med den här e-postadressen … Det finns inget lösenord." Länken leder till formuläret där man ber om en inloggningslänk. |
| **Glömt lösenord** (bara super-admin) | super-admin ber om ett nytt lösenord | *Ã
terställ lösenordet på Dokumentation* | "Med länken nedan väljer du ett nytt lösenord. Den gäller i 24 timmar." |

Alla slutar med "Har du inte bett om det här kan du bortse från
mejlet." Inget mejl säger något om kontot (grupper, rättigheter, vem som
lade till det). Glömt lösenord *i Admin* skickar Admins eget mejl, på
engelska.

- **Språket** är inställningen *Mail language* i pluginet `mail-auth`
  (`mail_language: sv` eller `en`, i `user/config/plugins/mail-auth.yaml`,
  gemensamt för alla sajter). En subsajt kan ha ett eget i sin
  `config/plugins/mail-auth.yaml`. Är Gravs flerspråkighet påslagen
  används det aktiva språket i stället. Andra språk än svenska och engelska ger
  engelska. Inloggningssidorna följer i stället temats *Interface
  language* (se [Temainställningar → Gränssnittets språk](https://groovy.simplo.dev/handbok/utseende/installningar)).
- **Avsändaren** är e-postpluginets inställningar: adressen `from` och
  namnet `from_name` (Admin → Plugins → Email). Sätt namnet till sajtens
  namn.
- **Egen text:** mallarna ligger i pluginet (`templates/emails/mail-auth/`)
  och kan skrivas över med en fil med samma namn i temats `templates/`,
  se pluginets `README.md` → Mails.

### Lägga till ett konto
Från `public/`:

```bash
php bin/plugin mail-auth add anna@example.com --group styrelsen --name "Anna Andersson"
```

Kontot får adressen, rätten att logga in och grupperna. Inget lösenord
sätts. Finns adressen redan på ett konto säger kommandot ifrån.

- **`--mail`** skickar inloggningsmejlet: en välkomst med länk till
  sajtens formulär för länk via e-post. Utan `--mail` skickas inget mejl.
- **`--site <sajt>`** gäller en av flera sajter: grupperna får sajtens
  namn först (`--site medlem --group styrelsen` ger gruppen
  `medlem--styrelsen`) och mejlet länkar till den sajtens inloggning.
  Med `--group editors` blir personen också editor för den sajten
  (adressen läggs i sajtens lista).
- **Gruppnamn** följer samma regel som i
  avsnittet *Members*: gemener, siffror, `_` och enkla bindestreck (inte `-` först
  eller sist, inte `--`).

```bash
php bin/plugin mail-auth add anna@example.com --site medlem --group styrelsen --mail
```

Oftast behövs inte kommandot: sajtens site-admins bjuder in medlemmar
själva, se [Medlemmar och grupper](https://groovy.simplo.dev/handbok/atkomst/medlemmar). `php bin/plugin mail-auth check` listar adresser med flera konton
och e-postkonton som ändå har ett lösenord.

Skapar du kontot i Admin (Accounts → Users) kräver Admin ett lösenord,
men det tas bort direkt om kontot inte är super-admin. Ett e-postkonto kan
inte heller få ett lösenord i Admin efteråt.

### Grupper
En grupp ger sidrättigheter på vanligt sätt (se [Ã
tkomst](..)): gruppen
`styrelsen` med behörigheten `site.group.styrelsen` i Admin (Accounts →
Groups), och sidan med regeln `site.group.styrelsen: true`. Site-admins
skapar grupper själva i [Medlemmar och grupper](https://groovy.simplo.dev/handbok/atkomst/medlemmar).

**Med flera sajter** har en sajts grupper sajtens namn först:
`medlem--styrelsen` hör till sajten `medlem`. En grupp utan sajtnamn
(`styrelsen`) hör till grundsajten och är **gemensam**: alla sajter kan
välja den i sin regel, till exempel en styrelse som läser både den
publika sajten och medlemswebben. De gemensamma grupperna sköts av
system-admin och grundsajtens site-admin. En sajt kan aldrig välja en annan sajts
grupper.

## Editors och site-admins

Vem som får redigera en sajt och vem som ansvarar för den: en grupp per sajt.

En editor redigerar sajtens sidor direkt på sajten (se
[Skriva och redigera](https://groovy.simplo.dev/handbok/skriva)): skapar, ändrar och raderar sidor och
hanterar deras bilagor. En editor loggar in med e-post och kommer inte
åt Admin.

I **Site-Admin** ser en editor bara papperskorgen (*Papperskorg*).

**En site-admin ansvarar för sajten.** En site-admin är också editor,
och bestämmer dessutom:

- vem som får läsa sajten (**Site-Admin** → *Ã
tkomst*) och en enskild sida
  (se [Ã
tkomst](..)). En editor ser en sidas åtkomst men ändrar den
  inte;
- vilka som är medlemmar, editors och site-admins
  ([Medlemmar och grupper](https://groovy.simplo.dev/handbok/atkomst/medlemmar), **Site-Admin** → *Members*);
- sajtens utseende och vilka funktioner som är på (**Site-Admin** →
  *Inställningar*, nedan);
- sajtens titel, beskrivning och taggar, om sajten är låst, och om den
  ska tas bort (**Site-Admin** → *Site*, nedan).

En site-admin ser också sajtens egen hälsokontroll (**Site-Admin** →
*Hälsokontroll*, se [Hälsokontroll](https://groovy.simplo.dev/handbok/drift/halsokontroll)).

En person har en roll per sajt: editor eller site-admin. System-admin och
super-admin gör site-adminens arbete i alla sajter. Alla roller och vad
de får göra: [Roller](https://groovy.simplo.dev/handbok/atkomst/roller).

Nedan står hur det fungerar och hur du gör för hand, till exempel för
sajtens första site-admin.

### Inställningar: preset, funktioner och identitet
**Site-Admin** → *Inställningar* är sajtens egna inställningar, i ett formulär
med flikar. Allt du ändrar gäller bara den här sajten.

- **Inget sparas förrän du väljer *Spara*.** Bredvid knappen står hur
  många ändringar som väntar, och varje flik visar sitt antal. *Ã
ngra* tar
  tillbaka allt som inte är sparat. Ladda om en sida på sajten för att se
  ändringen.
- **Vid varje fält står varifrån värdet kommer:**
  - *Den här sajten*: sparat för den här sajten;
  - *Ärvt från Alla sajter*: grundsajten har satt det, sajten inget
    eget;
  - *Temats standard*: ingen har ändrat det;
  - *Inte sparat*: ändrat men inte sparat.
- ***Ã
terställ*** tar bort sajtens eget värde. Fältet visar då det som gäller
  utan det. ***Bara ändrade*** visar bara det som är sparat för sajten,
  och sökrutan söker i alla flikar.
- **Överst står sajtens preset.** Den som får göra presets får en länk
  dit.

#### Fliken Preset och funktioner
**Preset** är sajtens utseende: en av installationens presets (se
[Presets](https://groovy.simplo.dev/handbok/utseende/presets)). *Ingen* betyder att sajten inte har
någon preset och ser ut som temats eget utseende.

**Funktioner** är det sajten använder:

| Funktion | Vad den gör |
|---|---|
| *Drafts* | En sparning blir ett utkast som bara editors ser, tills det publiceras (se [Utkast och publicering](https://groovy.simplo.dev/handbok/skriva/utkast)). |
| *Page history* | Varje sparning sparar en kopia av sidan, som går att jämföra och återställa (se [Sidans historik](https://groovy.simplo.dev/handbok/skriva/historik)). |
| *Versions* | Versionerade områden i dokumentationen, med en versionsväljare. |
| *Common tags* | Taggar ur listan som alla sajter delar (se [Taggar](https://groovy.simplo.dev/handbok/skriva/taggar)). |
| *The site's own tags* | Fria taggar som editors skriver på sidorna. |
| *Record created and updated* | Skriver datum och namn i sidan varje gång den sparas. |
| *Show page info* | Visar på sidorna när de skapades och ändrades, och av vem. |
| *Export with subpages* | En sida och alla dess undersidor som en fil eller en utskrift. |

- De två sista har tre lägen: *Off*, på för alla sidor, eller på bara
  där sidan själv säger på.
- **En ny sajt börjar med alla funktioner av.** Site-admin slår på dem
  som sajten ska ha.

#### Fliken Identitet
Sajtens logga, texten vid loggan eller sajtnamnet, länkarna i
sidhuvudet och i dess översta rad, GitHub-länken och sidfotens text.

- **Loggan laddas upp** direkt i fältet: png, jpg, gif, webp eller svg,
  högst 5 MB. Den hamnar i sajtens egen mapp och syns bara i den här
  sajten, också på inloggningssidan när sajten är stängd. *Ta bort bild*
  tar bort loggan ur inställningen; filen ligger kvar på servern.
- **Loggan för mörkt läge** (*Logo (dark mode)*) laddas upp på samma
  sätt, till exempel en ljus version av loggan. Den visas i mörkt läge i
  stället för loggan. Utan den är loggan samma i båda lägena.
- **Utan egen logga** visar sajten sin presets logga, om preseten har
  en. Annars står sajtnamnet där.
- **I utskriften** står loggan uppe till vänster, alltid den ljusa.
- **Länkarna i sidhuvudet** ändras rad för rad: *Lägg till rad*, pilarna
  flyttar en rad, papperskorgen tar bort den. *Show as* gör en länk till
  en knapp (*Button*) eller en konturknapp (*Outline button*). Knappens
  form och färger kommer från sajtens preset. Länkarna, också knapparna,
  syns inte på en smal mobilskärm.
- **Länkarna i sidhuvudets översta rad** (*Top row links*) syns där
  sajtens preset slår på raden. En länk har en text, en adress (en sökväg
  på servern som `/om/`, eller en adress som börjar med `https://`) och
  en valfri ikon (ett namn från lucide.dev, till exempel `globe`). På en
  mobilskärm står de sist i menyn.
- Sidfotens text kan innehålla `{year}`, som blir årtalet.

#### Fliken Övriga inställningar (super-admin)
I en sajt som inte är grundsajten ser super-admin också sajtens övriga
inställningar, till exempel sökningen och om redigeringen och
Site-Admin är på i sajten. Värden sajten inte satt själv ärvs från
grundsajten (*Ärvt från Alla sajter*).

> [!WARNING]
> *Enable frontend editing* och *Show Site-Admin* stänger något:
> redigeringen i sajten, eller sajtens Site-Admin med det här
> formuläret. Du måste kryssa i *Jag förstår* innan du kan spara.
> Redigeringen slår du på igen här. Site-Admin slår du på igen i
> sajtens Admin, under Themes → Groovy Docs → Editing.

#### Grundsajten
På grundsajten finns inte fliken *Övriga inställningar*. Grundsajtens övriga
inställningar är inställningarna för alla sajter: de gäller varje sajt
som inte satt ett eget värde. Super-admin ändrar dem i **System-Admin** →
*Temainställningar* (se [Temainställningar](https://groovy.simplo.dev/handbok/utseende/installningar)).
Rutan överst i *Inställningar* säger det, med en länk dit.

- **Med flera sajter är preset, funktioner och identitet varje sajts
  egna.** En sajt får aldrig grundsajtens värde, och en ändring på
  grundsajten når inga andra sajter.
- Samma inställningar finns i sajtens Admin, för super-admin.

### Site: titel, lås och borttagning
**Site-Admin** → *Site* finns i en installation med flera sajter, i varje
sajt. I en vanlig sajt ändrar super-admin titeln i Admin.

- **Titel** och **Beskrivning** är det som står om sajten i sajtväljaren
  och i listan över sajterna. Titeln kan inte lämnas tom. **Spara** sparar.
- **Taggar** är sajtens gemensamma taggar. Sajtväljaren grupperar sajterna
  per tagg (se [Taggar → Taggar på sajter](https://groovy.simplo.dev/handbok/skriva/taggar)).
- **Lås** gör sajten till ett arkiv, och **Lås upp** öppnar den igen (se
  Låst sajt, nedan).
- **Begär borttagning** ber super-admin ta bort sajten:
  1. Kryssa i att du vill ha sajten borttagen, med alla sidor och filer.
  2. Välj **Begär borttagning** och bekräfta.

  Sajten fungerar som förut tills super-admin tar bort den. Inget mejl
  skickas: begäran syns i sajtregistret. Avsnittet visar vem som begärde
  och när. **Dra tillbaka begäran** tar tillbaka begäran. Det kan varje
  site-admin i sajten göra, inte bara den som begärde. Grundsajten kan
  inte tas bort.

### Med flera sajter: roll per sajt
Rollen är en grupp. Varje sajt har två grupper, som skapas av systemet när
sajten skapas:

- `<sajt>--editors` för editors;
- `<sajt>--site-admins` för site-admins.

Grundsajtens heter `editors` och `site-admins`. Den som är med i en av
grupperna har rollen i den sajten. Avsnittet *Members* ordnar både
kontot och gruppen (se [Medlemmar och grupper](https://groovy.simplo.dev/handbok/atkomst/medlemmar)). För hand,
från `public/`:

```bash
php bin/plugin mail-auth add anna@example.com --site produkt-c --group editors --name "Anna Andersson"
php bin/plugin mail-auth add bo@example.com --site produkt-c --group site-admins --name "Bo B"
```

Har personen redan ett konto: lägg till gruppen på kontot i Admin
(Accounts → Users).

- **Bara i de sajter där kontot står i gruppen.** Samma person kan vara
  editor i flera sajter och member i andra.
- **En sajt utan någon i grupperna redigeras bara av system-admin
  och super-admin**, också grundsajten.
- **En sajt utan site-admin** sköts av system-admin och
  super-admin tills någon utses. Dess editors kan skriva, men inte
  ändra vem som läser eller vilka som är med.
- **Den som skapar en sajt** läggs i dess grupp för site-admins.
- **Exempel, en förening:** den publika sajten är grundsajten och
  medlemswebben en sajt. Kansliets konton står i båda sajternas grupper,
  så de redigerar båda; en editor som bara står i medlemswebbens grupp
  når inte den publika sajten.
- **Ändringar gäller direkt:** tar du kontot ur gruppen gäller det vid
  nästa sidvisning.
- **Grupperna behöver inga rättigheter i Admin.** Rättigheterna
  räknas fram för varje sajt. Andra grupper kan inte ge rätt att ändra
  sidor, och ett e-postkonto med egna rättigheter till API:t stoppas.
  Hälsokontrollen säger till, och varnar också om någon i en sajts grupp
  inte kan arbeta där (till exempel ett avstängt konto).
- **Grupperna följer sajten.** Byter sajten namn byter de namn. Tas
  sajten bort står de kvar men ger ingenting, tills sajten återställs.
- **Äldre sajter listade sina editors i `site-meta.yaml`.** Sådana listor
  gäller inte. Så länge någon sajt har en kvar ger grundsajtens två
  grupper ingenting, och *Members* och registret nekar att ge en roll på
  grundsajten med en förklaring. Super-admin flyttar listorna till
  grupperna med `php bin/plugin mail-auth move-roles --apply` från
  `public/`. Den som stod i en lista utan konto tappar rollen: bjud in
  hen i *Members*.
- **Det en editor inte når:** Admin, andra sajter, sajtens gemensamma
  mediamapp, inställningar och konton.

### I en vanlig sajt
Utan flera sajter är rollen samma grupper, `editors` och `site-admins`,
men de behöver sina rättigheter i Admin. Ge båda grupperna rätten att läsa
och ändra sidor och media (Accounts → Groups, `api.access`, `api.pages`
och `api.media`), och lägg kontona i dem. Avsnittet *Members* flyttar
sedan personer mellan grupperna. Finns ingen grupp `site-admins` är det
bara super-admin som har site-adminens avsnitt i Site-Admin.

### Låst sajt
En sajt kan låsas, till exempel en gammal dokumentation som ska stå kvar
som arkiv. I en låst sajt kan editors inte ändra sidor eller filer:
de ser en rad överst, *Sajten är låst …*, menyn **⋮** har inga val
som ändrar sidor, och papperskorgen går bara att titta i. Vem som får läsa sajten,
dess medlemmar och dess inställningar kan sajtens site-admin fortfarande ändra. Super-admin
och system-admin kan ändra allt, för att rätta något, och
ser en rad om att sajten är låst för editors. Läsarna märker
ingenting.

Sajtens site-admin låser och låser upp sajten i **Site-Admin** → *Site*.
En site-admin som vill ändra en sida i en låst sajt låser först upp den.
System-admin gör det också i sajtregistret: **System-Admin** i
sidhuvudet → *Sites*, **Ändra** vid sajten, kryssrutan **Låst** (se
[Skapa en sajt](https://groovy.simplo.dev/handbok/kom-igang/skapa-en-sajt)). Det går också för hand:
`locked: true` i sajtens `site-meta.yaml`. Låset gäller också konton som
har fått rätt att ändra sidor på annat sätt, till exempel i Admin
(Accounts → Groups).

### Editors och sajtens regel
Den som får redigera sajten får alltid läsa den, också när sajten bara är
öppen för vissa grupper (se [Ã
tkomst](..)), och alla sidor i den, också
sidor med egna regler. Det gäller bara sajten man är editor för: i en
annan sajt läser editorn som alla andra.

## Medlemmar och grupper

För site-admin: bjud in medlemmar, utse editors och site-admins och skapa grupper, direkt på sajten.

Som site-admin för en sajt hanterar du själv vem som är med i sajtens
grupper och vem som är editor och site-admin. Det görs på sajten, inte i
Admin: öppna **Site-Admin** i sidhuvudet och välj *Members*. Avsnittet
finns när frontend-redigering är påslagen och inloggning med e-post
(`mail-auth`) är installerad. Det finns för sajtens site-admins, för
system-admin och för super-admin. En editor ser det inte.

Avsnittet visar sajtens grupper, medlemmarna (alla som är med i någon av
sajtens grupper, och alla som har en roll i sajten) och vilka grupper var
och en är med i. Varje grupp är en knapp som är på eller av. Rollerna
**Editor** och **Site-admin** är också knappar: en person har en av dem,
eller ingen.

### Bjuda in någon
1. Skriv adressen under *Lägg till en medlem* (och gärna namnet, om personen är
   ny).
2. Välj en eller flera grupper, eller en roll (**Editor** eller
   **Site-admin**), eller båda.
3. Klicka **Lägg till**.

- **Saknar adressen konto skapas ett.** Personen får ett mejl som
  välkomnar och talar om hur man loggar in: mejlet länkar till sajtens
  inloggningssida, där man väljer *Logga in med länk* och får en
  inloggningslänk. Det finns inget lösenord.
- **Har adressen redan ett konto**, till exempel från en annan sajt, läggs
  det i grupperna här och personen får samma mejl, med länk till den här
  sajten. Är personen redan med i allt du valt händer ingenting och inget
  mejl skickas.
- **Vissa adresser kan inte ändras här**, bland annat super-adminers.
  Då säger avsnittet det; be super-admin.
- Du kan bara bjuda in ett begränsat antal personer per timme. Blir det
  för många säger avsnittet till; vänta en stund.
- Går inga mejl att skicka (sajten saknar fast adress eller avsändare)
  kan du inte bjuda in någon. Avsnittet säger det; be super-admin.

### Ändra och ta bort
- **Klicka på en grupp** vid en medlem för att lägga till eller ta bort
  den gruppen. Det sparas direkt. Inget mejl skickas.
- **Ta bort** (ikonen till höger) tar personen ur sajtens grupper och tar
  bort rollen här. Kontot finns kvar, och personen är fortfarande med i
  andra sajters grupper. Bara super-admin kan radera konton.

### Editors och site-admins
- **Editor** gör personen till editor för den här sajten: hen skriver,
  flyttar och raderar sidor. **Site-admin** gör personen till site-admin:
  hen är editor och bestämmer dessutom vem som läser sajten och vilka
  som är med (se [Editors och site-admins](https://groovy.simplo.dev/handbok/atkomst/redaktorer) och
  [Roller](https://groovy.simplo.dev/handbok/atkomst/roller)).
- Med flera sajter gäller rollen bara den här sajten. Samma person kan ha
  en roll i en sajt och vara member i en annan.
- Klicka på den andra rollen för att byta. Klicka på den valda rollen för
  att ta bort den.
- **Sajten har alltid minst en site-admin.** Den sista site-adminen kan
  inte tas bort eller göras till editor, inte heller av sig själv. Utse
  någon annan först. Byter du din egen roll laddas sidan om.
- Rollen är en grupp i sajten (se
  [Editors och site-admins](https://groovy.simplo.dev/handbok/atkomst/redaktorer)). På grundsajten kan rollerna
  inte ges så länge en äldre sajt har kvar en lista över editors i sin
  `site-meta.yaml`; avsnittet säger det. Be super-admin flytta listorna.

### Domäner
Läser hela e-postdomäner sajten (se [Ã
tkomst](..)) står de under
**Domäner**. De går inte att ändra här: listan sköts utanför sajten.

### Skapa en grupp
På grundsajten i en installation med flera sajter skapas grupperna inte
här (se rutan längst ned). I alla andra sajter: skriv ett namn under *Ny grupp* och klicka **Skapa**: små bokstäver,
siffror, `_` och `-` (aldrig två `-` i rad och inte `-` först eller sist;
namnet `editors` går inte). Med flera sajter får gruppen sajtens namn först,
till exempel `medlem--styrelsen` i sajten `medlem`; det visas framför
fältet. Gruppen ger bara rätten att läsa det gruppen släpps in till:
sajten (om sajtens regel är *Medlemmar i grupperna nedan*) eller skyddade
sidor. Det ställer du in under *Ã
tkomst* och på sidan (se [Ã
tkomst](..)).

### Byta etikett och ta bort en grupp
Under **Grupper**, längst ned i avsnittet, står sajtens grupper.
- **Pennan** ger gruppen en ny etikett, det namn som visas på knapparna.
  Själva gruppnamnet (till exempel `medlem--styrelsen`) ändras aldrig:
  det är det sajtens regel och skyddade sidor pekar på.
- **Papperskorgen** tar bort gruppen. Det går bara när ingenting använder
  den: är gruppen vald i en sajts regel (*Vem som får läsa sajten*) eller i
  en sidas åtkomst, på den här sajten eller någon annan, får du veta var,
  och gruppen står kvar. Ta bort den där först. Det gäller också en regel
  som just nu står på *Alla* eller *Inloggade besökare*: gruppen ligger kvar i
  regeln fast avsnittet inte visar den då. Välj gruppläget, ta ur gruppen
  och byt tillbaka. När gruppen tas bort tas medlemmarna ur den; deras
  konton finns kvar.
- Sidor i papperskorgen och i sidhistoriken räknas inte. Ã
terställer du
  en sida som pekade på en borttagen grupp blir den stängd för alla utom
  editors (ingen är med i gruppen): ändra sidans åtkomst eller skapa
  gruppen igen.

Rollgrupperna (editors och site-admins) och grupper som ger något annat
än läsrätt syns inte bland grupperna här. Rollerna ändras med knapparna
**Editor** och **Site-admin**.

> [!NOTE]
> Du ser och ändrar bara din egen sajts grupper. Grupper utan sajtnamn
> först är gemensamma för alla sajter. De skapas, får ny etikett och tas
> bort i **System-Admin** → *Reading groups*, av system-admin.
> Vem som är med i dem bestäms i grundsajtens *Members*, av
> dess site-admin. Väljer din sajt en sådan grupp i sin regel är det
> alltså de som bestämmer vem som läser.

## Från produkterna

För den som driftar: en produkt öppnar dokumentationen inloggad som kunden, eller visar en sida inbäddad.

En produkt kan öppna dokumentationen på två sätt:

- **Med en länk** som öppnar dokumentationen i webbläsaren, inloggad som
  kunden. Läsaren behöver inget mejl och inget lösenord.
- **Inbäddad**: en sida, eller en del av en sida, visas i en ram inne i
  produkten. Där visas det som alla får läsa, och i sajter där det är
  påslaget också det kunden får läsa.

Båda är avstängda från början. Den som driftar installationen slår på dem.
Kundens AI-klient kan också läsa, i sajter där det är påslaget (se
[AI-klient för kunder](#ai-klient-for-kunder)).

### Länken från produkten
#### Vad det är
Varje kund (en organisation) har ett eget konto, *kundkontot*. En produkt
som vet kundens nyckel gör en länk när användaren klickar. Länken loggar
in kundkontot och öppnar rätt sida. Den gäller i två minuter och bara en
gång, och den syns inte i webbläsarens adressfält efteråt.

Kundkontot läser samma sajter som kundens e-postdomäner i domänregistret
(se [Ã
tkomst](..), punkten *Domänregistret*). Det kan inte redigera något.

#### Så slår du på det
1. Sätt `product_access: {enabled: true}` i
   `user/config/plugins/mail-auth.yaml` på servern.
2. Skapa kunden, från webbroten (`public/`):

   ```bash
   php bin/plugin mail-auth customer add kund-ab --domain example.com
   ```

   Kommandot skriver ut kundens nyckel **en gång**. Lämna den till den som
   driftar produkten, på ett säkert sätt. Den visas aldrig igen.
3. Se till att domänen står för rätt sajter i domänregistret, och att de
   sajterna har *Domänregistret* under *Vem som får läsa sajten*.

#### Nycklar och spärr
| Vad | Kommando |
|---|---|
| Ny nyckel; den gamla gäller 7 dagar till | `php bin/plugin mail-auth customer rotate kund-ab` |
| Ny nyckel; den gamla slutar gälla direkt | `php bin/plugin mail-auth customer rotate kund-ab --now` |
| Spärra en nyckel direkt | `php bin/plugin mail-auth customer revoke-key kund-ab k1` |
| Stäng av kunden (alla inloggade loggas ut) | `php bin/plugin mail-auth customer disable kund-ab` |
| Slå på kunden igen | `php bin/plugin mail-auth customer enable kund-ab` |
| Lista kunder och nycklar (aldrig själva nyckeln) | `php bin/plugin mail-auth customer list` |

- **En läckt nyckel:** spärra den, eller byt med `--now`. Den som hade
  nyckeln kunde logga in som hela kunden.
- **Felaktiga länkar** från samma adress spärras en stund efter 20 försök.
- **Loggen** (`logs/grav.log`) har en rad för varje inloggning och varje
  avslag, utan nycklar.
- **Hälsokontrollen** säger till om en nyckel inte har använts på länge
  eller borde ha spärrats.

#### För den som bygger produkten
Hur länken räknas fram står i pluginet `mail-auth`, i dess `README.md` →
*The link (for whoever builds a product)*. Nyckeln ska ligga i produktens
konfiguration på servern, aldrig i webbläsaren.

### AI-klient för kunder
#### Vad det är
En kund kan koppla sin AI-klient till dokumentationen, till exempel för
att låta den söka svar om produkten. Klienten loggar in som kundkontot.
Den får bara läsa: söka, lista sidor och läsa sidor. Vad kunden gör står
i [AI-klient](https://groovy.simplo.dev/handbok/atkomst/ai-klient#om-du-ar-kund).

- **Per sajt, av från början.** Du väljer vilka sajter en kunds klient
  får läsa. Klienten ser ändå bara det kundkontot får läsa.
- **Kunden börjar i produkten.** Kunden öppnar dokumentationen med
  produktens länk, och tillåter sedan klienten i samma webbläsare.
- **Bunden till nyckeln.** Spärrar du nyckeln eller stänger av kunden,
  slutar klienten fungera vid nästa anrop. Byter du nyckel med överlapp,
  slutar den när den gamla nyckeln slutar gälla.
- **Skälet:** kundens organisation delar ett konto, och klienter hämtar
  mycket. Därför bara läsning, bara valda sajter och en lägre spärr.

#### Så slår du på det
Länken från produkten och AI-klienter (se [AI-klient](https://groovy.simplo.dev/handbok/atkomst/ai-klient),
*För den som driftar*) måste vara påslagna. Sedan, för varje sajt:

1. Öppna sajtens Admin: `/<sajt>/admin`, eller `/admin` för
   grundsajten.
2. Välj Plugins, *Mail Auth*.
3. Slå på **AI clients of customers in this site** och spara.

- Inställningen gäller bara den sajten. En annan sajt ärver den aldrig,
  inte heller från grundsajten.
- **Calls a minute for a customer's AI client** är spärren för en kunds
  anslutning, 30 anrop i minuten från början. Den kan bara sänka
  spärren för alla, aldrig höja den.
- **Loggen** får en rad när en kund kopplar in en klient: kunden,
  nyckelns id och sajten.

### Inbäddning
#### Vad som visas
Produkten visar sidan med adressen `<sidan>?embed=1` i en ram (iframe).
En del av sidan: lägg till `&section=<rubrikens id>`. Id:t är det som står
efter `#` när du klickar på rubriken i innehållsförteckningen.

- Bara sidan: ingen meny, ingen sidfot och inga knappar för att redigera.
- Länkar till andra sidor öppnas i ramen. Länkar till andra webbplatser
  och till filer öppnas i en ny flik.
- **Utan inloggning visas bara det som alla får läsa.** En skyddad sida
  visar i stället en knapp, *Öppna dokumentationen*, som öppnar sidan i
  en ny flik där läsaren kan logga in. Vill produkten visa skyddade sidor
  i ramen, se [Skyddade sidor i ramen](#skyddade-sidor-i-ramen).

#### Vilka produkter som får visa sidorna
Webbläsaren visar sidorna bara i ramar på de adresser som står i listan.
Listan gäller hela installationen; en sajt kan inte lägga till något
själv.

1. Öppna grundsajtens Admin: Themes, temat, fliken *Embed mode*.
2. Slå på **Embed mode**.
3. Skriv produkternas adresser i **Origins that may frame the embed
   view**, med kommatecken emellan: `https://app.example.com,
   https://*.example.org`. Bara schema, värd och eventuellt port, ingen
   sökväg. `*.` tar med alla underdomäner.
4. Spara.

- Utan listan får ingen annan webbplats visa sidorna i en ram.
- Är det avstängt ändras ingenting: sidorna skickar inga nya headers, och
  `?embed=1` är en vanlig sida.
- Hälsokontrollen säger till om listan är tom eller har en adress som
  inte går att använda.

#### Skyddade sidor i ramen
**Vad:** ramen visar också de sidor kunden får läsa, med bilder och
filer. Samma sidor som kundkontot läser med länken ovan.

**Hur det går till:** produkten öppnar ramen med sin länk, gjord för
ramen. Ramen får då en egen kaka som bara gäller i den produktens ram.
Kakan loggar inte in någon i dokumentationen. Den kan bara visa sidor i
ramen, aldrig ändra något.

**När ramen visar knappen i stället:**
- sajten har inte slagit på det;
- kunden är avstängd, eller nyckeln är spärrad eller har slutat gälla.
  Det gäller direkt, också i en ram som redan är öppen;
- ingen har använt ramen på en stund (samma tid som en inloggning), eller
  det har gått 8 timmar. Produkten öppnar ramen igen med en ny länk;
- webbläsaren tar inte emot kakan. Safari med strikta inställningar gör
  det inte.

**Filer** på en skyddad sida öppnas i ramen, inte i en ny flik. I en ny
flik finns inte kakan.

**Så slår du på det:** länken från produkten och inbäddningen (ovan)
måste vara påslagna. Sedan, för varje sajt:

1. Öppna sajtens Admin: `/<sajt>/admin`, eller `/admin` för
   grundsajten.
2. Välj Plugins, *Mail Auth*.
3. Slå på **Protected pages in the products' frames** och spara.

- Inställningen gäller bara den sajten. En annan sajt ärver den aldrig,
  inte heller från grundsajten.
- **Loggen** får en rad varje gång en ram får en kaka, och när en kaka
  slutar gälla för att kunden eller nyckeln är spärrad.
- **För den som bygger produkten:** länken för ramen står i pluginets
  `README.md` → *Embedded pages*.

## AI-klient

Koppla en AI-klient, till exempel Claude Code, till dokumentationen för att läsa och söka i sajterna som dig själv. Är du editor kan klienten också ändra sidor, är du site-admin sajtens inställningar, och är du system-admin sajterna och utseendet.

En AI-klient kan läsa och söka i sajterna åt dig. Den loggar in som du
och ser samma sidor som du ser i webbläsaren, inget mer. Är du editor i
en sajt kan den också ändra sidor och filer åt dig, med samma gränser som
när du redigerar själv (se [Om du är editor](#om-du-ar-editor)). Är du
site-admin kan den ändra sajtens inställningar (se
[Om du är site-admin](#om-du-ar-site-admin)). Är du system-admin kan den
också hjälpa dig med sajterna och utseendet (se
[Om du är system-admin](#om-du-ar-system-admin)). Ã
tkomsten ändrar den
aldrig själv: den föreslår, och du bekräftar i webbläsaren (se
[Ändra åtkomsten](#andra-atkomsten)).

Det bygger på MCP (Model Context Protocol), ett vanligt sätt för
AI-klienter att hämta information. Du kopplar in klienten en gång, och
den når alla sajter du har tillgång till (se [Adressen](#adressen)).

Allt du behöver finns i panelen **AI-assistenter** (se
[Panelen](#panelen)).

### Vad varje roll får
Alla roller utom public kan använda en AI-klient (se
[Roller](https://groovy.simplo.dev/handbok/atkomst/roller)). Hur mycket klienten får göra följer vad du får
göra i webbläsaren.

| Roll | Gäller | Vad klienten får |
|---|---|---|
| **Super-admin** | hela installationen | Allt nedan, i alla sajter, plus System-Admin → *Temainställningar*. |
| **System-admin** | hela installationen | Läsa och ändra sidor i alla sajter, registret (skapa och ändra sajter), presets, den gemensamma tagglistan och varje sajts *Inställningar* och *Site*. Inte *Temainställningar*. |
| **Site-admin** | en sajt | Läsa och ändra sidor i sin sajt, och sajtens *Inställningar* (preset, funktioner, identitet med logga) och *Site* (titel, beskrivning, taggar, lås). |
| **Editor** | en sajt | Läsa, söka, skapa, ändra, flytta och publicera sidor och bilagor i sin sajt, och lägga i och ta ur papperskorgen. |
| **Member** | sajter där läsregeln släpper in kontot | Bara läsa och söka i de sidor kontot får läsa. |
| **Public** | sajter öppna för alla | Inget. En AI-klient kräver ett konto. |

- **Två slags member:** ett konto från domänregistret läser som en
  vanlig member. Ett kundkonto, som loggar in från en produkt, får bara
  läsa, och bara i sajter där kunders AI-klienter är påslagna. Det har
  ingen panel och inga personliga nycklar (se [Om du är kund](#om-du-ar-kund)).
- **Ã
tkomsten bara som förslag:** läsregeln, medlemmarna, läsgrupperna
  och sidornas åtkomst ändras bara när du bekräftar klientens förslag i
  webbläsaren (se [Ändra åtkomsten](#andra-atkomsten)).
- **Det ingen roll får göra via klienten:** öppna en sajt eller sida för
  alla, gallra domänkonton, ta bort, byta namn på eller återställa en
  sajt, radera något för gott eller ta bort en preset. Det gör du i
  webbläsaren.
- **Panelen och personliga nycklar** har alla inloggade utom kundkonton.
  Ett demokonto ser panelen men kan inte skapa nycklar.

### Vad klienten kan
| Verktyg | Vad det gör |
|---|---|
| `whoami` | Vem du är inloggad som, och din högsta roll i någon sajt. |
| `list_sites` | Sajterna du får läsa, med din roll i varje. |
| `list_pages` | Sidorna i en sajt, eller i en del av den, i menyns ordning. |
| `get_page` | En sida som Markdown: titel, text och länkar till sidorna runt den. |
| `search` | Söker i en sajt, som sökrutan. |

- **Klienten väljer sajten.** Ett verktyg som gäller en sajt får sajtens
  namn från `list_sites`. Grundsajten heter `/`. Du behöver bara säga
  vilken sajt du menar, eller låta klienten ta reda på det.
- **En sajt du inte får läsa** ger samma svar som en sajt som inte finns.

- **Bara det du får läsa.** Skyddade sidor du inte får läsa syns inte, och
  ger samma fel som en sida som inte finns.
- **Bara publicerad text.** Utkast och opublicerade sidor syns inte, inte
  heller för en editor.
- **Bara den aktuella versionen** i en sajt med versioner, om klienten
  inte ber om alla.
- **En sajt i taget.** Får du söka över flera sajter i sökrutan (se
  [Sökning över sajter](https://groovy.simplo.dev/handbok/drift/sokning-over-sajter)), säger `search`
  vilka de andra sajterna är. Klienten söker sedan i dem en i taget.

### Om du är editor
Är du editor i en sajt kan klienten också göra det du gör i
redigeringsläget där:

| Vad | Hur |
|---|---|
| Skapa en sida | Hamnar sist under sidan du väljer. |
| Ändra en sida | Titel, text och sidans inställningar. |
| Publicera | Med utkast påslagna blir en ändring ett utkast. Klienten visar först vad som publiceras och frågar dig om det finns varningar. |
| Flytta och kopiera | Klienten visar först vad som händer, och gör det sedan. En flytt kan ångras i en kvart. |
| Radera | Sidan eller filen går till papperskorgen, och kan läggas tillbaka. |
| Historik | Se tidigare versioner och återställ en. |
| Filer | Ladda upp, byt namn, beskriv och radera filer på en sida. |

- **Varför så:** klienten ska kunna hjälpa dig med samma saker som du gör
  själv, men inte mer.
- **Ingenting raderas för gott.** Allt som raderas hamnar i sajtens
  papperskorg och kan läggas tillbaka (se
  [Papperskorgen](https://groovy.simplo.dev/handbok/skriva/papperskorg)). Klienten kan aldrig tömma
  den.
- **Allt syns i historiken.** Varje ändring står i sidans historik med ditt
  namn och *via MCP* (se [Historik](https://groovy.simplo.dev/handbok/skriva/historik)).
- **Någon annan har ändrat sidan?** Då får klienten ett fel och läser om
  sidan innan den försöker igen. Ingen ändring skrivs över.
- **När den inte kan ändra:** i en sajt där du inte är editor, i en låst
  sajt och om redigeringen är avstängd. Då kan klienten bara läsa.

### Om du är site-admin
Är du site-admin i en sajt kan klienten också ändra det du ändrar i
sajtens Site-Admin → **Inställningar** och **Site**:

| Verktyg | Vad det gör |
|---|---|
| `get_site_settings` | Sajtens preset, funktioner (utkast, historik, versioner, taggar, sidinfo, export) och identitet (logga, texten vid den, länkarna i sidhuvudet, GitHub-länken, sidfotens text). Vad sajten sätter själv och vad den annars ärver. |
| `save_site_settings` | Ändrar dem, som **Spara** i Inställningar. |
| `upload_site_logo` | Laddar upp en ny logga. Den syns först när klienten sparar den med `save_site_settings`. |
| `get_site_info` | Sajtens titel, beskrivning, taggar och om den är låst. |
| `update_site_info` | Ändrar dem, eller låser och låser upp sajten. |

- **Samma gränser som i panelen.** Ett värde som inte är tillåtet nekas,
  med skälet. Har någon annan ändrat inställningarna sedan klienten läste
  dem, läser den om dem först. Ingen ändring skrivs över.
- **Att stänga av redigeringen eller Site-Admin** kräver att klienten
  bekräftar det uttryckligen.
- **Vem som får läsa eller redigera** ändras bara som förslag som du
  bekräftar (se [Ändra åtkomsten](#andra-atkomsten)).
- **Inte att begära att sajten tas bort.**

### Om du är system-admin
**System-admin** (och super-admin) kan låta klienten sköta
sajterna, som i [registret](https://groovy.simplo.dev/handbok/kom-igang/skapa-en-sajt#registret).
Verktygen gäller hela installationen, inte en sajt. Det går också när
grundsajten är ensam.

| Verktyg | Vad det gör |
|---|---|
| `list_sites_admin` | Alla sajter: titel, beskrivning, vilka som får läsa, preset, taggar, editors och om sajten är låst. |
| `create_site` | En ny sajt, med namn, titel, beskrivning och den första editorn. Finns när installationen är förberedd för flera sajter, som **Ny sajt** i registret. |
| `update_site` | Ändrar en sajts titel, beskrivning, editors, taggar och preset, eller låser och låser upp den. |

- **Samma gränser som i registret.** Nya editors får ett mejl för att
  logga in. Högst tio läggs till åt gången, och bara ett visst antal i
  timmen. En borttagen editor förlorar sajten direkt.
- **Klienten kan inte ta bort, byta namn på eller återställa en sajt.**
  Det gör super-admin i webbläsaren, efter en granskning. Skälet: det går
  inte att ångra lika enkelt.

**System-admin och super-admin** kan också låta klienten arbeta med
presets (se [Presets](https://groovy.simplo.dev/handbok/utseende/presets)). Verktygen gäller hela
installationen. Sidorna som använder en preset är grundsajtens.
`preview_url` visar en sida i den sajt du anger.

| Verktyg | Vad det gör |
|---|---|
| `get_settings_schema` | Inställningarna en preset kan ändra, med tillåtna värden. |
| `list_presets` | Alla presets, vilka sidor i grundsajten och vilka sajter som använder dem, och vilka som har för låg kontrast. |
| `get_preset` | Vad en preset ändrar. |
| `save_preset` | Sparar en ny preset, eller ersätter en. Svaret säger vilka sidor och sajter som ändrar utseende, och om kontrasten räcker. En preset som ersätts sparas först som den var (`backup-<datum>`). |
| `check_preset` | Prövar kontrasten i ljust och mörkt läge, och om preseten har typsnitt som saknas eller inställningar som inte används. Också innan något sparas. |
| `list_fonts` | Typsnitten som presets kan välja. |
| `preview_url` | En adress där du ser en sida i en sajt med preseten, inloggad. Ingen annan ser den. Fungerar i sajter där du får redigera sidor. |

- **Exempel:** be klienten ta fram en preset som liknar en webbplats du
  tycker om, eller en bild, till exempel en skärmbild eller en grafisk
  profil. Klienten tittar på förebilden själv, föreslår färger och
  typsnitt, sparar en ny preset och ger dig adressen för att se den. Den
  jämför och justerar tills du är nöjd. Välj den sedan för en sajt eller
  en del av en sajt.
- **Kontrasten är ett krav.** Klienten prövar varje förslag och rättar
  det som har för låg kontrast innan den föreslår att preseten används
  (se [Presets](https://groovy.simplo.dev/handbok/utseende/presets#kontrast)).
- **Klienten kan inte radera en preset,** och inte ändra *Default*. Radera
  gör du i System-Admin → *Presets*.

Klienten kan också ändra resten av System-Admin. Ã
tkomsten, också de
delade läsgrupperna, ändras bara som förslag (se
[Ändra åtkomsten](#andra-atkomsten)):

| Verktyg | Vad det gör |
|---|---|
| `get_theme_settings`, `save_theme_settings` | System-Admin → **Temainställningar**: inställningarna för hela installationen, och det alla sajter ärver om de inte sätter egna. Bara super-admin. |
| `add_font` | Lägger till ett typsnitt från Google Fonts, så att alla presets kan välja det. Servern laddar ner det först; läsarna hämtar aldrig något från Google. Bara super-admin. |
| `get_common_tags`, `save_common_tags` | System-Admin → **Taggar**: taggarna alla sajter delar. Svaret har listan som den var, så att en ändring kan läggas tillbaka. |

- **Samma gränser som i panelen.** Utseendet ändras i presets, och en
  sajts egna val i dess Site-Admin. Klienten får samma fel som panelen
  ger om den försöker.
- **Att stänga av System-Admin** kräver att klienten bekräftar det. Då
  försvinner också de här verktygen. Slå på det igen i Admin.

### Ändra åtkomsten
Klienten kan läsa åtkomsten: sajtens läsregel, *Members*, läsgrupperna
och vem som får läsa en sida. Den ändrar den aldrig själv. Den gör ett
förslag, och du bekräftar det i webbläsaren.

| Roll | Läsa | Föreslå |
|---|---|---|
| **Editor** | Vem som får läsa en sida. | Inget. |
| **Site-admin** | Sajtens läsregel, *Members* och sajtens läsgrupper, och sidornas åtkomst. | Ändringar av allt det, i sin sajt. |
| **System-admin** | Samma, i alla sajter, och de delade läsgrupperna. | Samma, i alla sajter, och de delade läsgrupperna. |
| **Super-admin** | Allt ovan, och *Domain accounts*. | Som system-admin. Aldrig att gallra domänkonton. |

Så går det till:
1. Be klienten om ändringen, till exempel *bjud in anna@example.com som
   editor i sajten*.
2. Klienten svarar med en länk.
3. Öppna länken i webbläsaren, inloggad som du. Sidan visar ändringen,
   före och efter, och vad den betyder för vem som når vad.
4. Klicka **Bekräfta** inom 15 minuter. **Avvisa** tar bort förslaget utan
   att något ändras.

- **Bara du kan bekräfta.** Det måste vara samma konto som klienten är
  inloggad som. Någon annan kan inte använda länken.
- **15 minuter, en gång.** Sedan gäller länken inte. Be klienten föreslå
  igen.
- **Din roll prövas när du bekräftar.** Har du förlorat rollen sedan
  förslaget, nekas det.
- **Allt bekräftas,** också en ändring som bara stänger.
- **En inbjudan:** mejlet till den nya personen går först när du har
  bekräftat.
- **En ändring som inte ändrar något** nekas direkt. Högst 20 förslag
  kan vänta på dig åt gången.
- **En personlig nyckel** föreslår bara med **Läsa och ändra**. Med
  **Bara läsa** kan klienten bara läsa åtkomsten.
- **Aldrig via klienten, inte heller som förslag:** att öppna en sajt
  eller en sida för alla, och att gallra domänkonton. Det gör du själv i
  panelen.
- **Varför så:** klienten kan påverkas av text på sidorna den läser. Med
  förslag kan den som mest föreslå. Ändringen gör du, när du ser den.

### Vem kan koppla in en klient
Alla med ett eget konto: members, editors, system-admin och
super-admin.

En kund som läser dokumentationen från en produkt kan också, men bara för
att läsa och bara i sajter där det är påslaget (se
[Om du är kund](#om-du-ar-kund)).

Den som inte får läsa en sajt kan ändå ansluta. Klienten ser då bara de
sajter hen får läsa.

### Om du är kund
Öppnar du dokumentationen från en produkt, är du inloggad med kundens
konto. Det delas av alla i din organisation.

1. **Öppna dokumentationen från produkten först**, med länken i
   produkten. Då är du inloggad i webbläsaren.
2. Koppla in klienten som nedan.
3. Klicka **Tillåt** i samma webbläsare. Det går bara om minst en sajt du
   läser låter kunder koppla in en klient.

- **Bara läsa:** klienten får `whoami`, `list_sites`, `list_pages`,
  `get_page` och `search`, aldrig något som ändrar.
- **Bara vissa sajter:** den som driftar väljer vilka sajter en kunds
  klient får läsa (se [Från produkterna](https://groovy.simplo.dev/handbok/atkomst/fran-produkterna#ai-klient-for-kunder)).
  `list_sites` visar bara dem. En annan sajt svarar som om den inte
  fanns.
- **Högst 30 anrop i minuten** per anslutning.
- **Anslutningen slutar** när produktens nyckel byts ut eller spärras,
  eller när kunden stängs av. Öppna då dokumentationen från produkten
  igen och koppla in klienten på nytt.
- **Alla i organisationen** ser varandras anslutningar på sidan i
  [Se och avsluta dina anslutningar](#se-och-avsluta-dina-anslutningar),
  och kan avsluta dem.

### Adressen
Dokumentationen har en MCP-adress för alla sajter:
`https://<värd>/mcp`.

- **En anslutning för alla sajter.** När du klickar **Tillåt** gäller det
  alla sajter ditt konto har tillgång till.
- **I varje sajt får klienten det du får där.** Är du editor i en sajt och
  läsare i en annan, kan klienten ändra i den första och bara läsa i den
  andra.

### Panelen
Logga in och klicka på robotikonen uppe till höger, **AI-assistenter**.
Panelen öppnas från höger. Den är likadan i alla sajter.

Panelen visar:
- **Anslut en AI-assistent:** adressen och hur du kopplar in varje
  program. Knappen bredvid adressen och varje kommando kopierar det.
- **Lär din AI-assistent:** dina skills, som kommandon för Claude
  Code och som filer att ladda ner (se [Skills för klienten](#skills-for-klienten)).
- **Anslutna assistenter:** programmen du har kopplat in. **Koppla från**
  avslutar en anslutning.
- **Nycklar för andra program:** dina personliga nycklar (se
  [Personlig nyckel](#personlig-nyckel)).

En kund har ingen panel (se [Om du är kund](#om-du-ar-kund)).

### Så kopplar du in Claude Code
Kommandona står också i panelen, färdiga att kopiera.

1. Lägg till dokumentationen. Välj ett namn (här `docs`):

   ```bash
   claude mcp add --transport http docs https://<värd>/mcp
   ```

2. Logga in:

   ```bash
   claude mcp login docs
   ```

   Eller skriv `/mcp` i Claude Code och välj servern.
3. Webbläsaren öppnar en sida som frågar om klienten får ansluta. Logga in
   som vanligt om den ber om det. Sidan säger att anslutningen gäller
   alla sajter ditt konto har tillgång till. Klicka **Tillåt**.
4. Tillbaka i Claude Code: be den till exempel söka efter något i en
   sajt.

Du behöver inte ange något klient-id. Claude Code talar själv om vilket
program det är.

### Andra klienter
Claude Desktop, claude.ai, Cursor, VS Code och liknande program ansluter
på samma sätt: lägg till en MCP-server (ibland kallad *connector*) med
adressen `https://<värd>/mcp`, och klicka **Tillåt** när webbläsaren
frågar. Programmet måste kunna ansluta till en MCP-server över HTTP med
inloggning (OAuth).

Programmen ansluter från olika ställen:

| Program | Ansluter från | Om dokumentationen bara nås i ert nät |
|---|---|---|
| Claude Code, Cursor, VS Code och liknande | din dator | Fungerar, om datorn når dokumentationen. |
| claude.ai, och en connector i Claude Desktop | Anthropics servrar | Fungerar inte. |
| Claude Desktop med dokumentationens tillägg | din dator | Fungerar (se [Om dokumentationen bara nås i ert nät](#om-dokumentationen-bara-nas-i-ert-nat)). |

**Ett program som installationen inte känner** märks på sidan där du
klickar **Tillåt**:
- *(self-registered)*: programmet har registrerat sig själv och valt sitt
  namn själv;
- *(from claude.ai)* eller en annan adress: namnet kommer från ett
  dokument på den adressen.

Sidan visar också vart svaret går. Står det en adress på din egen dator
(`localhost` eller `127.0.0.1`), tar ett program på datorn emot svaret.
Klicka **Tillåt** bara om du nyss startade anslutningen själv.

- **Varför så:** vem som helst kan ge ett program ett namn. Det som
  skyddar dig är att du själv godkänner varje anslutning, inloggad.

Kan programmet inte registrera sig själv, men låter dig ange ett
klient-id, går klient-id `local` för program på den egna datorn. I Claude
Code: `--client-id local --callback-port <port>`.

### Om dokumentationen bara nås i ert nät
En del installationer nås bara i företagets nät eller via VPN. Då står
det i panelen, under **Anslut en AI-assistent**.

- **En connector i Claude-apparna fungerar inte.** claude.ai, och en
  connector som läggs till i Claude Desktop, ansluter från Anthropics
  servrar och inte från din dator. Servrarna når inte ert nät.
- **Claude Code, Cursor och VS Code fungerar** som vanligt. De ansluter
  från din dator.
- **Claude Desktop får ett tillägg** som körs på din dator och bara
  pratar med dokumentationen.

Så kopplar du in Claude Desktop:
1. Öppna panelen (se [Panelen](#panelen)). Skapa en nyckel under
   **Nycklar för andra program** (se [Personlig nyckel](#personlig-nyckel)).
   Välj **Läsa och ändra** om assistenten ska ändra sidor åt dig.
2. Under **Anslut en AI-assistent** → **Claude Desktop**: klicka
   **Ladda ner tillägget**.
3. Dubbelklicka på filen, eller dra in den i Claude Desktop → *Settings* →
   *Extensions*. Klicka *Install*.
4. Klistra in nyckeln när Claude Desktop ber om den, och slå på
   tillägget.

- **Din dator måste nå dokumentationen,** till exempel via VPN. Annars
  svarar assistenten att den inte når dokumentationen.
- **Tillägget är dokumentationens eget.** Det hämtar inget från internet,
  och skickar bara till dokumentationens adress. Nyckeln sparar Claude
  Desktop skyddat på datorn.
- **Fältet för ett certifikat** fyller du bara i om din IT-support ber om
  det.
- **Nyckeln slutar gälla** efter ett år, eller när du spärrar den. Skapa
  då en ny och byt den i Claude Desktop → *Settings* → *Extensions*.
- **Tillägget gäller bara den datorn.** Det följer inte med till
  claude.ai eller mobilen.

### Skills för klienten
En skill är en kort guide som du ger din AI-klient. Med den vet klienten
hur dokumentationen är uppbyggd, vilka verktyg som finns och hur de
används säkert. Utan en skill kan klienten använda verktygen ändå, men
den måste gissa mer.

Det finns två skills:

| Skill | I panelen | Lär klienten |
|---|---|---|
| `groovy-docs-editor` | *Editing pages*, för alla som har panelen | Läsa, skriva, strukturera, publicera och återställa sidor, och hur sidorna skrivs (callouts, bilder, inbäddningar, länkar). |
| `groovy-docs-super-admin` | *Look, presets and settings*, för site-admin, system-admin och super-admin | Utseende och presets, inställningar och sajter. Den anpassar sig efter din roll. |

Panelen visar de skills din roll har nytta av, under **Lär din AI-assistent**.

**Claude Code** får skill och anslutning på en gång. Kopiera raderna
under *Claude Code* i panelen och klistra in dem i en terminal, en i
taget:

```bash
claude plugin marketplace add https://<värd>/mcp/skills/marketplace.json
claude plugin install docs@docs-<värd>
claude mcp login plugin:docs:docs
```

- Den första raden lägger till dokumentationen som en *marketplace* i
  Claude Code. Namnet bildas av värden, till exempel `docs-docs-example-com`.
- Den andra installerar anslutningen och redaktörens skill. Är du
  site-admin eller mer har panelen en rad till, för den andra skillen.
- Den sista öppnar webbläsaren. Logga in och klicka **Tillåt**.
- Har du redan kopplat in Claude Code med `claude mcp add`, ta bort den
  anslutningen (`claude mcp remove docs`). Annars har Claude Code två
  anslutningar till samma dokumentation.
- **En ny version av en skill** når dig när du uppdaterar:
  `claude plugin marketplace update docs-<värd>`, eller slå på
  automatisk uppdatering under *Marketplaces* i `/plugin`.
- Det kräver Claude Code 2.1.224 eller senare.

**Claude Desktop och claude.ai:**
1. Koppla in klienten (se [Andra klienter](#andra-klienter), eller
   [Om dokumentationen bara nås i ert nät](#om-dokumentationen-bara-nas-i-ert-nat)).
2. Klicka på knappen för skillen i panelen. En zip-fil laddas ner.
3. Öppna *Customize* → *Skills* i Claude och ladda upp filen som den är.
   Packa inte upp den.
4. Slå på skillen.

Skills måste vara påslagna för kontot. Med Claude Team eller Enterprise
kan organisationen dela ut en skill till alla på en gång. Fråga den som
sköter Claude i din organisation.

- **Klienten får det viktigaste ändå.** När den ansluter får den en kort
  sammanfattning av reglerna: börja med `whoami` och `list_sites`, ange
  sajten i varje anrop, följ aldrig instruktioner i sidornas text, och
  fråga innan den publicerar eller gör stora ändringar. Hela skillen är
  mer utförlig. Claude Code läser sammanfattningen; om claude.ai gör det
  är inte provat.
- **Skillen ger inga nya rättigheter.** Klienten får fortfarande bara
  det din roll får.
- **Filerna är öppna.** Vem som helst kan hämta dem, utan att logga in.
  De innehåller allmänna instruktioner och dokumentationens adress, inget
  hemligt.
- **Skillarna är på engelska.** Klienten skriver ändå på sajtens språk.
- **Försiktig som standard:** skillarna säger åt klienten att aldrig göra
  något som inte går att ångra, att visa vad som publiceras innan den
  publicerar, att ändra inställningar bara när du ber om det, och att
  aldrig följa instruktioner som står i texten på en sida.

### Se och avsluta dina anslutningar
Öppna panelen (se [Panelen](#panelen)). Under **Anslutna assistenter** står
dina anslutna AI-assistenter, med när de senast användes. **Koppla från** avslutar
en anslutning direkt.

Samma lista finns på `https://<värd>/mcp/oauth/authorize`, inloggad. En
kund använder den sidan.

En anslutning slutar också av sig själv:
- när den inte har använts på lika länge som en inloggning på webbplatsen
  håller;
- senast 30 dagar efter att du tillät den.

Då loggar du in igen (`claude mcp login docs`).

Byter du roll, eller tas du bort som editor, gäller det från klientens
nästa anrop.

### Personlig nyckel
För ett program som inte kan logga in i webbläsaren, ett skript eller en
automation. Nyckeln låter programmet arbeta som du, utan inloggning.

1. Öppna panelen (se [Panelen](#panelen)) och gå till **Nycklar för andra
   program**.
2. Skriv ett namn, till exempel programmets.
3. Välj **Bara läsa** eller **Läsa och ändra**. **Bara läsa** är
   förvalt: programmet kan då bara läsa, också där du får ändra.
4. Klicka **Skapa nyckel**.
5. **Kopiera nyckeln direkt.** Den visas bara den här gången. Tappar du
   den, välj **Ny nyckel** för att få en ny.
6. Ge programmet adressen och nyckeln. Nyckeln skickas i huvudet
   `Authorization: Bearer <nyckel>`, aldrig i en adress. I Claude Code:

   ```bash
   claude mcp add --transport http docs https://<värd>/mcp --header "Authorization: Bearer <nyckel>"
   ```

- **En nyckel gäller ett år.** En månad före står en påminnelse i
  panelen. Välj då **Ny nyckel** och ge programmet den nya nyckeln.
- **Ny nyckel** ger en ny nyckel med samma namn och val. Den gamla slutar
  gälla direkt.
- **Ta bort** spärrar nyckeln direkt.
- **En nyckel som skickas i en adress spärras direkt.** Adressen kan ha
  hamnat i serverns logg. Skapa då en ny nyckel och ge den till
  programmet i huvudet `Authorization`.
- **Behandla nyckeln som ett lösenord.** Den som har den kan göra det du
  valde, som du.
- **Högst 10 nycklar** per konto. Ett kundkonto får ingen.

### För den som driftar
- **Av från början.** Slå på i `user/config/plugins/mcp.yaml` på servern:
  `enabled: true`. Det gäller alla sajter.
- **Bara i ert nät:** når bara företagets nät eller VPN installationen,
  sätt `internal: true`. Panelen visar då ingen connector för Claude-apparna,
  utan dokumentationens tillägg för Claude Desktop. Tillägget kräver
  personliga nycklar (`keys`).
- **Spärr:** högst 120 anrop i minuten per anslutning (`rate_limit`). Fler
  får vänta en stund. En kunds anslutning har en lägre spärr, 30 anrop.
- **Kunders klienter** slås på per sajt (se
  [Från produkterna](https://groovy.simplo.dev/handbok/atkomst/fran-produkterna#ai-klient-for-kunder)).
- **Loggen** (`logs/grav.log`) har en rad per anrop: konto, sajt och
  verktyg, aldrig innehållet.
- **Alla anslutningar**, från webbroten (`public/`):

  | Vad | Kommando |
  |---|---|
  | Lista anslutningarna | `php bin/plugin mcp tokens` |
  | Avsluta ett kontos anslutningar | `php bin/plugin mcp tokens --revoke <konto>` |
  | Avsluta alla anslutningar | `php bin/plugin mcp tokens --all` |

- **Program som registrerar sig själva:** högst 10 i timmen från samma
  adress, och högst 1000 totalt (`registration_per_hour`,
  `registration_max`). En registrering som ingen har godkänt försvinner
  efter ett dygn. En godkänd försvinner 30 dagar efter att dess sista
  anslutning slutade. Stäng av med `registration: false`.
- **Program med ett eget dokument** (en adress som klient-id): servern
  hämtar dokumentet, men bara från en publik adress, aldrig från det egna
  nätet. Stäng av med `client_documents: false`.
- **Program som registrerat sig**, från webbroten:

  | Vad | Kommando |
  |---|---|
  | Lista dem | `php bin/plugin mcp clients` |
  | Ta bort ett, och avsluta dess anslutningar | `php bin/plugin mcp clients --remove <id>` |
  | Ta bort de som slutat gälla nu | `php bin/plugin mcp clients --prune` |

- **Personliga nycklar** för program utan inloggning, skript och
  automation. Var och en skapar sina egna i panelen (se
  [Personlig nyckel](#personlig-nyckel)). En nyckel gäller
  ett år, bara för MCP-adressen, och bara läser om personen inte valt
  annat. Ett kundkonto får ingen. Högst 10 nycklar per konto
  (`keys_max`), och högst 10 nya i timmen (`keys_per_hour`). Stäng av med
  `keys: false`; då slutar alla nycklar gälla. Från webbroten:

  | Vad | Kommando |
  |---|---|
  | Lista nycklarna | `php bin/plugin mcp keys` |
  | Spärra en nyckel | `php bin/plugin mcp keys --revoke <id>` |
  | Spärra ett kontos alla nycklar | `php bin/plugin mcp keys --revoke-user <konto>` |

  Listan visar konto, namn, om nyckeln bara läser, när den skapades,
  användes senast och går ut. Aldrig själva nyckeln.
- **Ett program installationen ska känna** läggs in under `clients` i
  samma fil, med sin adress för inloggningen. Det visas utan varning när
  någon klickar **Tillåt**. Lägg bara in program du litar på: de får det
  personen tillåter.
