Project No Portal

project_no_portal
REPOSITORY
REPOSITORYOCA/project
GIT
GIThttps://github.com/OCA/project.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/project/tree/18.0/project_no_portal
VERSION
VERSION 1.0.0
CATEGORY
CATEGORYProject
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Camptocamp
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Camptocamp
COMMITTERS
COMMITTERSOCA-git-bot, oca-ci, David Gallay
WEBSITE
WEBSITEhttps://github.com/OCA/project
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:30:14
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - project
    - analytic
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - html_editor
    - uom
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - rating
    - resource
    - digest
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
This module add per-company switch block_project_portal_access under Settings > Project.
Active by default.

For a blocking company:

- A constraint forbids privacy_visibility = 'portal' (default becomes employees).
- A post_init_hook migrates existing portal projects. This alone removes portal read access.
- A mixin on project.project/project.task also denies portal users in _search/_check_access.
  This adds an additional security without deleting existing ir.model.access
- The "Share Project" / "Share Task" actions are unbound.
  Calling them, for example from the code, raises an error.
  An uninstall_hook restores them.

Scoped per company (multi-company friendly) and fully reversible.

Code Analysis

Views touched (2)
XML IDNameModelTypeStatus
res_config_settings_view_form res.config.settings.form.inherit.project.no.portal res.config.settings xpath Inherits project.res_config_settings_view_form
view_task_kanban project.task.kanban.no.portal project.task xpath Inherits project.view_task_kanban
Models touched (6)

New fields (0)

No new fields.

Public methods (1)
  • default_get(self, fields_list)
    @api.model

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • privacy_visibility Selection
    default=<expr>
Public methods (1)
  • action_open_share_project_wizard(self)

New fields (1)
  • portal_share_blocked Boolean
    compute='_compute_portal_share_blocked'
Public methods (0)

No public methods.

New fields (1)
  • block_project_portal_access Boolean
    default=False help='When enabled, portal users of this company cannot read its projects or tasks, and portal visibility cannot be set on them.' string='Block portal access to projects and tasks'
Public methods (1)
  • write(self, vals)

New fields (1)
  • block_project_portal_access Boolean
    help='When enabled, portal users of the selected company cannot read its projects or tasks, and portal visibility cannot be set on them.' readonly=False related='company_id.block_project_portal_access' string='Block portal access to projects and tasks'
Public methods (0)

No public methods.