dolibarr/htdocs/ai/admin
Pichinov-Jose 9ccdbff271
New: granular right for AI Assistant usage (#38312)
The AI module currently has no declared rights ($this->rights stays
empty), so per-user/group attribution of "who is allowed to talk to
the LLM" is not possible. Assistant access is gated only by
isModEnabled('ai'), meaning any authenticated user on an AI-enabled
install can send organisational data to the configured LLM provider
-- which is a GDPR / EU AI Act concern (see issue #38331).

This patch introduces ONE proper Dolibarr right that admins can
attribute per user/group via the standard permission UI
(Users -> Permissions):

  ai/assistant/use   -> right to use the AI Assistant page
                        NOT granted by default; admins must
                        explicitly assign it to authorized users

Per the feedback from @sonikf and @eldy on PR #38312:

- Setup access intentionally stays a hard-coded $user->admin check.
  The technical setup of the AI module (API keys, provider URLs) is
  an admin task in line with how every other Dolibarr module is
  configured -- a dedicated 'ai/setup/write' right would only
  duplicate responsibility that admins already hold.

- ai/assistant/use defaults to OFF (not granted) so that, on a
  fresh install or after enabling the module, no user can talk to
  the LLM until the admin explicitly authorises them. This matches
  the EU AI Act expectation that AI usage is an opt-in per-user
  decision owned by the GDPR DPO / AI module DPA.

Access checks added:

- htdocs/ai/assistant/index.php
    + if (!$user->hasRight('ai','assistant','use')) accessforbidden();
  Added after the existing isModEnabled('ai') / AI_MCP_ENABLED gate.

- htdocs/ai/assistant/parse_intent.php
    + if (!$user->hasRight('ai','assistant','use')) accessforbidden();
  Defence in depth: the AJAX endpoint that actually talks to the LLM
  cannot be reached by a user who lacks the right, even via direct
  call bypassing the Assistant page.

- htdocs/ai/admin/setup.php
    Unchanged behaviour: $user->admin check stays (just a comment
    clarifying the reason).

The right is declared between the existing MODULEBUILDER PERMISSIONS
placeholders in modAi.class.php so the standard right-installation
flow applies: after applying this change, administrators must
disable/re-enable the AI module once to register the new right in
llx_rights_def (existing Dolibarr mechanism, no migration script
needed).

Tested:
- Fresh non-admin user (no extra right granted) -> Assistant page
  shows accessforbidden; parse_intent.php also blocks direct call.
- Same user with 'ai/assistant/use' granted by an admin ->
  Assistant accessible, LLM round-trip works.
- Admin user -> Assistant accessible transparently (admins hold
  every declared right by definition); Setup accessible via the
  unchanged $user->admin check.
- Module disabled -> both still blocked by the existing
  isModEnabled gate.

Refs: #38331 (EU AI Act / GDPR for the AI module).

Co-authored-by: Laurent Destailleur <eldy@destailleur.fr>
2026-06-11 09:33:14 +02:00
..
assistant.php New AI tool access control (#38668) 2026-06-10 11:41:10 +02:00
configure_tools.php Debug v24 2026-06-10 23:31:55 +02:00
custom_prompt.php Add access test 2026-04-16 21:16:51 +02:00
log_viewer.php NEW: MCP server and AI Assistant (#37888) 2026-05-11 01:59:55 +02:00
server_mcp.php Clean setup 2026-05-20 01:29:26 +02:00
setup.php New: granular right for AI Assistant usage (#38312) 2026-06-11 09:33:14 +02:00