Browse Source

Merge PR #658 into 11.0

Signed-off-by simahawk
11.0
OCA-git-bot 4 months ago
parent
commit
3fa238b34a
14 changed files with 1283 additions and 0 deletions
  1. +83
    -0
      website_menu_permission/README.rst
  2. +2
    -0
      website_menu_permission/__init__.py
  3. +19
    -0
      website_menu_permission/__manifest__.py
  4. +2
    -0
      website_menu_permission/models/__init__.py
  5. +11
    -0
      website_menu_permission/models/website_menu.py
  6. +2
    -0
      website_menu_permission/readme/CONTRIBUTORS.rst
  7. +1
    -0
      website_menu_permission/readme/DESCRIPTION.rst
  8. +5
    -0
      website_menu_permission/readme/USAGE.rst
  9. +14
    -0
      website_menu_permission/security/record_rules.xml
  10. +593
    -0
      website_menu_permission/static/description/icon.png
  11. +430
    -0
      website_menu_permission/static/description/index.html
  12. +1
    -0
      website_menu_permission/tests/__init__.py
  13. +80
    -0
      website_menu_permission/tests/test_menu_perm.py
  14. +40
    -0
      website_menu_permission/views/website_views.xml

+ 83
- 0
website_menu_permission/README.rst View File

@@ -0,0 +1,83 @@
=======================
Website Menu Permission
=======================

.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
:target: https://odoo-community.org/page/development-status
:alt: Beta
.. |badge2| image:: https://img.shields.io/badge/licence-LGPL--3-blue.png
:target: http://www.gnu.org/licenses/lgpl-3.0-standalone.html
:alt: License: LGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fwebsite-lightgray.png?logo=github
:target: https://github.com/OCA/website/tree/11.0/website_menu_permission
:alt: OCA/website
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/website-11-0/website-11-0-website_menu_permission
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
:target: https://runbot.odoo-community.org/runbot/186/11.0
:alt: Try me on Runbot

|badge1| |badge2| |badge3| |badge4| |badge5|

Show/hide website menu items by user group.

**Table of contents**

.. contents::
:local:

Usage
=====

To use this module, you need to:

#. Go to Website ==> Configuration ==> Website menu's.
#. Edit the menu that you want to limit to certain groups, and add
the names of the groups that should have access.

Bug Tracker
===========

Bugs are tracked on `GitHub Issues <https://github.com/OCA/website/issues>`_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us smashing it by providing a detailed and welcomed
`feedback <https://github.com/OCA/website/issues/new?body=module:%20website_menu_permission%0Aversion:%2011.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.

Do not contact contributors directly about support or help with technical issues.

Credits
=======

Authors
~~~~~~~

* Camptocamp

Contributors
~~~~~~~~~~~~

* Simone Orsi simone.orsi@camptocamp.com
* Ronald Portier ronald@therp.nl

Maintainers
~~~~~~~~~~~

This module is maintained by the OCA.

.. image:: https://odoo-community.org/logo.png
:alt: Odoo Community Association
:target: https://odoo-community.org

OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.

This module is part of the `OCA/website <https://github.com/OCA/website/tree/11.0/website_menu_permission>`_ project on GitHub.

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

+ 2
- 0
website_menu_permission/__init__.py View File

@@ -0,0 +1,2 @@
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl).
from . import models

+ 19
- 0
website_menu_permission/__manifest__.py View File

@@ -0,0 +1,19 @@
# Copyright 2017 Simone Orsi.
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl).
{
'name': 'Website Menu Permission',
'version': '11.0.1.0.0',
'author': 'Camptocamp,Odoo Community Association (OCA)',
'website': 'https://github.com/OCA/website',
'license': 'LGPL-3',
'category': 'Website',
'summary': 'Allow to show/hide website menu items by user groups.',
'depends': [
'website',
],
'data': [
'security/record_rules.xml',
'views/website_views.xml',
],
'installable': True,
}

+ 2
- 0
website_menu_permission/models/__init__.py View File

@@ -0,0 +1,2 @@
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl).
from . import website_menu

+ 11
- 0
website_menu_permission/models/website_menu.py View File

@@ -0,0 +1,11 @@
# Copyright 2017 Simone Orsi.
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl).
from odoo import fields, models


class WebsiteMenu(models.Model):
_inherit = 'website.menu'

group_ids = fields.Many2many(
comodel_name='res.groups',
)

+ 2
- 0
website_menu_permission/readme/CONTRIBUTORS.rst View File

@@ -0,0 +1,2 @@
* Simone Orsi simone.orsi@camptocamp.com
* Ronald Portier ronald@therp.nl

+ 1
- 0
website_menu_permission/readme/DESCRIPTION.rst View File

@@ -0,0 +1 @@
Show/hide website menu items by user group.

+ 5
- 0
website_menu_permission/readme/USAGE.rst View File

@@ -0,0 +1,5 @@
To use this module, you need to:

#. Go to Website ==> Configuration ==> Website menu's.
#. Edit the menu that you want to limit to certain groups, and add
the names of the groups that should have access.

+ 14
- 0
website_menu_permission/security/record_rules.xml View File

@@ -0,0 +1,14 @@
<?xml version="1.0"?>
<odoo>

<record id="website_menu_access" model="ir.rule">
<field name="name">website_menu_permission group access</field>
<field name="model_id" ref="model_website_menu"/>
<field name="domain_force">['|',('group_ids','in', user.groups_id.ids), ('group_ids','=',False)]</field>
<field name="perm_read" eval="True"/>
<field name="perm_create" eval="False"/>
<field name="perm_write" eval="False"/>
<field name="perm_unlink" eval="False"/>
</record>

</odoo>

+ 593
- 0
website_menu_permission/static/description/icon.png View File

@@ -0,0 +1,593 @@






<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<link rel="dns-prefetch" href="https://assets-cdn.github.com">
<link rel="dns-prefetch" href="https://avatars0.githubusercontent.com">
<link rel="dns-prefetch" href="https://avatars1.githubusercontent.com">
<link rel="dns-prefetch" href="https://avatars2.githubusercontent.com">
<link rel="dns-prefetch" href="https://avatars3.githubusercontent.com">
<link rel="dns-prefetch" href="https://github-cloud.s3.amazonaws.com">
<link rel="dns-prefetch" href="https://user-images.githubusercontent.com/">



<link crossorigin="anonymous" href="https://assets-cdn.github.com/assets/frameworks-d7137690e30123bade38abb082ac79f36cc7a105ff92e602405f53b725465cab.css" media="all" rel="stylesheet" />
<link crossorigin="anonymous" href="https://assets-cdn.github.com/assets/github-babd9ccf5fc40b60a7b080b881a9c505783b73890918e5a88738289d4c9263dc.css" media="all" rel="stylesheet" />
<link crossorigin="anonymous" href="https://assets-cdn.github.com/assets/site-9628bfea02884cc06cee3aa24062d81f93e06de09ed5bac5557deb155500e539.css" media="all" rel="stylesheet" />

