summaryrefslogtreecommitdiff
path: root/addons
diff options
context:
space:
mode:
authormcm-odoo <mcm@odoo.com>2019-10-28 09:58:28 +0000
committerThibault Delavallée <tde@odoo.com>2019-12-12 14:12:51 +0000
commit90bf317c013323ed9f6195d61440e2bd0e09ac2c (patch)
tree91c6e68006b333fbfd241659b845740ea4ff598b /addons
parenta0fc349f045c5d92683e68c899031d3350f7d642 (diff)
[REF] website_slides: define specific eLearning user groups
PURPOSE Have user groups specific to eLearning to separate them from generic website editors. Indeed this is a specific work area and require more than pure design skills. SPECIFICATIONS Two user groups are added in this commit * group_website_slides_officer + can read any course/slide + can create a course (will be responsible) + can write on its courses + can upload slides to the courses he is responsible + can publish slides to the courses he is responsible - cannot unlink courses/slides (you should archive them) * implies group_website_publisher in order to see the top navbar in frontend with the publish toggle button and the new content button; * group_website_slides_manager: has full rights + can read any course/slide; + can create a course; + can add slide to any courses; + can publish any courses/slides; + can unlink any courses/slides; + has access to reporting menu entries; Rights for other groups are untouched for courses / slides. As a reminder we still support responsibles being outside of eLearning groups, for example if an employee is a teacher that handles a course: * people in upload_group_ids of a channel can upload slides, even if they don't belong to any eLearning group; * people responsible of a course can upload and publish slides even if they don't belong to any eLearning group (done through controller as they don't have real rights on underlying models); We choose to keep the survey rights separated from eLearning ones. Indeed it is easy in odoo to update the imply_ids field of groups if necessary to link survey / eLearning groups; default user template can also be updated easily. Standard Odoo should therefore correctly separate those groups. The only specific rights is that eLearning officers can read all surveys, allowing to choose them for certification-based courses. LINKS Task ID 2062462 PR #39485 Signed-off-by: Thibault Delavallee (tde) <tde@openerp.com>
Diffstat (limited to 'addons')
-rw-r--r--addons/website_sale_slides/tests/test_course_purchase_flow.py2
-rw-r--r--addons/website_slides/__manifest__.py7
-rw-r--r--addons/website_slides/data/res_users_demo.xml12
-rw-r--r--addons/website_slides/models/slide_channel.py10
-rw-r--r--addons/website_slides/models/slide_question.py6
-rw-r--r--addons/website_slides/models/slide_slide.py4
-rw-r--r--addons/website_slides/security/ir.model.access.csv22
-rw-r--r--addons/website_slides/security/website_slides_security.xml121
-rw-r--r--addons/website_slides/tests/common.py35
-rw-r--r--addons/website_slides/tests/test_karma.py10
-rw-r--r--addons/website_slides/tests/test_security.py114
-rw-r--r--addons/website_slides/tests/test_slide_utils.py4
-rw-r--r--addons/website_slides/tests/test_statistics.py18
-rw-r--r--addons/website_slides/tests/test_ui_wslides.py10
-rw-r--r--addons/website_slides/views/res_partner_views.xml2
-rw-r--r--addons/website_slides/views/slide_channel_views.xml8
-rw-r--r--addons/website_slides/views/website_slides_menu_views.xml3
-rw-r--r--addons/website_slides/views/website_slides_templates_course.xml4
-rw-r--r--addons/website_slides/views/website_slides_templates_homepage.xml4
-rw-r--r--addons/website_slides/views/website_slides_templates_utils.xml2
-rw-r--r--addons/website_slides_forum/security/ir.model.access.csv2
-rw-r--r--addons/website_slides_survey/__manifest__.py1
-rw-r--r--addons/website_slides_survey/models/survey_survey.py4
-rw-r--r--addons/website_slides_survey/security/ir.model.access.csv2
24 files changed, 284 insertions, 123 deletions
diff --git a/addons/website_sale_slides/tests/test_course_purchase_flow.py b/addons/website_sale_slides/tests/test_course_purchase_flow.py
index 09db54f7f21..25e8e3acea1 100644
--- a/addons/website_sale_slides/tests/test_course_purchase_flow.py
+++ b/addons/website_sale_slides/tests/test_course_purchase_flow.py
@@ -21,7 +21,7 @@ class TestCoursePurchaseFlow(common.SlidesCase):
'product_id': course_product.id
})
- self.channel_2 = self.env['slide.channel'].with_user(self.user_publisher).create({
+ self.channel_2 = self.env['slide.channel'].with_user(self.user_officer).create({
'name': 'Test Channel',
'enroll': 'payment',
'product_id': course_product.id
diff --git a/addons/website_slides/__manifest__.py b/addons/website_slides/__manifest__.py
index b8d0520a792..bdf317ef5ba 100644
--- a/addons/website_slides/__manifest__.py
+++ b/addons/website_slides/__manifest__.py
@@ -5,7 +5,7 @@
'sequence': 145,
'summary': 'Manage and publish an eLearning platform',
'website': 'https://www.odoo.com/page/slides',
- 'category': 'Website/Website',
+ 'category': 'Website/eLearning',
'description': """
Create Online Courses
=====================
@@ -26,6 +26,8 @@ Featuring
'website_profile',
],
'data': [
+ 'security/website_slides_security.xml',
+ 'security/ir.model.access.csv',
'views/assets.xml',
'views/res_config_settings_views.xml',
'views/res_partner_views.xml',
@@ -48,10 +50,9 @@ Featuring
'data/mail_data.xml',
'data/slide_data.xml',
'data/website_data.xml',
- 'security/ir.model.access.csv',
- 'security/website_slides_security.xml'
],
'demo': [
+ 'data/res_users_demo.xml',
'data/slide_channel_tag_demo.xml',
'data/slide_channel_demo.xml',
'data/slide_slide_demo.xml',
diff --git a/addons/website_slides/data/res_users_demo.xml b/addons/website_slides/data/res_users_demo.xml
new file mode 100644
index 00000000000..19597a51695
--- /dev/null
+++ b/addons/website_slides/data/res_users_demo.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<odoo>
+ <data noupdate="1">
+ <record id="website_slides.group_website_slides_officer" model="res.groups">
+ <field name="users" eval="[(4, ref('base.user_demo'))]"/>
+ </record>
+
+ <record id="website_slides.group_website_slides_manager" model="res.groups">
+ <field name="users" eval="[(4, ref('base.user_admin')), (4, ref('base.user_root'))]"/>
+ </record>
+ </data>
+</odoo>
diff --git a/addons/website_slides/models/slide_channel.py b/addons/website_slides/models/slide_channel.py
index 0c70cc82f47..7bbd323fff4 100644
--- a/addons/website_slides/models/slide_channel.py
+++ b/addons/website_slides/models/slide_channel.py
@@ -106,7 +106,7 @@ class Channel(models.Model):
slide_last_update = fields.Date('Last Update', compute='_compute_slide_last_update', store=True)
slide_partner_ids = fields.One2many(
'slide.slide.partner', 'channel_id', string="Slide User Data",
- copy=False, groups='website.group_website_publisher')
+ copy=False, groups='website_slides.group_website_slides_officer')
promote_strategy = fields.Selection([
('latest', 'Latest Published'),
('most_voted', 'Most Voted'),
@@ -156,7 +156,7 @@ class Channel(models.Model):
members_count = fields.Integer('Attendees count', compute='_compute_members_count')
members_done_count = fields.Integer('Attendees Done Count', compute='_compute_members_done_count')
is_member = fields.Boolean(string='Is Member', compute='_compute_is_member', compute_sudo=False)
- channel_partner_ids = fields.One2many('slide.channel.partner', 'channel_id', string='Members Information', groups='website.group_website_publisher', depends=['partner_ids'])
+ channel_partner_ids = fields.One2many('slide.channel.partner', 'channel_id', string='Members Information', groups='website_slides.group_website_slides_officer', depends=['partner_ids'])
upload_group_ids = fields.Many2many(
'res.groups', 'rel_upload_groups', 'channel_id', 'group_id', string='Upload Groups',
help="Group of users allowed to publish contents on a documentation course.")
@@ -276,12 +276,12 @@ class Channel(models.Model):
@api.depends_context('uid')
def _compute_can_upload(self):
for record in self:
- if record.user_id == self.env.user:
+ if record.user_id == self.env.user or self.env.is_superuser():
record.can_upload = True
elif record.upload_group_ids:
record.can_upload = bool(record.upload_group_ids & self.env.user.groups_id)
else:
- record.can_upload = self.env.user.has_group('website.group_website_publisher')
+ record.can_upload = self.env.user.has_group('website_slides.group_website_slides_manager')
@api.depends('channel_type', 'user_id', 'can_upload')
@api.depends_context('uid')
@@ -295,7 +295,7 @@ class Channel(models.Model):
elif record.user_id == self.env.user or self.env.is_superuser():
record.can_publish = True
else:
- record.can_publish = self.env.user.has_group('website.group_website_publisher')
+ record.can_publish = self.env.user.has_group('website_slides.group_website_slides_manager')
@api.model
def _get_can_publish_error_message(self):
diff --git a/addons/website_slides/models/slide_question.py b/addons/website_slides/models/slide_question.py
index c612f90b371..a77d28bbcec 100644
--- a/addons/website_slides/models/slide_question.py
+++ b/addons/website_slides/models/slide_question.py
@@ -16,9 +16,9 @@ class SlideQuestion(models.Model):
slide_id = fields.Many2one('slide.slide', string="Content", required=True)
answer_ids = fields.One2many('slide.answer', 'question_id', string="Answer")
# statistics
- attempts_count = fields.Integer(compute='_compute_statistics', groups='website.group_website_publisher')
- attempts_avg = fields.Float(compute="_compute_statistics", digits=(6, 2), groups='website.group_website_publisher')
- done_count = fields.Integer(compute="_compute_statistics", groups='website.group_website_publisher')
+ attempts_count = fields.Integer(compute='_compute_statistics', groups='website_slides.group_website_slides_officer')
+ attempts_avg = fields.Float(compute="_compute_statistics", digits=(6, 2), groups='website_slides.group_website_slides_officer')
+ done_count = fields.Integer(compute="_compute_statistics", groups='website_slides.group_website_slides_officer')
@api.constrains('answer_ids')
def _check_answers_integrity(self):
diff --git a/addons/website_slides/models/slide_slide.py b/addons/website_slides/models/slide_slide.py
index 57a40d140af..eb91b9f4725 100644
--- a/addons/website_slides/models/slide_slide.py
+++ b/addons/website_slides/models/slide_slide.py
@@ -132,8 +132,8 @@ class Slide(models.Model):
slide_ids = fields.One2many('slide.slide', "category_id", string="Slides")
# subscribers
partner_ids = fields.Many2many('res.partner', 'slide_slide_partner', 'slide_id', 'partner_id',
- string='Subscribers', groups='website.group_website_publisher', copy=False)
- slide_partner_ids = fields.One2many('slide.slide.partner', 'slide_id', string='Subscribers information', groups='website.group_website_publisher', copy=False)
+ string='Subscribers', groups='website_slides.group_website_slides_officer', copy=False)
+ slide_partner_ids = fields.One2many('slide.slide.partner', 'slide_id', string='Subscribers information', groups='website_slides.group_website_slides_officer', copy=False)
user_membership_id = fields.Many2one(
'slide.slide.partner', string="Subscriber information", compute='_compute_user_membership_id', compute_sudo=False,
help="Subscriber information for the current logged in user")
diff --git a/addons/website_slides/security/ir.model.access.csv b/addons/website_slides/security/ir.model.access.csv
index 2efb0211b16..b6d1a76ce44 100644
--- a/addons/website_slides/security/ir.model.access.csv
+++ b/addons/website_slides/security/ir.model.access.csv
@@ -1,23 +1,25 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_slide_slide_all,slide.slide.all,model_slide_slide,,1,0,0,0
-access_slide_slide_publisher,slide.slide.publisher,model_slide_slide,website.group_website_publisher,1,1,1,1
+access_slide_slide_officer,slide.slide.officer,model_slide_slide,website_slides.group_website_slides_officer,1,1,1,0
+access_slide_slide_manager,slide.slide.manager,model_slide_slide,website_slides.group_website_slides_manager,1,1,1,1
access_slide_slide_partner_all,slide.slide.partner.all,model_slide_slide_partner,,0,0,0,0
-access_slide_slide_partner_system,slide.slide.partner.system,model_slide_slide_partner,website.group_website_publisher,1,1,1,1
+access_slide_slide_partner_system,slide.slide.partner.system,model_slide_slide_partner,website_slides.group_website_slides_officer,1,1,1,1
access_slide_question_all,slide.question.all,model_slide_question,,1,0,0,0
-access_slide_question_publisher,slide.question.publisher,model_slide_question,website.group_website_publisher,1,1,1,1
+access_slide_question_officer,slide.question.officer,model_slide_question,website_slides.group_website_slides_officer,1,1,1,1
access_slide_answer_all,slide.answer.all,model_slide_answer,,0,0,0,0
-access_slide_answer_publisher,slide.answer.publisher,model_slide_answer,website.group_website_publisher,1,1,1,1
+access_slide_answer_officer,slide.answer.officer,model_slide_answer,website_slides.group_website_slides_officer,1,1,1,1
access_slide_tag_all,slide.tag.all,model_slide_tag,,1,0,0,0
-access_slide_tag_publisher,slide.tag.publisher,model_slide_tag,website.group_website_publisher,1,1,1,1
+access_slide_tag_officer,slide.tag.officer,model_slide_tag,website_slides.group_website_slides_officer,1,1,1,1
access_slide_channel_tag_all,slide.channel.tag.all,model_slide_channel_tag,,1,0,0,0
-access_slide_channel_tag_user,slide.channel.tag.user,model_slide_channel_tag,website.group_website_publisher,1,1,1,1
+access_slide_channel_tag_user,slide.channel.tag.user,model_slide_channel_tag,website_slides.group_website_slides_officer,1,1,1,1
access_slide_channel_tag_group_all,slide.channel.tag.group.all,model_slide_channel_tag_group,,1,0,0,0
-access_slide_channel_tag_group_user,slide.channel.tag.group.user,model_slide_channel_tag_group,website.group_website_publisher,1,1,1,1
+access_slide_channel_tag_group_user,slide.channel.tag.group.user,model_slide_channel_tag_group,website_slides.group_website_slides_officer,1,1,1,1
access_slide_channel_all,slide.channel.all,model_slide_channel,,1,0,0,0
-access_slide_channel_publisher,slide.channel.publisher,model_slide_channel,website.group_website_publisher,1,1,1,1
+access_slide_channel_officer,slide.channel.officer,model_slide_channel,website_slides.group_website_slides_officer,1,1,1,0
+access_slide_channel_manager,slide.channel.manager,model_slide_channel,website_slides.group_website_slides_manager,1,1,1,1
access_slide_channel_partners_all,slide.channel.users.all,model_slide_channel_partner,,0,0,0,0
-access_slide_channel_partners_system,slide.channel.users.system,model_slide_channel_partner,website.group_website_publisher,1,1,1,1
+access_slide_channel_partners_system,slide.channel.users.system,model_slide_channel_partner,website_slides.group_website_slides_officer,1,1,1,1
access_slide_embed_all,slide.embed.all,model_slide_embed,,1,0,0,0
access_slide_embed_user,slide.embed.user,model_slide_embed,base.group_user,1,1,1,1
access_slide_slide_link_all,slide.slide.link.all,model_slide_slide_link,,1,0,0,0
-access_slide_slide_link_publisher,slide.slide.link.publisher,model_slide_slide_link,website.group_website_publisher,1,1,1,1 \ No newline at end of file
+access_slide_slide_link_officer,slide.slide.link.officer,model_slide_slide_link,website_slides.group_website_slides_officer,1,1,1,1 \ No newline at end of file
diff --git a/addons/website_slides/security/website_slides_security.xml b/addons/website_slides/security/website_slides_security.xml
index aeb16d43c1d..a6a347dd85f 100644
--- a/addons/website_slides/security/website_slides_security.xml
+++ b/addons/website_slides/security/website_slides_security.xml
@@ -1,6 +1,30 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data noupdate="0">
+ <record model="ir.module.category" id="base.module_category_website_elearning">
+ <field name="sequence">21</field>
+ </record>
+
+ <record id="group_website_slides_officer" model="res.groups">
+ <field name="name">Officer</field>
+ <field name="category_id" ref="base.module_category_website_elearning"/>
+ <field name="implied_ids" eval="[(4, ref('website.group_website_publisher'))]"/>
+ </record>
+
+ <record id="group_website_slides_manager" model="res.groups">
+ <field name="name">Manager</field>
+ <field name="category_id" ref="base.module_category_website_elearning"/>
+ <field name="implied_ids" eval="[(4, ref('group_website_slides_officer'))]"/>
+ </record>
+
+ <record id="base.default_user" model="res.users">
+ <field name="groups_id" eval="[(4,ref('group_website_slides_manager'))]"/>
+ </record>
+
+ <record id="base.group_system" model="res.groups">
+ <field name="implied_ids" eval="[(4, ref('group_website_slides_manager'))]"/>
+ </record>
+
<!-- CHANNEL -->
<record id="rule_slide_channel_global" model="ir.rule">
<field name="name">Channel: always visible (sub rules exist)</field>
@@ -10,17 +34,46 @@
</record>
<record id="rule_slide_channel_not_website" model="ir.rule">
- <field name="name">Channel: public/portal/user: restricted to published and visible or member only</field>
+ <field name="name">Channel: public/portal/user: restricted to published and (public or member only)</field>
<field name="model_id" ref="model_slide_channel"/>
<field name="groups" eval="[(4, ref('base.group_public')), (4, ref('base.group_portal')), (4, ref('base.group_user'))]"/>
<field name="domain_force">['&amp;', ('website_published', '=', True), '|', ('visibility', '=', 'public'), ('partner_ids', '=', user.partner_id.id)]</field>
+ <field name="perm_unlink" eval="0"/>
+ <field name="perm_write" eval="0"/>
+ <field name="perm_read" eval="1"/>
+ <field name="perm_create" eval="0"/>
</record>
- <record id="rule_slide_channel_website" model="ir.rule">
- <field name="name">Channel: website group: access all</field>
+ <record id="rule_slide_channel_officer_r" model="ir.rule">
+ <field name="name">Channel: officer: read all</field>
<field name="model_id" ref="model_slide_channel"/>
- <field name="groups" eval="[(4, ref('website.group_website_publisher'))]"/>
<field name="domain_force">[(1, '=', 1)]</field>
+ <field name="groups" eval="[(4, ref('group_website_slides_officer'))]"/>
+ <field name="perm_unlink" eval="0"/>
+ <field name="perm_write" eval="0"/>
+ <field name="perm_read" eval="1"/>
+ <field name="perm_create" eval="0"/>
+ </record>
+ <record id="rule_slide_channel_officer_cw" model="ir.rule">
+ <field name="name">Channel: officer: create/write own only</field>
+ <field name="model_id" ref="model_slide_channel"/>
+ <field name="domain_force">[('user_id', '=', user.id)]</field>
+ <field name="groups" eval="[(4, ref('group_website_slides_officer'))]"/>
+ <field name="perm_unlink" eval="0"/>
+ <field name="perm_write" eval="1"/>
+ <field name="perm_read" eval="0"/>
+ <field name="perm_create" eval="1"/>
+ </record>
+
+ <record id="rule_slide_channel_manager" model="ir.rule">
+ <field name="name">Channel: manager: crud all</field>
+ <field name="model_id" ref="model_slide_channel"/>
+ <field name="domain_force">[(1, '=', 1)]</field>
+ <field name="groups" eval="[(4, ref('group_website_slides_manager'))]"/>
+ <field name="perm_unlink" eval="1"/>
+ <field name="perm_write" eval="1"/>
+ <field name="perm_read" eval="1"/>
+ <field name="perm_create" eval="1"/>
</record>
<!-- SLIDE -->
@@ -40,13 +93,67 @@
'&amp;', ('channel_id.visibility', '=', 'public'), '|', ('is_category','=', True), ('is_preview', '=', True),
('channel_id.partner_ids', '=', user.partner_id.id),
'&amp;', ('channel_id.website_published', '=', True), '|', ('user_id', '=', user.id), ('website_published', '=', True)]</field>
+ <field name="perm_unlink" eval="0"/>
+ <field name="perm_write" eval="0"/>
+ <field name="perm_read" eval="1"/>
+ <field name="perm_create" eval="0"/>
</record>
- <record id="rule_slide_slide_website" model="ir.rule">
- <field name="name">Slide: website group: access all</field>
+ <record id="rule_slide_slide_officer_r" model="ir.rule">
+ <field name="name">Slide: officer: read all</field>
<field name="model_id" ref="model_slide_slide"/>
- <field name="groups" eval="[(4, ref('website.group_website_publisher'))]"/>
<field name="domain_force">[(1, '=', 1)]</field>
+ <field name="groups" eval="[(4, ref('group_website_slides_officer'))]"/>
+ <field name="perm_unlink" eval="0"/>
+ <field name="perm_write" eval="0"/>
+ <field name="perm_read" eval="1"/>
+ <field name="perm_create" eval="0"/>
+ </record>
+
+ <record id="rule_slide_slide_officer_cw" model="ir.rule">
+ <field name="name">Slide: officer: create/write own only</field>
+ <field name="model_id" ref="model_slide_slide"/>
+ <field name="domain_force">[('channel_id.user_id', '=', user.id)]</field>
+ <field name="groups" eval="[(4, ref('group_website_slides_officer'))]"/>
+ <field name="perm_unlink" eval="0"/>
+ <field name="perm_write" eval="1"/>
+ <field name="perm_read" eval="0"/>
+ <field name="perm_create" eval="1"/>
+ </record>
+
+ <record id="rule_slide_slide_manager" model="ir.rule">
+ <field name="name">Slide: manager: crud all</field>
+ <field name="model_id" ref="model_slide_slide"/>
+ <field name="domain_force">[(1, '=', 1)]</field>
+ <field name="groups" eval="[(4, ref('group_website_slides_manager'))]"/>
+ <field name="perm_unlink" eval="1"/>
+ <field name="perm_write" eval="1"/>
+ <field name="perm_read" eval="1"/>
+ <field name="perm_create" eval="1"/>
+ </record>
+
+ <!-- CHANNEL PARTNER -->
+ <record id="rule_slide_channel_partner_officer" model="ir.rule">
+ <field name="name">Channel Partner: officer: create/write/unlink own only</field>
+ <field name="model_id" ref="model_slide_channel_partner"/>
+ <field name="domain_force">[('channel_id.user_id', '=', user.id)]</field>
+ <field name="groups" eval="[(4, ref('group_website_slides_officer'))]"/>
+ <field name="perm_unlink" eval="1"/>
+ <field name="perm_write" eval="1"/>
+ <field name="perm_read" eval="0"/>
+ <field name="perm_create" eval="1"/>
+ </record>
+
+ <!-- SLIDE PARTNER -->
+ <record id="rule_slide_slide_partner_officer" model="ir.rule">
+ <field name="name">Slide Partner: officer: create/write/unlink own only</field>
+ <field name="model_id" ref="model_slide_slide_partner"/>
+ <field name="domain_force">[('channel_id.user_id', '=', user.id)]</field>
+ <field name="groups" eval="[(4, ref('group_website_slides_officer'))]"/>
+ <field name="perm_unlink" eval="1"/>
+ <field name="perm_write" eval="1"/>
+ <field name="perm_read" eval="0"/>
+ <field name="perm_create" eval="1"/>
</record>
</data>
</odoo> \ No newline at end of file
diff --git a/addons/website_slides/tests/common.py b/addons/website_slides/tests/common.py
index e979fade22e..4e879865254 100644
--- a/addons/website_slides/tests/common.py
+++ b/addons/website_slides/tests/common.py
@@ -1,12 +1,8 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
-from contextlib import contextmanager
-from functools import partial
-
-from odoo.tests import common, new_test_user
-
-slides_new_test_user = partial(new_test_user, context={'mail_create_nolog': True, 'mail_create_nosubscribe': True, 'mail_notrack': True, 'no_reset_password': True})
+from odoo.tests import common
+from odoo.addons.mail.tests.common import mail_new_test_user
class SlidesCase(common.SavepointCase):
@@ -15,22 +11,27 @@ class SlidesCase(common.SavepointCase):
def setUpClass(cls):
super(SlidesCase, cls).setUpClass()
- cls.user_publisher = slides_new_test_user(
- cls.env, name='Paul Publisher', login='user_publisher', email='publisher@example.com',
- groups='base.group_user,website.group_website_publisher'
+ cls.user_officer = mail_new_test_user(
+ cls.env, name='Ophélie Officer', login='user_officer', email='officer@example.com',
+ groups='base.group_user,website_slides.group_website_slides_officer'
+ )
+
+ cls.user_manager = mail_new_test_user(
+ cls.env, name='Manuel Manager', login='user_manager', email='manager@example.com',
+ groups='base.group_user,website_slides.group_website_slides_manager'
)
- cls.user_emp = slides_new_test_user(
+ cls.user_emp = mail_new_test_user(
cls.env, name='Eglantine Employee', login='user_emp', email='employee@example.com',
groups='base.group_user'
)
- cls.user_portal = slides_new_test_user(
+ cls.user_portal = mail_new_test_user(
cls.env, name='Patrick Portal', login='user_portal', email='portal@example.com',
groups='base.group_portal'
)
- cls.user_public = slides_new_test_user(
+ cls.user_public = mail_new_test_user(
cls.env, name='Pauline Public', login='user_public', email='public@example.com',
groups='base.group_public'
)
@@ -40,7 +41,7 @@ class SlidesCase(common.SavepointCase):
'email': 'customer@example.com',
})
- cls.channel = cls.env['slide.channel'].with_user(cls.user_publisher).create({
+ cls.channel = cls.env['slide.channel'].with_user(cls.user_officer).create({
'name': 'Test Channel',
'channel_type': 'documentation',
'promote_strategy': 'most_voted',
@@ -51,7 +52,7 @@ class SlidesCase(common.SavepointCase):
'karma_gen_slide_vote': 5,
'karma_gen_channel_rank': 10,
})
- cls.slide = cls.env['slide.slide'].with_user(cls.user_publisher).create({
+ cls.slide = cls.env['slide.slide'].with_user(cls.user_officer).create({
'name': 'How To Cook Humans',
'channel_id': cls.channel.id,
'slide_type': 'presentation',
@@ -59,14 +60,14 @@ class SlidesCase(common.SavepointCase):
'completion_time': 2.0,
'sequence': 1,
})
- cls.category = cls.env['slide.slide'].with_user(cls.user_publisher).create({
+ cls.category = cls.env['slide.slide'].with_user(cls.user_officer).create({
'name': 'Cooking Tips for Humans',
'channel_id': cls.channel.id,
'is_category': True,
'is_published': True,
'sequence': 2,
})
- cls.slide_2 = cls.env['slide.slide'].with_user(cls.user_publisher).create({
+ cls.slide_2 = cls.env['slide.slide'].with_user(cls.user_officer).create({
'name': 'How To Cook For Humans',
'channel_id': cls.channel.id,
'slide_type': 'presentation',
@@ -74,7 +75,7 @@ class SlidesCase(common.SavepointCase):
'completion_time': 3.0,
'sequence': 3,
})
- cls.slide_3 = cls.env['slide.slide'].with_user(cls.user_publisher).create({
+ cls.slide_3 = cls.env['slide.slide'].with_user(cls.user_officer).create({
'name': 'How To Cook Humans For Humans',
'channel_id': cls.channel.id,
'slide_type': 'document',
diff --git a/addons/website_slides/tests/test_karma.py b/addons/website_slides/tests/test_karma.py
index c49a8224168..cc92b1c4f3e 100644
--- a/addons/website_slides/tests/test_karma.py
+++ b/addons/website_slides/tests/test_karma.py
@@ -13,7 +13,7 @@ class TestKarmaGain(common.SlidesCase):
def setUp(self):
super(TestKarmaGain, self).setUp()
- self.channel_2 = self.env['slide.channel'].with_user(self.user_publisher).create({
+ self.channel_2 = self.env['slide.channel'].with_user(self.user_officer).create({
'name': 'Test Channel 2',
'channel_type': 'training',
'promote_strategy': 'most_voted',
@@ -25,14 +25,14 @@ class TestKarmaGain(common.SlidesCase):
'karma_gen_channel_rank': 10,
})
- self.slide_2_0 = self.env['slide.slide'].with_user(self.user_publisher).create({
+ self.slide_2_0 = self.env['slide.slide'].with_user(self.user_officer).create({
'name': 'How to travel through space and time',
'channel_id': self.channel_2.id,
'slide_type': 'presentation',
'is_published': True,
'completion_time': 2.0,
})
- self.slide_2_1 = self.env['slide.slide'].with_user(self.user_publisher).create({
+ self.slide_2_1 = self.env['slide.slide'].with_user(self.user_officer).create({
'name': 'How to duplicate yourself',
'channel_id': self.channel_2.id,
'slide_type': 'presentation',
@@ -41,7 +41,7 @@ class TestKarmaGain(common.SlidesCase):
})
@mute_logger('odoo.models')
- @users('user_emp', 'user_portal', 'user_publisher')
+ @users('user_emp', 'user_portal', 'user_officer')
def test_karma_gain(self):
user = self.env.user
user.write({'karma': 0})
@@ -86,7 +86,7 @@ class TestKarmaGain(common.SlidesCase):
self.assertEqual(user.karma, computed_karma)
@mute_logger('odoo.models')
- @users('user_emp', 'user_portal', 'user_publisher')
+ @users('user_emp', 'user_portal', 'user_officer')
def test_karma_gain_multiple_course(self):
user = self.env.user
user.write({'karma': 0})
diff --git a/addons/website_slides/tests/test_security.py b/addons/website_slides/tests/test_security.py
index 18d61942e77..1f5eecc3143 100644
--- a/addons/website_slides/tests/test_security.py
+++ b/addons/website_slides/tests/test_security.py
@@ -16,12 +16,14 @@ class TestAccess(common.SlidesCase):
""" Invite channels don't give enroll if not member """
self.channel.write({'enroll': 'invite'})
- self.channel.with_user(self.user_publisher).read(['name'])
+ self.channel.with_user(self.user_officer).read(['name'])
+ self.channel.with_user(self.user_manager).read(['name'])
self.channel.with_user(self.user_emp).read(['name'])
self.channel.with_user(self.user_portal).read(['name'])
self.channel.with_user(self.user_public).read(['name'])
- self.slide.with_user(self.user_publisher).read(['name'])
+ self.slide.with_user(self.user_officer).read(['name'])
+ self.slide.with_user(self.user_manager).read(['name'])
with self.assertRaises(AccessError):
self.slide.with_user(self.user_emp).read(['name'])
@@ -49,12 +51,14 @@ class TestAccess(common.SlidesCase):
""" Public channels don't give enroll if not member """
self.channel.write({'enroll': 'public'})
- self.channel.with_user(self.user_publisher).read(['name'])
+ self.channel.with_user(self.user_officer).read(['name'])
+ self.channel.with_user(self.user_manager).read(['name'])
self.channel.with_user(self.user_emp).read(['name'])
self.channel.with_user(self.user_portal).read(['name'])
self.channel.with_user(self.user_public).read(['name'])
- self.slide.with_user(self.user_publisher).read(['name'])
+ self.slide.with_user(self.user_officer).read(['name'])
+ self.slide.with_user(self.user_manager).read(['name'])
with self.assertRaises(AccessError):
self.slide.with_user(self.user_emp).read(['name'])
@@ -65,13 +69,15 @@ class TestAccess(common.SlidesCase):
@mute_logger('odoo.models', 'odoo.addons.base.models.ir_rule')
def test_access_channel_publish(self):
- """ Unpublished channels and their content are visible only to website people """
+ """ Unpublished channels and their content are visible only to eLearning people """
self.channel.write({'is_published': False, 'enroll': 'public'})
self.channel.flush(['is_published', 'website_published', 'enroll'])
- # channel available only to website
+ # channel available only to eLearning
self.channel.invalidate_cache(['name'])
- self.channel.with_user(self.user_publisher).read(['name'])
+ self.channel.with_user(self.user_officer).read(['name'])
+ self.channel.invalidate_cache(['name'])
+ self.channel.with_user(self.user_manager).read(['name'])
with self.assertRaises(AccessError):
self.channel.invalidate_cache(['name'])
self.channel.with_user(self.user_emp).read(['name'])
@@ -82,9 +88,11 @@ class TestAccess(common.SlidesCase):
self.channel.invalidate_cache(['name'])
self.channel.with_user(self.user_public).read(['name'])
- # slide available only to website
+ # slide available only to eLearning
+ self.channel.invalidate_cache(['name'])
+ self.slide.with_user(self.user_officer).read(['name'])
self.channel.invalidate_cache(['name'])
- self.slide.with_user(self.user_publisher).read(['name'])
+ self.slide.with_user(self.user_manager).read(['name'])
with self.assertRaises(AccessError):
self.slide.invalidate_cache(['name'])
self.slide.with_user(self.user_emp).read(['name'])
@@ -117,7 +125,9 @@ class TestAccess(common.SlidesCase):
self.slide.flush(['is_preview', 'website_published'])
self.slide.invalidate_cache(['name'])
- self.slide.with_user(self.user_publisher).read(['name'])
+ self.slide.with_user(self.user_officer).read(['name'])
+ self.slide.invalidate_cache(['name'])
+ self.slide.with_user(self.user_manager).read(['name'])
with self.assertRaises(AccessError):
self.slide.invalidate_cache(['name'])
self.slide.with_user(self.user_emp).read(['name'])
@@ -135,7 +145,8 @@ class TestAccess(common.SlidesCase):
self.slide.write({'is_preview': True})
self.slide.flush(['is_preview'])
- self.slide.with_user(self.user_publisher).read(['name'])
+ self.slide.with_user(self.user_officer).read(['name'])
+ self.slide.with_user(self.user_manager).read(['name'])
self.slide.with_user(self.user_emp).read(['name'])
self.slide.with_user(self.user_portal).read(['name'])
self.slide.with_user(self.user_public).read(['name'])
@@ -169,7 +180,7 @@ class TestRemoveMembership(common.SlidesCase):
def test_slide_partner_remove(self):
id_slide_partner = self.slide_partner.id
id_channel_partner = self.channel_partner.id
- self.channel_partner.with_user(self.user_publisher).unlink()
+ self.channel_partner.with_user(self.user_officer).unlink()
self.assertFalse(self.env['slide.channel.partner'].search([('id', '=', '%d' % id_channel_partner)]))
# Slide(s) related to the channel and the partner is unlink too.
self.assertFalse(self.env['slide.slide.partner'].search([('id', '=', '%d' % id_slide_partner)]))
@@ -182,7 +193,7 @@ class TestAccessFeatures(common.SlidesCase):
def test_channel_auto_subscription(self):
user_employees = self.env['res.users'].search([('groups_id', 'in', self.ref('base.group_user'))])
- channel = self.env['slide.channel'].with_user(self.user_publisher).create({
+ channel = self.env['slide.channel'].with_user(self.user_officer).create({
'name': 'Test',
'enroll': 'invite',
'is_published': True,
@@ -222,38 +233,65 @@ class TestAccessFeatures(common.SlidesCase):
self.assertEqual(channel.partner_ids, user_employees.mapped('partner_id') | new_user.partner_id | new_user_2.partner_id | new_user_3.partner_id)
@mute_logger('odoo.models', 'odoo.addons.base.models.ir_rule')
- def test_channel_features(self):
- channel_publisher = self.channel.with_user(self.user_publisher)
- self.assertEqual(channel_publisher.user_id, self.user_publisher)
- self.assertTrue(channel_publisher.can_upload)
- self.assertTrue(channel_publisher.can_publish)
-
- # test upload group limitation: member of group_system OR responsible
- channel_publisher.write({'upload_group_ids': [(4, self.ref('base.group_system'))]})
- self.assertTrue(channel_publisher.can_upload)
- self.assertTrue(channel_publisher.can_publish)
- channel_publisher.write({'user_id': self.env.user.id})
- self.assertFalse(channel_publisher.can_upload)
- self.assertFalse(channel_publisher.can_publish)
- channel_publisher.write({'upload_group_ids': [(5, 0)]})
- self.assertTrue(channel_publisher.can_upload)
- self.assertTrue(channel_publisher.can_publish)
-
- # share people cannot upload / publish if limited to employees
- channel_publisher.write({'upload_group_ids': [(4, self.ref('base.group_user'))]})
+ def test_channel_access_fields_employee(self):
+ channel_manager = self.channel.with_user(self.user_manager)
+ channel_emp = self.channel.with_user(self.user_emp)
channel_portal = self.channel.with_user(self.user_portal)
+ self.assertFalse(channel_emp.can_upload)
+ self.assertFalse(channel_emp.can_publish)
self.assertFalse(channel_portal.can_upload)
self.assertFalse(channel_portal.can_publish)
- # standard people can upload if groups are ok but not publish
- channel_emp = self.channel.with_user(self.user_emp)
+ # allow employees to upload
+ channel_manager.write({'upload_group_ids': [(4, self.ref('base.group_user'))]})
self.assertTrue(channel_emp.can_upload)
self.assertFalse(channel_emp.can_publish)
+ self.assertFalse(channel_portal.can_upload)
+ self.assertFalse(channel_portal.can_publish)
- # standard limitation is for publishers
- channel_publisher.write({'upload_group_ids': [(5, 0)]})
- self.assertFalse(channel_emp.can_upload)
- self.assertFalse(channel_emp.can_publish)
+ @mute_logger('odoo.models', 'odoo.addons.base.models.ir_rule')
+ def test_channel_access_fields_officer(self):
+ self.assertEqual(self.channel.user_id, self.user_officer)
+
+ channel_officer = self.channel.with_user(self.user_officer)
+ self.assertTrue(channel_officer.can_upload)
+ self.assertTrue(channel_officer.can_publish)
+
+ channel_officer.write({'upload_group_ids': [(4, self.ref('base.group_system'))]})
+ self.assertTrue(channel_officer.can_upload)
+ self.assertTrue(channel_officer.can_publish)
+
+ channel_manager = self.channel.with_user(self.user_manager)
+ channel_manager.write({
+ 'upload_group_ids': [(5, 0)],
+ 'user_id': self.user_manager.id
+ })
+ self.assertFalse(channel_officer.can_upload)
+ self.assertFalse(channel_officer.can_publish)
+ self.assertTrue(channel_manager.can_upload)
+ self.assertTrue(channel_manager.can_publish)
+
+ @mute_logger('odoo.models', 'odoo.addons.base.models.ir_rule')
+ def test_channel_access_fields_manager(self):
+ channel_manager = self.channel.with_user(self.user_manager)
+ self.assertTrue(channel_manager.can_upload)
+ self.assertTrue(channel_manager.can_publish)
+
+ # test upload group limitation: member of group_system OR responsible OR manager
+ channel_manager.write({'upload_group_ids': [(4, self.ref('base.group_system'))]})
+ self.assertFalse(channel_manager.can_upload)
+ self.assertFalse(channel_manager.can_publish)
+ channel_manager.write({'user_id': self.user_manager.id})
+ self.assertTrue(channel_manager.can_upload)
+ self.assertTrue(channel_manager.can_publish)
+
+ # Needs the manager to write on channel as user_officer is not the responsible anymore
+ channel_manager.write({'upload_group_ids': [(5, 0)]})
+ self.assertTrue(channel_manager.can_upload)
+ self.assertTrue(channel_manager.can_publish)
+ channel_manager.write({'user_id': self.user_officer.id})
+ self.assertTrue(channel_manager.can_upload)
+ self.assertTrue(channel_manager.can_publish)
# superuser should always be able to publish even if he's not the responsible
channel_superuser = self.channel.sudo()
diff --git a/addons/website_slides/tests/test_slide_utils.py b/addons/website_slides/tests/test_slide_utils.py
index d934d2d5b13..158d59e94a3 100644
--- a/addons/website_slides/tests/test_slide_utils.py
+++ b/addons/website_slides/tests/test_slide_utils.py
@@ -7,7 +7,7 @@ from odoo.tests.common import users
class TestSequencing(slides_common.SlidesCase):
- @users('user_publisher')
+ @users('user_officer')
def test_category_update(self):
self.assertEqual(self.channel.slide_category_ids, self.category)
self.assertEqual(self.channel.slide_content_ids, self.slide | self.slide_2 | self.slide_3)
@@ -53,7 +53,7 @@ class TestSequencing(slides_common.SlidesCase):
self.assertEqual(new_slide.category_id, self.env['slide.slide'])
self.assertEqual(self.slide_3.category_id, self.env['slide.slide'])
- @users('user_publisher')
+ @users('user_officer')
def test_resequence(self):
self.category.write({'sequence': 4})
self.slide_2.write({'sequence': 8})
diff --git a/addons/website_slides/tests/test_statistics.py b/addons/website_slides/tests/test_statistics.py
index ae5c406f361..80ce7e5b7e6 100644
--- a/addons/website_slides/tests/test_statistics.py
+++ b/addons/website_slides/tests/test_statistics.py
@@ -23,9 +23,9 @@ class TestChannelStatistics(common.SlidesCase):
self.assertTrue(all(slide.is_new_slide for slide in (self.slide | self.slide_2)))
self.assertFalse(self.slide_3.is_new_slide)
- channel_aspublisher = self.channel.with_user(self.user_publisher)
+ channel_aspublisher = self.channel.with_user(self.user_officer)
self.assertTrue(channel_aspublisher.partner_has_new_content)
- (self.slide | self.slide_2).with_user(self.user_publisher).action_set_completed()
+ (self.slide | self.slide_2).with_user(self.user_officer).action_set_completed()
self.assertFalse(channel_aspublisher.partner_has_new_content)
channel_aspublisher._action_add_members(self.user_portal.partner_id)
@@ -38,7 +38,7 @@ class TestChannelStatistics(common.SlidesCase):
@mute_logger('odoo.models')
def test_channel_statistics(self):
- channel_publisher = self.channel.with_user(self.user_publisher)
+ channel_publisher = self.channel.with_user(self.user_officer)
# slide type computation
self.assertEqual(channel_publisher.total_slides, len(channel_publisher.slide_content_ids))
self.assertEqual(channel_publisher.nbr_infographic, len(channel_publisher.slide_content_ids.filtered(lambda s: s.slide_type == 'infographic')))
@@ -54,11 +54,11 @@ class TestChannelStatistics(common.SlidesCase):
channel_publisher._action_add_members(self.user_emp.partner_id)
channel_publisher.invalidate_cache(['partner_ids'])
self.assertEqual(channel_publisher.members_count, 2)
- self.assertEqual(channel_publisher.partner_ids, self.user_publisher.partner_id | self.user_emp.partner_id)
+ self.assertEqual(channel_publisher.partner_ids, self.user_officer.partner_id | self.user_emp.partner_id)
@mute_logger('odoo.models')
def test_channel_user_statistics(self):
- channel_publisher = self.channel.with_user(self.user_publisher)
+ channel_publisher = self.channel.with_user(self.user_officer)
channel_publisher.write({
'enroll': 'invite',
})
@@ -114,7 +114,7 @@ class TestChannelStatistics(common.SlidesCase):
class TestSlideStatistics(common.SlidesCase):
def test_slide_user_statistics(self):
- channel_publisher = self.channel.with_user(self.user_publisher)
+ channel_publisher = self.channel.with_user(self.user_officer)
channel_publisher._action_add_members(self.user_emp.partner_id)
channel_publisher.invalidate_cache(['partner_ids'])
@@ -136,7 +136,7 @@ class TestSlideStatistics(common.SlidesCase):
self.assertEqual(slide_emp.user_vote, -1)
def test_slide_statistics_views(self):
- channel_publisher = self.channel.with_user(self.user_publisher)
+ channel_publisher = self.channel.with_user(self.user_officer)
channel_publisher._action_add_members(self.user_emp.partner_id)
self.assertEqual(self.slide.slide_views, 0)
@@ -155,7 +155,7 @@ class TestSlideStatistics(common.SlidesCase):
self.assertEqual(slide_emp.public_views, 4)
self.assertEqual(slide_emp.total_views, 5)
- @users('user_publisher')
+ @users('user_officer')
def test_slide_statistics_types(self):
category = self.category.with_user(self.env.user)
self.assertEqual(
@@ -166,7 +166,7 @@ class TestSlideStatistics(common.SlidesCase):
len(category.channel_id.slide_ids.filtered(lambda s: s.category_id == category and s.slide_type == 'document')))
self.assertEqual(category.total_slides, 2, 'The first category should contain 2 slides')
- other_category = self.env['slide.slide'].with_user(self.user_publisher).create({
+ other_category = self.env['slide.slide'].with_user(self.user_officer).create({
'name': 'Other Category',
'channel_id': self.channel.id,
'is_category': True,
diff --git a/addons/website_slides/tests/test_ui_wslides.py b/addons/website_slides/tests/test_ui_wslides.py
index 3a96a559677..d25249fadd9 100644
--- a/addons/website_slides/tests/test_ui_wslides.py
+++ b/addons/website_slides/tests/test_ui_wslides.py
@@ -111,11 +111,11 @@ class TestUi(TestUICommon):
'odoo.__DEBUG__.services["web_tour.tour"].tours.course_member.ready',
login=user_demo.login)
- def test_course_member_website_publisher(self):
+ def test_course_member_elearning_officer(self):
user_demo = self.user_demo
user_demo.flush()
user_demo.write({
- 'groups_id': [(5, 0), (4, self.env.ref('base.group_user').id), (4, self.env.ref('website.group_website_publisher').id)]
+ 'groups_id': [(5, 0), (4, self.env.ref('base.group_user').id), (4, self.env.ref('website_slides.group_website_slides_officer').id)]
})
self.browser_js(
@@ -153,13 +153,11 @@ class TestUiYoutube(HttpCaseWithUserDemo):
'odoo.__DEBUG__.services["web_tour.tour"].tours.course_member_youtube.ready',
login=user_demo.login)
- def test_course_publisher_website_designer(self):
- # remove membership because we need to be able to join the course during the tour
- # group_website_designer
+ def test_course_publisher_elearning_manager(self):
user_demo = self.user_demo
user_demo.flush()
user_demo.write({
- 'groups_id': [(5, 0), (4, self.env.ref('base.group_user').id), (4, self.env.ref('website.group_website_designer').id)]
+ 'groups_id': [(5, 0), (4, self.env.ref('base.group_user').id), (4, self.env.ref('website_slides.group_website_slides_manager').id)]
})
self.browser_js(
diff --git a/addons/website_slides/views/res_partner_views.xml b/addons/website_slides/views/res_partner_views.xml
index 4f4f9d3c425..cbdac1cfdca 100644
--- a/addons/website_slides/views/res_partner_views.xml
+++ b/addons/website_slides/views/res_partner_views.xml
@@ -5,7 +5,7 @@
<field name="name">res.partner.view.form.inherit.slides</field>
<field name="model">res.partner</field>
<field name="inherit_id" ref="base.view_partner_form"/>
- <field name="groups_id" eval="[(4, ref('website.group_website_publisher'))]"/>
+ <field name="groups_id" eval="[(4, ref('website_slides.group_website_slides_officer'))]"/>
<field name="arch" type="xml">
<xpath expr="//div[@name='button_box']" position="inside">
<button class="oe_stat_button" type="object"
diff --git a/addons/website_slides/views/slide_channel_views.xml b/addons/website_slides/views/slide_channel_views.xml
index dad353b9f88..cd4b5b68ba4 100644
--- a/addons/website_slides/views/slide_channel_views.xml
+++ b/addons/website_slides/views/slide_channel_views.xml
@@ -16,7 +16,7 @@
type="object"
icon="fa-files-o"
class="oe_stat_button"
- groups="website.group_website_publisher">
+ groups="website_slides.group_website_slides_officer">
<div class="o_field_widget o_stat_info">
<span class="o_stat_value"><field name="total_slides" nolabel="1"/></span>
<span name="total_slides_label" class="o_stat_text">Contents</span>
@@ -26,7 +26,7 @@
type="object"
icon="fa-trophy"
class="oe_stat_button"
- groups="website.group_website_publisher">
+ groups="website_slides.group_website_slides_officer">
<div class="o_field_widget o_stat_info">
<span class="o_stat_value"><field name="members_done_count" nolabel="1"/></span>
<span name="members_done_count_label" class="o_stat_text">Finished</span>
@@ -36,14 +36,14 @@
type="object"
icon="fa-users"
class="oe_stat_button"
- groups="website.group_website_publisher">
+ groups="website_slides.group_website_slides_officer">
<field name="members_count" string="Attendees" widget="statinfo"/>
</button>
<button name="action_view_ratings"
type="object"
icon="fa-star"
class="oe_stat_button"
- groups="website.group_website_publisher"
+ groups="website_slides.group_website_slides_officer"
attrs="{'invisible': [('allow_comment', '=', False)]}">
<field name="rating_count" string="Reviews" widget="statinfo"/>
</button>
diff --git a/addons/website_slides/views/website_slides_menu_views.xml b/addons/website_slides/views/website_slides_menu_views.xml
index fb69ddee195..aa228171e9b 100644
--- a/addons/website_slides/views/website_slides_menu_views.xml
+++ b/addons/website_slides/views/website_slides_menu_views.xml
@@ -3,7 +3,7 @@
<menuitem name="eLearning"
id="website_slides_menu_root"
web_icon="website_slides,static/description/icon.png"
- groups="website.group_website_publisher"
+ groups="website_slides.group_website_slides_officer"
action="slide_channel_action_overview"/>
<!-- Main top menu elements -->
@@ -14,6 +14,7 @@
<menuitem name="Reporting"
id="website_slides_menu_report"
parent="website_slides_menu_root"
+ groups="website_slides.group_website_slides_manager"
sequence="9"/>
<menuitem name="Configuration"
id="website_slides_menu_configuration"
diff --git a/addons/website_slides/views/website_slides_templates_course.xml b/addons/website_slides/views/website_slides_templates_course.xml
index ff3ceed8ffe..5f973da2c79 100644
--- a/addons/website_slides/views/website_slides_templates_course.xml
+++ b/addons/website_slides/views/website_slides_templates_course.xml
@@ -396,7 +396,7 @@
t-att-data-can-publish="channel.can_publish"><i class="fa fa-plus mr-1"/><span>Add Content</span></a>
<a class="o_wslides_js_slide_section_add border btn btn-light bg-white" t-attf-channel_id="#{channel.id}"
href="#" role="button"
- groups="website.group_website_publisher"><i class="fa fa-folder-o mr-1"/><span>Add Section</span></a>
+ groups="website_slides.group_website_slides_officer"><i class="fa fa-folder-o mr-1"/><span>Add Section</span></a>
</div>
</div>
<div t-field="channel.description_html"/>
@@ -641,7 +641,7 @@
<div class="card-body p-3">
<a t-if="can_access" class="card-title h5 mb-2o_wslides_desc_truncate_2" t-attf-href="/slides/slide/#{slug(slide)}#{query_string}" t-esc="slide.name"/>
<span t-else="" class="card-title h5 mb-2 o_wslides_desc_truncate_2 text-muted" t-esc="slide.name"/>
- <div class="card-subtitle mb-2 text-muted" t-if="slide.is_preview or (not slide.is_published and user.has_group('website.group_website_publisher'))">
+ <div class="card-subtitle mb-2 text-muted" t-if="slide.is_preview or (not slide.is_published and user.has_group('website_slides.group_website_slides_officer'))">
<t t-if="slide.is_preview">
<span class="badge badge-info">Free preview</span>
</t>
diff --git a/addons/website_slides/views/website_slides_templates_homepage.xml b/addons/website_slides/views/website_slides_templates_homepage.xml
index 2c3d55bd6d2..212e41b3d3c 100644
--- a/addons/website_slides/views/website_slides_templates_homepage.xml
+++ b/addons/website_slides/views/website_slides_templates_homepage.xml
@@ -135,7 +135,7 @@
<div class="o_wslides_home_content_section mb-3"
t-if="not channels_popular">
<p class="h2">No Course created yet.</p>
- <p groups="website.group_website_designer">Click on "New" in the top-right corner to write your first course.</p>
+ <p groups="website_slides.group_website_slides_officer">Click on "New" in the top-right corner to write your first course.</p>
</div>
<t t-if="channels_my">
<t t-set="void_count" t-value="3 - len(channels_my[:3])"/>
@@ -321,7 +321,7 @@
<div class="container o_wslides_home_main pb-5">
<div t-if="not channels and not search_term and not search_slide_type and not search_my and not search_tags and not search_channel_tag_id">
<p class="h2">No Course created yet.</p>
- <p groups="website.group_website_designer">Click on "New" in the top-right corner to write your first course.</p>
+ <p groups="website_slides.group_website_slides_officer">Click on "New" in the top-right corner to write your first course.</p>
</div>
<div t-elif="search_term and not channels" class="alert alert-info mb-5">
No course was found matching your search <code><t t-esc="search_term"/></code>.
diff --git a/addons/website_slides/views/website_slides_templates_utils.xml b/addons/website_slides/views/website_slides_templates_utils.xml
index a215367d788..ad3b75ae231 100644
--- a/addons/website_slides/views/website_slides_templates_utils.xml
+++ b/addons/website_slides/views/website_slides_templates_utils.xml
@@ -70,7 +70,7 @@
<attribute name="name"/>
<attribute name="t-att-data-module-id"/>
<attribute name="t-att-data-module-shortdesc"/>
- <attribute name="groups">website.group_website_designer</attribute>
+ <attribute name="groups">website_slides.group_website_slides_officer</attribute>
</xpath>
</template>
diff --git a/addons/website_slides_forum/security/ir.model.access.csv b/addons/website_slides_forum/security/ir.model.access.csv
index a18ce5b0585..fc77181b3d5 100644
--- a/addons/website_slides_forum/security/ir.model.access.csv
+++ b/addons/website_slides_forum/security/ir.model.access.csv
@@ -1,2 +1,2 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
-access_forum_forum_website_publisher,access.forum.forum.website.publisher,model_forum_forum,website.group_website_publisher,1,1,1,0
+access_forum_forum_website_slides_officer,access.forum.forum.website.publisher,model_forum_forum,website_slides.group_website_slides_officer,1,1,1,0
diff --git a/addons/website_slides_survey/__manifest__.py b/addons/website_slides_survey/__manifest__.py
index 10114ec6f6a..11a35637a44 100644
--- a/addons/website_slides_survey/__manifest__.py
+++ b/addons/website_slides_survey/__manifest__.py
@@ -10,6 +10,7 @@
'installable': True,
'auto_install': True,
'data': [
+ 'security/ir.model.access.csv',
'views/assets.xml',
'views/slide_channel_views.xml',
'views/slide_slide_views.xml',
diff --git a/addons/website_slides_survey/models/survey_survey.py b/addons/website_slides_survey/models/survey_survey.py
index 7f4e0c48bce..6cc5b857069 100644
--- a/addons/website_slides_survey/models/survey_survey.py
+++ b/addons/website_slides_survey/models/survey_survey.py
@@ -8,9 +8,9 @@ class Survey(models.Model):
_inherit = 'survey.survey'
def _check_answer_creation(self, user, partner, email, test_entry=False, check_attempts=True, invite_token=False):
- """ Overridden to allow website_publisher to test certifications. """
+ """ Overridden to allow website_slides_officer to test certifications. """
self.ensure_one()
- if test_entry and user.has_group('website.group_website_publisher'):
+ if test_entry and user.has_group('website_slides.group_website_slides_officer'):
return True
return super(Survey, self)._check_answer_creation(user, partner, email, test_entry=test_entry, check_attempts=check_attempts, invite_token=invite_token)
diff --git a/addons/website_slides_survey/security/ir.model.access.csv b/addons/website_slides_survey/security/ir.model.access.csv
index 15efcd8f67b..fe5839ec795 100644
--- a/addons/website_slides_survey/security/ir.model.access.csv
+++ b/addons/website_slides_survey/security/ir.model.access.csv
@@ -1,2 +1,2 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
-access_survey_publisher,survey.survey.publisher,model_survey_survey,website.group_website_publisher,1,0,0,0
+access_survey_slides_officer,access.survey.slides.officer,model_survey_survey,website_slides.group_website_slides_officer,1,0,0,0