<meta name="viewport" content="width=device-width">
<title>server-tools/icon.png at 10.0 · OCA/server-tools · GitHub</title>
<link rel="search" type="application/opensearchdescription+xml" href="/opensearch.xml" title="GitHub">
<link rel="fluid-icon" href="https://github.com/fluidicon.png" title="GitHub">
<meta property="fb:app_id" content="1401488693436528">

<meta content="https://avatars3.githubusercontent.com/u/7600578?s=400&amp;v=4" property="og:image" /><meta content="GitHub" property="og:site_name" /><meta content="object" property="og:type" /><meta content="OCA/server-tools" property="og:title" /><meta content="https://github.com/OCA/server-tools" property="og:url" /><meta content="server-tools - Tools for Odoo Administrators to improve some technical features on Odoo." property="og:description" />

<link rel="assets" href="https://assets-cdn.github.com/">
<meta name="pjax-timeout" content="1000">
<meta name="request-id" content="E750:248E1:3A8765F:5766E2B:59E48990" data-pjax-transient>

<meta name="selected-link" value="repo_source" data-pjax-transient>

<meta name="google-site-verification" content="KT5gs8h0wvaagLKAVWq8bbeNwnZZK1r1XQysX3xurLU">
<meta name="google-site-verification" content="ZzhVyEFwb7w3e0-uOTltm8Jsck2F5StVihD0exw2fsA">
<meta name="google-analytics" content="UA-3769691-2">

<meta content="collector.githubapp.com" name="octolytics-host" /><meta content="github" name="octolytics-app-id" /><meta content="https://collector.githubapp.com/github-external/browser_event" name="octolytics-event-url" /><meta content="E750:248E1:3A8765F:5766E2B:59E48990" name="octolytics-dimension-request_id" /><meta content="iad" name="octolytics-dimension-region_edge" /><meta content="iad" name="octolytics-dimension-region_render" />
<meta content="/&lt;user-name&gt;/&lt;repo-name&gt;/blob/show" data-pjax-transient="true" name="analytics-location" />




<meta class="js-ga-set" name="dimension1" content="Logged Out">



<meta name="hostname" content="github.com">
<meta name="user-login" content="">

<meta name="expected-hostname" content="github.com">
<meta name="js-proxy-site-detection-payload" content="M2UyMmY0NzliMDY5NzRlYTIzMTJjZGNkMzNjNDliYjkxZDM0MmRmZTVmNzZjMzQ0MjYzNjA1ZWRjYjMzN2MwOHx7InJlbW90ZV9hZGRyZXNzIjoiMTUxLjI3LjIwNS4zIiwicmVxdWVzdF9pZCI6IkU3NTA6MjQ4RTE6M0E4NzY1Rjo1NzY2RTJCOjU5RTQ4OTkwIiwidGltZXN0YW1wIjoxNTA4MTQ5NjQ4LCJob3N0IjoiZ2l0aHViLmNvbSJ9">


<meta name="html-safe-nonce" content="4782310de8564ac02e2bb5f20c1201703a39f214">

<meta http-equiv="x-pjax-version" content="134aafae925879fc214a1b80dbef4985">

<link href="https://github.com/OCA/server-tools/commits/10.0.atom" rel="alternate" title="Recent Commits to server-tools:10.0" type="application/atom+xml">

<meta name="description" content="server-tools - Tools for Odoo Administrators to improve some technical features on Odoo.">
<meta name="go-import" content="github.com/OCA/server-tools git https://github.com/OCA/server-tools.git">

<meta content="7600578" name="octolytics-dimension-user_id" /><meta content="OCA" name="octolytics-dimension-user_login" /><meta content="20896532" name="octolytics-dimension-repository_id" /><meta content="OCA/server-tools" name="octolytics-dimension-repository_nwo" /><meta content="true" name="octolytics-dimension-repository_public" /><meta content="false" name="octolytics-dimension-repository_is_fork" /><meta content="20896532" name="octolytics-dimension-repository_network_root_id" /><meta content="OCA/server-tools" name="octolytics-dimension-repository_network_root_nwo" /><meta content="false" name="octolytics-dimension-repository_explore_github_marketplace_ci_cta_shown" />


<link rel="canonical" href="https://github.com/OCA/server-tools/blob/10.0/auth_dynamic_groups/static/description/icon.png" data-pjax-transient>


<meta name="browser-stats-url" content="https://api.github.com/_private/browser/stats">

<meta name="browser-errors-url" content="https://api.github.com/_private/browser/errors">

<link rel="mask-icon" href="https://assets-cdn.github.com/pinned-octocat.svg" color="#000000">
<link rel="icon" type="image/x-icon" href="https://assets-cdn.github.com/favicon.ico">

<meta name="theme-color" content="#1e2327">



</head>

<body class="logged-out env-production page-blob">

<div class="position-relative js-header-wrapper ">
<a href="#start-of-content" tabindex="1" class="px-2 py-4 show-on-focus js-skip-to-content">Skip to content</a>
<div id="js-pjax-loader-bar" class="pjax-loader-bar"><div class="progress"></div></div>




<header class="Header header-logged-out position-relative f4 py-3" role="banner">
<div class="container-lg d-flex px-3">
<div class="d-flex flex-justify-between flex-items-center">
<a class="header-logo-invertocat my-0" href="https://github.com/" aria-label="Homepage" data-ga-click="(Logged out) Header, go to homepage, icon:logo-wordmark">
<svg aria-hidden="true" class="octicon octicon-mark-github" height="32" version="1.1" viewBox="0 0 16 16" width="32"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0 0 16 8c0-4.42-3.58-8-8-8z"/></svg>
</a>

</div>

<div class="HeaderMenu HeaderMenu--bright d-flex flex-justify-between flex-auto">
<nav class="mt-0">
<ul class="d-flex list-style-none">
<li class="ml-2">
<a href="/features" class="js-selected-navigation-item HeaderNavlink px-0 py-2 m-0" data-ga-click="Header, click, Nav menu - item:features" data-selected-links="/features /features/project-management /features/code-review /features/project-management /features/integrations /features">
Features
</a> </li>
<li class="ml-4">
<a href="/business" class="js-selected-navigation-item HeaderNavlink px-0 py-2 m-0" data-ga-click="Header, click, Nav menu - item:business" data-selected-links="/business /business/security /business/customers /business">
Business
</a> </li>

<li class="ml-4">
<a href="/explore" class="js-selected-navigation-item HeaderNavlink px-0 py-2 m-0" data-ga-click="Header, click, Nav menu - item:explore" data-selected-links="/explore /trending /trending/developers /integrations /integrations/feature/code /integrations/feature/collaborate /integrations/feature/ship showcases showcases_search showcases_landing /explore">
Explore
</a> </li>

<li class="ml-4">
<a href="/marketplace" class="js-selected-navigation-item HeaderNavlink px-0 py-2 m-0" data-ga-click="Header, click, Nav menu - item:marketplace" data-selected-links=" /marketplace">
Marketplace
</a> </li>
<li class="ml-4">
<a href="/pricing" class="js-selected-navigation-item HeaderNavlink px-0 py-2 m-0" data-ga-click="Header, click, Nav menu - item:pricing" data-selected-links="/pricing /pricing/developer /pricing/team /pricing/business-hosted /pricing/business-enterprise /pricing">
Pricing
</a> </li>
</ul>
</nav>

<div class="d-flex">
<div class="d-lg-flex flex-items-center mr-3">
<div class="header-search scoped-search site-scoped-search js-site-search" role="search">
<!-- '"` --><!-- </textarea></xmp> --></option></form><form accept-charset="UTF-8" action="/OCA/server-tools/search" class="js-site-search-form" data-scoped-search-url="/OCA/server-tools/search" data-unscoped-search-url="/search" method="get"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="&#x2713;" /></div>
<label class="form-control header-search-wrapper js-chromeless-input-container">
<a href="/OCA/server-tools/blob/10.0/auth_dynamic_groups/static/description/icon.png" class="header-search-scope no-underline">This repository</a>
<input type="text"
class="form-control header-search-input js-site-search-focus js-site-search-field is-clearable"
data-hotkey="s"
name="q"
value=""
placeholder="Search"
aria-label="Search this repository"
data-unscoped-placeholder="Search GitHub"
data-scoped-placeholder="Search"
autocapitalize="off">
<input type="hidden" class="js-site-search-type-field" name="type" >
</label>
</form></div>

</div>

<span class="d-inline-block">
<div class="HeaderNavlink px-0 py-2 m-0">
<a class="text-bold text-white no-underline" href="/login?return_to=%2FOCA%2Fserver-tools%2Fblob%2F10.0%2Fauth_dynamic_groups%2Fstatic%2Fdescription%2Ficon.png" data-ga-click="(Logged out) Header, clicked Sign in, text:sign-in">Sign in</a>
<span class="text-gray">or</span>
<a class="text-bold text-white no-underline" href="/join?source=header-repo" data-ga-click="(Logged out) Header, clicked Sign up, text:sign-up">Sign up</a>
</div>
</span>
</div>
</div>
</div>
</header>


</div>

<div id="start-of-content" class="show-on-focus"></div>

<div id="js-flash-container">
</div>



<div role="main">
<div itemscope itemtype="http://schema.org/SoftwareSourceCode">
<div id="js-repo-pjax-container" data-pjax-container>






<div class="pagehead repohead instapaper_ignore readability-menu experiment-repo-nav ">
<div class="repohead-details-container clearfix container ">

<ul class="pagehead-actions">
<li>
<a href="/login?return_to=%2FOCA%2Fserver-tools"
class="btn btn-sm btn-with-count tooltipped tooltipped-n"
aria-label="You must be signed in to watch a repository" rel="nofollow">
<svg aria-hidden="true" class="octicon octicon-eye" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M8.06 2C3 2 0 8 0 8s3 6 8.06 6C13 14 16 8 16 8s-3-6-7.94-6zM8 12c-2.2 0-4-1.78-4-4 0-2.2 1.8-4 4-4 2.22 0 4 1.8 4 4 0 2.22-1.78 4-4 4zm2-4c0 1.11-.89 2-2 2-1.11 0-2-.89-2-2 0-1.11.89-2 2-2 1.11 0 2 .89 2 2z"/></svg>
Watch
</a>
<a class="social-count" href="/OCA/server-tools/watchers"
aria-label="130 users are watching this repository">
130
</a>

</li>

<li>
<a href="/login?return_to=%2FOCA%2Fserver-tools"
class="btn btn-sm btn-with-count tooltipped tooltipped-n"
aria-label="You must be signed in to star a repository" rel="nofollow">
<svg aria-hidden="true" class="octicon octicon-star" height="16" version="1.1" viewBox="0 0 14 16" width="14"><path fill-rule="evenodd" d="M14 6l-4.9-.64L7 1 4.9 5.36 0 6l3.6 3.26L2.67 14 7 11.67 11.33 14l-.93-4.74z"/></svg>
Star
</a>

<a class="social-count js-social-count" href="/OCA/server-tools/stargazers"
aria-label="201 users starred this repository">
201
</a>

</li>

<li>
<a href="/login?return_to=%2FOCA%2Fserver-tools"
class="btn btn-sm btn-with-count tooltipped tooltipped-n"
aria-label="You must be signed in to fork a repository" rel="nofollow">
<svg aria-hidden="true" class="octicon octicon-repo-forked" height="16" version="1.1" viewBox="0 0 10 16" width="10"><path fill-rule="evenodd" d="M8 1a1.993 1.993 0 0 0-1 3.72V6L5 8 3 6V4.72A1.993 1.993 0 0 0 2 1a1.993 1.993 0 0 0-1 3.72V6.5l3 3v1.78A1.993 1.993 0 0 0 5 15a1.993 1.993 0 0 0 1-3.72V9.5l3-3V4.72A1.993 1.993 0 0 0 8 1zM2 4.2C1.34 4.2.8 3.65.8 3c0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2zm3 10c-.66 0-1.2-.55-1.2-1.2 0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2zm3-10c-.66 0-1.2-.55-1.2-1.2 0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2z"/></svg>
Fork
</a>

<a href="/OCA/server-tools/network" class="social-count"
aria-label="570 users forked this repository">
570
</a>
</li>
</ul>

<h1 class="public ">
<svg aria-hidden="true" class="octicon octicon-repo" height="16" version="1.1" viewBox="0 0 12 16" width="12"><path fill-rule="evenodd" d="M4 9H3V8h1v1zm0-3H3v1h1V6zm0-2H3v1h1V4zm0-2H3v1h1V2zm8-1v12c0 .55-.45 1-1 1H6v2l-1.5-1.5L3 16v-2H1c-.55 0-1-.45-1-1V1c0-.55.45-1 1-1h10c.55 0 1 .45 1 1zm-1 10H1v2h2v-1h3v1h5v-2zm0-10H2v9h9V1z"/></svg>
<span class="author" itemprop="author"><a href="/OCA" class="url fn" rel="author">OCA</a></span><!--
--><span class="path-divider">/</span><!--
--><strong itemprop="name"><a href="/OCA/server-tools" data-pjax="#js-repo-pjax-container">server-tools</a></strong>

</h1>

</div>
<nav class="reponav js-repo-nav js-sidenav-container-pjax container"
itemscope
itemtype="http://schema.org/BreadcrumbList"
role="navigation"
data-pjax="#js-repo-pjax-container">

<span itemscope itemtype="http://schema.org/ListItem" itemprop="itemListElement">
<a href="/OCA/server-tools/tree/10.0" class="js-selected-navigation-item selected reponav-item" data-hotkey="g c" data-selected-links="repo_source repo_downloads repo_commits repo_releases repo_tags repo_branches repo_packages /OCA/server-tools/tree/10.0" itemprop="url">
<svg aria-hidden="true" class="octicon octicon-code" height="16" version="1.1" viewBox="0 0 14 16" width="14"><path fill-rule="evenodd" d="M9.5 3L8 4.5 11.5 8 8 11.5 9.5 13 14 8 9.5 3zm-5 0L0 8l4.5 5L6 11.5 2.5 8 6 4.5 4.5 3z"/></svg>
<span itemprop="name">Code</span>
<meta itemprop="position" content="1">
</a> </span>

<span itemscope itemtype="http://schema.org/ListItem" itemprop="itemListElement">
<a href="/OCA/server-tools/issues" class="js-selected-navigation-item reponav-item" data-hotkey="g i" data-selected-links="repo_issues repo_labels repo_milestones /OCA/server-tools/issues" itemprop="url">
<svg aria-hidden="true" class="octicon octicon-issue-opened" height="16" version="1.1" viewBox="0 0 14 16" width="14"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"/></svg>
<span itemprop="name">Issues</span>
<span class="Counter">60</span>
<meta itemprop="position" content="2">
</a> </span>

<span itemscope itemtype="http://schema.org/ListItem" itemprop="itemListElement">
<a href="/OCA/server-tools/pulls" class="js-selected-navigation-item reponav-item" data-hotkey="g p" data-selected-links="repo_pulls /OCA/server-tools/pulls" itemprop="url">
<svg aria-hidden="true" class="octicon octicon-git-pull-request" height="16" version="1.1" viewBox="0 0 12 16" width="12"><path fill-rule="evenodd" d="M11 11.28V5c-.03-.78-.34-1.47-.94-2.06C9.46 2.35 8.78 2.03 8 2H7V0L4 3l3 3V4h1c.27.02.48.11.69.31.21.2.3.42.31.69v6.28A1.993 1.993 0 0 0 10 15a1.993 1.993 0 0 0 1-3.72zm-1 2.92c-.66 0-1.2-.55-1.2-1.2 0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2zM4 3c0-1.11-.89-2-2-2a1.993 1.993 0 0 0-1 3.72v6.56A1.993 1.993 0 0 0 2 15a1.993 1.993 0 0 0 1-3.72V4.72c.59-.34 1-.98 1-1.72zm-.8 10c0 .66-.55 1.2-1.2 1.2-.65 0-1.2-.55-1.2-1.2 0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2zM2 4.2C1.34 4.2.8 3.65.8 3c0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2z"/></svg>
<span itemprop="name">Pull requests</span>
<span class="Counter">130</span>
<meta itemprop="position" content="3">
</a> </span>

<a href="/OCA/server-tools/projects" class="js-selected-navigation-item reponav-item" data-hotkey="g b" data-selected-links="repo_projects new_repo_project repo_project /OCA/server-tools/projects">
<svg aria-hidden="true" class="octicon octicon-project" height="16" version="1.1" viewBox="0 0 15 16" width="15"><path fill-rule="evenodd" d="M10 12h3V2h-3v10zm-4-2h3V2H6v8zm-4 4h3V2H2v12zm-1 1h13V1H1v14zM14 0H1a1 1 0 0 0-1 1v14a1 1 0 0 0 1 1h13a1 1 0 0 0 1-1V1a1 1 0 0 0-1-1z"/></svg>
Projects
<span class="Counter" >0</span>
</a>


<a href="/OCA/server-tools/pulse" class="js-selected-navigation-item reponav-item" data-selected-links="repo_graphs repo_contributors dependency_graph pulse /OCA/server-tools/pulse">
<svg aria-hidden="true" class="octicon octicon-graph" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M16 14v1H0V0h1v14h15zM5 13H3V8h2v5zm4 0H7V3h2v10zm4 0h-2V6h2v7z"/></svg>
Insights
</a>

</nav>


</div>

<div class="container new-discussion-timeline experiment-repo-nav">
<div class="repository-content">

<a href="/OCA/server-tools/blob/72064e9468c43fc4fda32b7b93474345c89a35d6/auth_dynamic_groups/static/description/icon.png" class="d-none js-permalink-shortcut" data-hotkey="y">Permalink</a>

<!-- blob contrib key: blob_contributors:v21:03bddfe3f169ed0c02f9b752fb575429 -->

<div class="file-navigation js-zeroclipboard-container">
<div class="select-menu branch-select-menu js-menu-container js-select-menu float-left">
<button class=" btn btn-sm select-menu-button js-menu-target css-truncate" data-hotkey="w"
type="button" aria-label="Switch branches or tags" aria-expanded="false" aria-haspopup="true">
<i>Branch:</i>
<span class="js-select-button css-truncate-target">10.0</span>
</button>

<div class="select-menu-modal-holder js-menu-content js-navigation-container" data-pjax>

<div class="select-menu-modal">
<div class="select-menu-header">
<svg aria-label="Close" class="octicon octicon-x js-menu-close" height="16" role="img" version="1.1" viewBox="0 0 12 16" width="12"><path fill-rule="evenodd" d="M7.48 8l3.75 3.75-1.48 1.48L6 9.48l-3.75 3.75-1.48-1.48L4.52 8 .77 4.25l1.48-1.48L6 6.52l3.75-3.75 1.48 1.48z"/></svg>
<span class="select-menu-title">Switch branches/tags</span>
</div>

<div class="select-menu-filters">
<div class="select-menu-text-filter">
<input type="text" aria-label="Filter branches/tags" id="context-commitish-filter-field" class="form-control js-filterable-field js-navigation-enable" placeholder="Filter branches/tags">
</div>
<div class="select-menu-tabs">
<ul>
<li class="select-menu-tab">
<a href="#" data-tab-filter="branches" data-filter-placeholder="Filter branches/tags" class="js-select-menu-tab" role="tab">Branches</a>
</li>
<li class="select-menu-tab">
<a href="#" data-tab-filter="tags" data-filter-placeholder="Find a tag…" class="js-select-menu-tab" role="tab">Tags</a>
</li>
</ul>
</div>
</div>

<div class="select-menu-list select-menu-tab-bucket js-select-menu-tab-bucket" data-tab-filter="branches" role="menu">

<div data-filterable-for="context-commitish-filter-field" data-filterable-type="substring">


<a class="select-menu-item js-navigation-item js-navigation-open "
href="/OCA/server-tools/blob/6.1/auth_dynamic_groups/static/description/icon.png"
data-name="6.1"
data-skip-pjax="true"
rel="nofollow">
<svg aria-hidden="true" class="octicon octicon-check select-menu-item-icon" height="16" version="1.1" viewBox="0 0 12 16" width="12"><path fill-rule="evenodd" d="M12 5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
<span class="select-menu-item-text css-truncate-target js-select-menu-filter-text">
6.1
</span>
</a>
<a class="select-menu-item js-navigation-item js-navigation-open "
href="/OCA/server-tools/blob/7.0/auth_dynamic_groups/static/description/icon.png"
data-name="7.0"
data-skip-pjax="true"
rel="nofollow">
<svg aria-hidden="true" class="octicon octicon-check select-menu-item-icon" height="16" version="1.1" viewBox="0 0 12 16" width="12"><path fill-rule="evenodd" d="M12 5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
<span class="select-menu-item-text css-truncate-target js-select-menu-filter-text">
7.0
</span>
</a>
<a class="select-menu-item js-navigation-item js-navigation-open "
href="/OCA/server-tools/blob/8.0/auth_dynamic_groups/static/description/icon.png"
data-name="8.0"
data-skip-pjax="true"
rel="nofollow">
<svg aria-hidden="true" class="octicon octicon-check select-menu-item-icon" height="16" version="1.1" viewBox="0 0 12 16" width="12"><path fill-rule="evenodd" d="M12 5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
<span class="select-menu-item-text css-truncate-target js-select-menu-filter-text">
8.0
</span>
</a>
<a class="select-menu-item js-navigation-item js-navigation-open "
href="/OCA/server-tools/blob/9.0/auth_dynamic_groups/static/description/icon.png"
data-name="9.0"
data-skip-pjax="true"
rel="nofollow">
<svg aria-hidden="true" class="octicon octicon-check select-menu-item-icon" height="16" version="1.1" viewBox="0 0 12 16" width="12"><path fill-rule="evenodd" d="M12 5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
<span class="select-menu-item-text css-truncate-target js-select-menu-filter-text">
9.0
</span>
</a>
<a class="select-menu-item js-navigation-item js-navigation-open selected"
href="/OCA/server-tools/blob/10.0/auth_dynamic_groups/static/description/icon.png"
data-name="10.0"
data-skip-pjax="true"
rel="nofollow">
<svg aria-hidden="true" class="octicon octicon-check select-menu-item-icon" height="16" version="1.1" viewBox="0 0 12 16" width="12"><path fill-rule="evenodd" d="M12 5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
<span class="select-menu-item-text css-truncate-target js-select-menu-filter-text">
10.0
</span>
</a>
<a class="select-menu-item js-navigation-item js-navigation-open "
href="/OCA/server-tools/blob/11.0/auth_dynamic_groups/static/description/icon.png"
data-name="11.0"
data-skip-pjax="true"
rel="nofollow">
<svg aria-hidden="true" class="octicon octicon-check select-menu-item-icon" height="16" version="1.1" viewBox="0 0 12 16" width="12"><path fill-rule="evenodd" d="M12 5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
<span class="select-menu-item-text css-truncate-target js-select-menu-filter-text">
11.0
</span>
</a>
</div>

<div class="select-menu-no-results">Nothing to show</div>
</div>

<div class="select-menu-list select-menu-tab-bucket js-select-menu-tab-bucket" data-tab-filter="tags">
<div data-filterable-for="context-commitish-filter-field" data-filterable-type="substring">


</div>

<div class="select-menu-no-results">Nothing to show</div>
</div>

</div>
</div>
</div>

<div class="BtnGroup float-right">
<a href="/OCA/server-tools/find/10.0"
class="js-pjax-capture-input btn btn-sm BtnGroup-item"
data-pjax
data-hotkey="t">
Find file
</a>
<button aria-label="Copy file path to clipboard" class="js-zeroclipboard btn btn-sm BtnGroup-item tooltipped tooltipped-s" data-copied-hint="Copied!" type="button">Copy path</button>
</div>
<div class="breadcrumb js-zeroclipboard-target">
<span class="repo-root js-repo-root"><span class="js-path-segment"><a href="/OCA/server-tools/tree/10.0"><span>server-tools</span></a></span></span><span class="separator">/</span><span class="js-path-segment"><a href="/OCA/server-tools/tree/10.0/auth_dynamic_groups"><span>auth_dynamic_groups</span></a></span><span class="separator">/</span><span class="js-path-segment"><a href="/OCA/server-tools/tree/10.0/auth_dynamic_groups/static"><span>static</span></a></span><span class="separator">/</span><span class="js-path-segment"><a href="/OCA/server-tools/tree/10.0/auth_dynamic_groups/static/description"><span>description</span></a></span><span class="separator">/</span><strong class="final-path">icon.png</strong>
</div>
</div>


<div class="commit-tease">
<span class="float-right">
<a class="commit-tease-sha" href="/OCA/server-tools/commit/5c9305635656badaae5ad58fd3ab23d09467fb9f" data-pjax>
5c93056
</a>
<relative-time datetime="2015-08-18T08:47:52Z">Aug 18, 2015</relative-time>
</span>
<div>
<img alt="@yvaucher" class="avatar" height="20" src="https://avatars1.githubusercontent.com/u/4158438?s=40&amp;v=4" width="20" />
<a href="/yvaucher" class="user-mention" rel="contributor">yvaucher</a>
<a href="/OCA/server-tools/commit/5c9305635656badaae5ad58fd3ab23d09467fb9f" class="message" data-pjax="true" title="Add missing default oca icons">Add missing default oca icons</a>
</div>

<div class="commit-tease-contributors">
<button type="button" class="btn-link muted-link contributors-toggle" data-facebox="#blob_contributors_box">
<strong>1</strong>
contributor
</button>
</div>

<div id="blob_contributors_box" style="display:none">
<h2 class="facebox-header" data-facebox-id="facebox-header">Users who have contributed to this file</h2>
<ul class="facebox-user-list" data-facebox-id="facebox-description">
<li class="facebox-user-list-item">
<img alt="@yvaucher" height="24" src="https://avatars0.githubusercontent.com/u/4158438?s=48&amp;v=4" width="24" />
<a href="/yvaucher">yvaucher</a>
</li>
</ul>
</div>
</div>


<div class="file">
<div class="file-header">
<div class="file-actions">

<div class="BtnGroup">
<a href="/OCA/server-tools/raw/10.0/auth_dynamic_groups/static/description/icon.png" class="btn btn-sm BtnGroup-item" id="raw-url">Download</a>
<a href="/OCA/server-tools/commits/10.0/auth_dynamic_groups/static/description/icon.png" class="btn btn-sm BtnGroup-item" rel="nofollow">History</a>
</div>


<!-- '"` --><!-- </textarea></xmp> --></option></form><form accept-charset="UTF-8" action="/OCA/server-tools/delete/10.0/auth_dynamic_groups/static/description/icon.png" class="inline-form" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="&#x2713;" /><input name="authenticity_token" type="hidden" value="kiq2JOeoskrLepwauTe63oRrhYB2hr+cLdt/NvkCBXVCNpZAw3WtTEYy4n0NRc0c1PbPmJwIiZWEjWQ4+PL1Hw==" /></div>
<button class="btn-octicon btn-octicon-danger tooltipped tooltipped-nw" type="submit"
aria-label="You must be signed in to make or propose changes" data-disable-with>
<svg aria-hidden="true" class="octicon octicon-trashcan" height="16" version="1.1" viewBox="0 0 12 16" width="12"><path fill-rule="evenodd" d="M11 2H9c0-.55-.45-1-1-1H5c-.55 0-1 .45-1 1H2c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1v9c0 .55.45 1 1 1h7c.55 0 1-.45 1-1V5c.55 0 1-.45 1-1V3c0-.55-.45-1-1-1zm-1 12H3V5h1v8h1V5h1v8h1V5h1v8h1V5h1v9zm1-10H2V3h9v1z"/></svg>
</button>
</form> </div>

<div class="file-info">
9.23 KB
</div>
</div>


<div itemprop="text" class="blob-wrapper data type-text">
<div class="image">
<span class="border-wrap"><img src="/OCA/server-tools/blob/10.0/auth_dynamic_groups/static/description/icon.png?raw=true" alt="icon.png"></span>
</div>
</div>

</div>

<button type="button" data-facebox="#jump-to-line" data-facebox-class="linejump" data-hotkey="l" class="d-none">Jump to Line</button>
<div id="jump-to-line" style="display:none">
<!-- '"` --><!-- </textarea></xmp> --></option></form><form accept-charset="UTF-8" action="" class="js-jump-to-line-form" method="get"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="&#x2713;" /></div>
<input class="form-control linejump-input js-jump-to-line-field" type="text" placeholder="Jump to line&hellip;" aria-label="Jump to line" autofocus>
<button type="submit" class="btn">Go</button>
</form> </div>

</div>
<div class="modal-backdrop js-touch-events"></div>
</div>

</div>
</div>

</div>

<div class="footer container-lg px-3" role="contentinfo">
<div class="position-relative d-flex flex-justify-between py-6 mt-6 f6 text-gray border-top border-gray-light ">
<ul class="list-style-none d-flex flex-wrap ">
<li class="mr-3">&copy; 2017 <span title="0.13282s from unicorn-1899290616-cfrbc">GitHub</span>, Inc.</li>
<li class="mr-3"><a href="https://github.com/site/terms" data-ga-click="Footer, go to terms, text:terms">Terms</a></li>
<li class="mr-3"><a href="https://github.com/site/privacy" data-ga-click="Footer, go to privacy, text:privacy">Privacy</a></li>
<li class="mr-3"><a href="https://github.com/security" data-ga-click="Footer, go to security, text:security">Security</a></li>
<li class="mr-3"><a href="https://status.github.com/" data-ga-click="Footer, go to status, text:status">Status</a></li>
<li><a href="https://help.github.com" data-ga-click="Footer, go to help, text:help">Help</a></li>
</ul>

<a href="https://github.com" aria-label="Homepage" class="footer-octicon" title="GitHub">
<svg aria-hidden="true" class="octicon octicon-mark-github" height="24" version="1.1" viewBox="0 0 16 16" width="24"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0 0 16 8c0-4.42-3.58-8-8-8z"/></svg>
</a>
<ul class="list-style-none d-flex flex-wrap ">
<li class="mr-3"><a href="https://github.com/contact" data-ga-click="Footer, go to contact, text:contact">Contact GitHub</a></li>
<li class="mr-3"><a href="https://developer.github.com" data-ga-click="Footer, go to api, text:api">API</a></li>
<li class="mr-3"><a href="https://training.github.com" data-ga-click="Footer, go to training, text:training">Training</a></li>
<li class="mr-3"><a href="https://shop.github.com" data-ga-click="Footer, go to shop, text:shop">Shop</a></li>
<li class="mr-3"><a href="https://github.com/blog" data-ga-click="Footer, go to blog, text:blog">Blog</a></li>
<li><a href="https://github.com/about" data-ga-click="Footer, go to about, text:about">About</a></li>

</ul>
</div>
</div>



<div id="ajax-error-message" class="ajax-error-message flash flash-error">
<svg aria-hidden="true" class="octicon octicon-alert" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M8.865 1.52c-.18-.31-.51-.5-.87-.5s-.69.19-.87.5L.275 13.5c-.18.31-.18.69 0 1 .19.31.52.5.87.5h13.7c.36 0 .69-.19.86-.5.17-.31.18-.69.01-1L8.865 1.52zM8.995 13h-2v-2h2v2zm0-3h-2V6h2v4z"/></svg>
<button type="button" class="flash-close js-flash-close js-ajax-error-dismiss" aria-label="Dismiss error">
<svg aria-hidden="true" class="octicon octicon-x" height="16" version="1.1" viewBox="0 0 12 16" width="12"><path fill-rule="evenodd" d="M7.48 8l3.75 3.75-1.48 1.48L6 9.48l-3.75 3.75-1.48-1.48L4.52 8 .77 4.25l1.48-1.48L6 6.52l3.75-3.75 1.48 1.48z"/></svg>
</button>
You can't perform that action at this time.
</div>


<script crossorigin="anonymous" src="https://assets-cdn.github.com/assets/compat-91f98c37fc84eac24836eec2567e9912742094369a04c4eba6e3cd1fa18902d9.js"></script>
<script crossorigin="anonymous" src="https://assets-cdn.github.com/assets/frameworks-dce6306350f9163599cb2e0df38e21189604851a11d003388015e66b0f0353ad.js"></script>
<script async="async" crossorigin="anonymous" src="https://assets-cdn.github.com/assets/github-505915f13397a275356f65e72a41b91166f722d9a64f324951f06fa19ea54642.js"></script>
<div class="js-stale-session-flash stale-session-flash flash flash-warn flash-banner d-none">
<svg aria-hidden="true" class="octicon octicon-alert" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M8.865 1.52c-.18-.31-.51-.5-.87-.5s-.69.19-.87.5L.275 13.5c-.18.31-.18.69 0 1 .19.31.52.5.87.5h13.7c.36 0 .69-.19.86-.5.17-.31.18-.69.01-1L8.865 1.52zM8.995 13h-2v-2h2v2zm0-3h-2V6h2v4z"/></svg>
<span class="signed-in-tab-flash">You signed in with another tab or window. <a href="">Reload</a> to refresh your session.</span>
<span class="signed-out-tab-flash">You signed out in another tab or window. <a href="">Reload</a> to refresh your session.</span>
</div>
<div class="facebox" id="facebox" style="display:none;">
<div class="facebox-popup">
<div class="facebox-content" role="dialog" aria-labelledby="facebox-header" aria-describedby="facebox-description">
</div>
<button type="button" class="facebox-close js-facebox-close" aria-label="Close modal">
<svg aria-hidden="true" class="octicon octicon-x" height="16" version="1.1" viewBox="0 0 12 16" width="12"><path fill-rule="evenodd" d="M7.48 8l3.75 3.75-1.48 1.48L6 9.48l-3.75 3.75-1.48-1.48L4.52 8 .77 4.25l1.48-1.48L6 6.52l3.75-3.75 1.48 1.48z"/></svg>
</button>
</div>
</div>


</body>
</html>


+ 430
- 0
website_menu_permission/static/description/index.html View File

@@ -0,0 +1,430 @@
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils 0.15.1: http://docutils.sourceforge.net/" />
<title>Website Menu Permission</title>
<style type="text/css">

/*
:Author: David Goodger (goodger@python.org)
:Id: $Id: html4css1.css 7952 2016-07-26 18:15:59Z milde $
:Copyright: This stylesheet has been placed in the public domain.

Default cascading style sheet for the HTML output of Docutils.

See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to
customize this style sheet.
*/

/* used to remove borders from tables and images */
.borderless, table.borderless td, table.borderless th {
border: 0 }

table.borderless td, table.borderless th {
/* Override padding for "table.docutils td" with "! important".
The right padding separates the table cells. */
padding: 0 0.5em 0 0 ! important }

.first {
/* Override more specific margin styles with "! important". */
margin-top: 0 ! important }

.last, .with-subtitle {
margin-bottom: 0 ! important }

.hidden {
display: none }

.subscript {
vertical-align: sub;
font-size: smaller }

.superscript {
vertical-align: super;
font-size: smaller }

a.toc-backref {
text-decoration: none ;
color: black }

blockquote.epigraph {
margin: 2em 5em ; }

dl.docutils dd {
margin-bottom: 0.5em }

object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] {
overflow: hidden;
}

/* Uncomment (and remove this text!) to get bold-faced definition list terms
dl.docutils dt {
font-weight: bold }
*/

div.abstract {
margin: 2em 5em }

div.abstract p.topic-title {
font-weight: bold ;
text-align: center }

div.admonition, div.attention, div.caution, div.danger, div.error,
div.hint, div.important, div.note, div.tip, div.warning {
margin: 2em ;
border: medium outset ;
padding: 1em }

div.admonition p.admonition-title, div.hint p.admonition-title,
div.important p.admonition-title, div.note p.admonition-title,
div.tip p.admonition-title {
font-weight: bold ;
font-family: sans-serif }

div.attention p.admonition-title, div.caution p.admonition-title,
div.danger p.admonition-title, div.error p.admonition-title,
div.warning p.admonition-title, .code .error {
color: red ;
font-weight: bold ;
font-family: sans-serif }

/* Uncomment (and remove this text!) to get reduced vertical space in
compound paragraphs.
div.compound .compound-first, div.compound .compound-middle {
margin-bottom: 0.5em }

div.compound .compound-last, div.compound .compound-middle {
margin-top: 0.5em }
*/

div.dedication {
margin: 2em 5em ;
text-align: center ;
font-style: italic }

div.dedication p.topic-title {
font-weight: bold ;
font-style: normal }

div.figure {
margin-left: 2em ;
margin-right: 2em }

div.footer, div.header {
clear: both;
font-size: smaller }

div.line-block {
display: block ;
margin-top: 1em ;
margin-bottom: 1em }

div.line-block div.line-block {
margin-top: 0 ;
margin-bottom: 0 ;
margin-left: 1.5em }

div.sidebar {
margin: 0 0 0.5em 1em ;
border: medium outset ;
padding: 1em ;
background-color: #ffffee ;
width: 40% ;
float: right ;
clear: right }

div.sidebar p.rubric {
font-family: sans-serif ;
font-size: medium }

div.system-messages {
margin: 5em }

div.system-messages h1 {
color: red }

div.system-message {
border: medium outset ;
padding: 1em }

div.system-message p.system-message-title {
color: red ;
font-weight: bold }

div.topic {
margin: 2em }

h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
margin-top: 0.4em }

h1.title {
text-align: center }

h2.subtitle {
text-align: center }

hr.docutils {
width: 75% }

img.align-left, .figure.align-left, object.align-left, table.align-left {
clear: left ;
float: left ;
margin-right: 1em }

img.align-right, .figure.align-right, object.align-right, table.align-right {
clear: right ;
float: right ;
margin-left: 1em }

img.align-center, .figure.align-center, object.align-center {
display: block;
margin-left: auto;
margin-right: auto;
}

table.align-center {
margin-left: auto;
margin-right: auto;
}

.align-left {
text-align: left }

.align-center {
clear: both ;
text-align: center }

.align-right {
text-align: right }

/* reset inner alignment in figures */
div.align-right {
text-align: inherit }

/* div.align-center * { */
/* text-align: left } */

.align-top {
vertical-align: top }

.align-middle {
vertical-align: middle }

.align-bottom {
vertical-align: bottom }

ol.simple, ul.simple {
margin-bottom: 1em }

ol.arabic {
list-style: decimal }

ol.loweralpha {
list-style: lower-alpha }

ol.upperalpha {
list-style: upper-alpha }

ol.lowerroman {
list-style: lower-roman }

ol.upperroman {
list-style: upper-roman }

p.attribution {
text-align: right ;
margin-left: 50% }

p.caption {
font-style: italic }

p.credits {
font-style: italic ;
font-size: smaller }

p.label {
white-space: nowrap }

p.rubric {
font-weight: bold ;
font-size: larger ;
color: maroon ;
text-align: center }

p.sidebar-title {
font-family: sans-serif ;
font-weight: bold ;
font-size: larger }

p.sidebar-subtitle {
font-family: sans-serif ;
font-weight: bold }

p.topic-title {
font-weight: bold }

pre.address {
margin-bottom: 0 ;
margin-top: 0 ;
font: inherit }

pre.literal-block, pre.doctest-block, pre.math, pre.code {
margin-left: 2em ;
margin-right: 2em }

pre.code .ln { color: grey; } /* line numbers */
pre.code, code { background-color: #eeeeee }
pre.code .comment, code .comment { color: #5C6576 }
pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
pre.code .literal.string, code .literal.string { color: #0C5404 }
pre.code .name.builtin, code .name.builtin { color: #352B84 }
pre.code .deleted, code .deleted { background-color: #DEB0A1}
pre.code .inserted, code .inserted { background-color: #A3D289}

span.classifier {
font-family: sans-serif ;
font-style: oblique }

span.classifier-delimiter {
font-family: sans-serif ;
font-weight: bold }

span.interpreted {
font-family: sans-serif }

span.option {
white-space: nowrap }

span.pre {
white-space: pre }

span.problematic {
color: red }

span.section-subtitle {
/* font-size relative to parent (h1..h6 element) */
font-size: 80% }

table.citation {
border-left: solid 1px gray;
margin-left: 1px }

table.docinfo {
margin: 2em 4em }

table.docutils {
margin-top: 0.5em ;
margin-bottom: 0.5em }

table.footnote {
border-left: solid 1px black;
margin-left: 1px }

table.docutils td, table.docutils th,
table.docinfo td, table.docinfo th {
padding-left: 0.5em ;
padding-right: 0.5em ;
vertical-align: top }

table.docutils th.field-name, table.docinfo th.docinfo-name {
font-weight: bold ;
text-align: left ;
white-space: nowrap ;
padding-left: 0 }

/* "booktabs" style (no vertical lines) */
table.docutils.booktabs {
border: 0px;
border-top: 2px solid;
border-bottom: 2px solid;
border-collapse: collapse;
}
table.docutils.booktabs * {
border: 0px;
}
table.docutils.booktabs th {
border-bottom: thin solid;
text-align: left;
}

h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
font-size: 100% }

ul.auto-toc {
list-style-type: none }

</style>
</head>
<body>
<div class="document" id="website-menu-permission">
<h1 class="title">Website Menu Permission</h1>

<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<p><a class="reference external" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external" href="http://www.gnu.org/licenses/lgpl-3.0-standalone.html"><img alt="License: LGPL-3" src="https://img.shields.io/badge/licence-LGPL--3-blue.png" /></a> <a class="reference external" href="https://github.com/OCA/website/tree/11.0/website_menu_permission"><img alt="OCA/website" src="https://img.shields.io/badge/github-OCA%2Fwebsite-lightgray.png?logo=github" /></a> <a class="reference external" href="https://translation.odoo-community.org/projects/website-11-0/website-11-0-website_menu_permission"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external" href="https://runbot.odoo-community.org/runbot/186/11.0"><img alt="Try me on Runbot" src="https://img.shields.io/badge/runbot-Try%20me-875A7B.png" /></a></p>
<p>Show/hide website menu items by user group.</p>
<p><strong>Table of contents</strong></p>
<div class="contents local topic" id="contents">
<ul class="simple">
<li><a class="reference internal" href="#usage" id="id1">Usage</a></li>
<li><a class="reference internal" href="#bug-tracker" id="id2">Bug Tracker</a></li>
<li><a class="reference internal" href="#credits" id="id3">Credits</a><ul>
<li><a class="reference internal" href="#authors" id="id4">Authors</a></li>
<li><a class="reference internal" href="#contributors" id="id5">Contributors</a></li>
<li><a class="reference internal" href="#maintainers" id="id6">Maintainers</a></li>
</ul>
</li>
</ul>
</div>
<div class="section" id="usage">
<h1><a class="toc-backref" href="#id1">Usage</a></h1>
<p>To use this module, you need to:</p>
<ol class="arabic simple">
<li>Go to Website ==&gt; Configuration ==&gt; Website menu’s.</li>
<li>Edit the menu that you want to limit to certain groups, and add
the names of the groups that should have access.</li>
</ol>
</div>
<div class="section" id="bug-tracker">
<h1><a class="toc-backref" href="#id2">Bug Tracker</a></h1>
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/website/issues">GitHub Issues</a>.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us smashing it by providing a detailed and welcomed
<a class="reference external" href="https://github.com/OCA/website/issues/new?body=module:%20website_menu_permission%0Aversion:%2011.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
<p>Do not contact contributors directly about support or help with technical issues.</p>
</div>
<div class="section" id="credits">
<h1><a class="toc-backref" href="#id3">Credits</a></h1>
<div class="section" id="authors">
<h2><a class="toc-backref" href="#id4">Authors</a></h2>
<ul class="simple">
<li>Camptocamp</li>
</ul>
</div>
<div class="section" id="contributors">
<h2><a class="toc-backref" href="#id5">Contributors</a></h2>
<ul class="simple">
<li>Simone Orsi <a class="reference external" href="mailto:simone.orsi&#64;camptocamp.com">simone.orsi&#64;camptocamp.com</a></li>
<li>Ronald Portier <a class="reference external" href="mailto:ronald&#64;therp.nl">ronald&#64;therp.nl</a></li>
</ul>
</div>
<div class="section" id="maintainers">
<h2><a class="toc-backref" href="#id6">Maintainers</a></h2>
<p>This module is maintained by the OCA.</p>
<a class="reference external image-reference" href="https://odoo-community.org"><img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" /></a>
<p>OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.</p>
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/website/tree/11.0/website_menu_permission">OCA/website</a> project on GitHub.</p>
<p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>
</div>
</div>
</div>
</body>
</html>

+ 1
- 0
website_menu_permission/tests/__init__.py View File

@@ -0,0 +1 @@
from . import test_menu_perm

+ 80
- 0
website_menu_permission/tests/test_menu_perm.py View File

@@ -0,0 +1,80 @@
# Copyright 2017 Simone Orsi.
# Copyright 2019 Therp BV <https://therp.nl>.
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl).
import odoo.tests.common as test_common


class TestMenuPerm(test_common.SavepointCase):

@classmethod
def setUpClass(cls):
super().setUpClass()
cls.env = cls.env(context=dict(
cls.env.context, tracking_disable=True, no_reset_password=True))
cls.group_portal = cls.env.ref('base.group_portal')
cls.group_user = cls.env.ref('base.group_user')
cls.group_public = cls.env.ref('base.group_public')
user_model = cls.env['res.users'].with_context(**{
'no_reset_password': True,
'mail_create_nosubscribe': True})
cls.employee_user = user_model.create({
'name': 'Employee user (test ref)',
'login': 'testref_employee_user',
'email': 'testref_employee_user@email.com',
'groups_id': [(6, 0, [cls.group_user.id])]})
cls.portal_user = user_model.create({
'name': 'Portal user',
'login': 'portaluser',
'email': 'portaluser@example.com',
'groups_id': [(6, 0, [cls.group_portal.id])]})
cls.public_user = cls.env.ref('base.public_user')
cls.menu_model = cls.env['website.menu']
cls.menu_item = cls.menu_model.create({'name': 'Foo'})

def test_menu_for_all(self):
self.menu_item.write({'group_ids': False})
self.assertTrue(self._can_see(self.employee_user))
self.assertTrue(self._can_see(self.public_user))
self.assertTrue(self._can_see(self.portal_user))

def test_menu_for_employee(self):
self.menu_item.write({'group_ids': [(6, 0, [self.group_user.id])]})
self.assertTrue(self._can_see(self.employee_user))
self.assertFalse(self._can_see(self.public_user))
self.assertFalse(self._can_see(self.portal_user))

def test_menu_for_external(self):
self.menu_item.write({'group_ids': [(6, 0, [self.group_portal.id])]})
self.assertFalse(self._can_see(self.employee_user))
self.assertFalse(self._can_see(self.public_user))
self.assertTrue(self._can_see(self.portal_user))

def test_menu_for_logged_in_users(self):
self.menu_item.write(
{'group_ids': [(6, 0, [
self.group_portal.id, self.group_user.id])]})
self.assertTrue(self._can_see(self.employee_user))
self.assertFalse(self._can_see(self.public_user))
self.assertTrue(self._can_see(self.portal_user))

def test_menu_for_not_logged_in_users(self):
self.menu_item.write({'group_ids': [(6, 0, [self.group_public.id])]})
self.assertFalse(self._can_see(self.employee_user))
self.assertTrue(self._can_see(self.public_user))
self.assertFalse(self._can_see(self.portal_user))

def test_menu_for_all_explicit(self):
self.menu_item.write(
{'group_ids': [(6, 0, [
self.group_portal.id,
self.group_user.id,
self.group_public.id])]})
self.assertTrue(self._can_see(self.employee_user))
self.assertTrue(self._can_see(self.public_user))
self.assertTrue(self._can_see(self.portal_user))

def _can_see(self, user):
"""Check wether user can see the test menu."""
menu_model_sudo = self.menu_model.sudo(user.id)
can_see = self.menu_item in menu_model_sudo.search([])
return can_see

+ 40
- 0
website_menu_permission/views/website_views.xml View File

@@ -0,0 +1,40 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>

<record id="form_website_menu_permission" model="ir.ui.view">
<field name="name">website.menu.form.permission</field>
<field name="model">website.menu</field>
<field name="field_parent">child_id</field>
<field name="arch" type="xml">
<form id="form_website_menu" string="Website menu">
<group id="group_website_menu_details" colspan="6" col="4">
<field name="website_id" options="{'no_create': True}"/>
<field name="name"/>
<field name="url"/>
<field name="new_window"/>
<field name="parent_id"/>
</group>
<group id="group_website_menu_groups" colspan="6" col="1">
<label for="group_ids" />
<field name="group_ids" nolabel="1"/>
</group>
</form>
</field>
</record>

<record id="action_website_menu_permission" model="ir.actions.act_window">
<field name="name">Website Menu</field>
<field name="res_model">website.menu</field>
<field name="view_mode">tree,form</field>
<field name="context">{'search_default_my_websites':1}</field>
</record>

<menuitem
id="menu_website_menu_permission"
name="Website menu's"
action="action_website_menu_permission"
parent="website.menu_website_global_configuration"
sequence="40"
groups="base.group_no_one"/>

</odoo>

Loading…
Cancel
Save