diff --git a/addons/website_forum/views/website_forum.xml b/addons/website_forum/views/website_forum.xml
index bf4800285a0..64621d6e765 100644
--- a/addons/website_forum/views/website_forum.xml
+++ b/addons/website_forum/views/website_forum.xml
@@ -1608,7 +1608,11 @@
-
+
+
+
+
+ website.group_website_designer
diff --git a/addons/website_slides_forum/__manifest__.py b/addons/website_slides_forum/__manifest__.py
index c5452a836b2..5199f0bcbf1 100644
--- a/addons/website_slides_forum/__manifest__.py
+++ b/addons/website_slides_forum/__manifest__.py
@@ -13,6 +13,7 @@
],
'data': [
'security/ir.model.access.csv',
+ 'security/website_slides_forum_security.xml',
'views/forum_views.xml',
'views/slide_channel_views.xml',
'views/website_slides_menu_views.xml',
diff --git a/addons/website_slides_forum/models/forum.py b/addons/website_slides_forum/models/forum.py
index a08d744ee49..30a0c4d9e1c 100644
--- a/addons/website_slides_forum/models/forum.py
+++ b/addons/website_slides_forum/models/forum.py
@@ -7,8 +7,9 @@ from odoo import api, fields, models
class Forum(models.Model):
_inherit = 'forum.forum'
- slide_channel_ids = fields.One2many('slide.channel', 'forum_id', 'Courses')
- slide_channel_id = fields.Many2one('slide.channel', 'Course', compute='_compute_slide_channel_id')
+ slide_channel_ids = fields.One2many('slide.channel', 'forum_id', 'Courses', help="Edit the course linked to this forum on the course form.")
+ slide_channel_id = fields.Many2one('slide.channel', 'Course', compute='_compute_slide_channel_id', store=True)
+ visibility = fields.Selection(related='slide_channel_id.visibility', help="Forum linked to a Course, the visibility is the one applied on the course.")
@api.depends('slide_channel_ids')
def _compute_slide_channel_id(self):
diff --git a/addons/website_slides_forum/models/slide_channel.py b/addons/website_slides_forum/models/slide_channel.py
index 3406ed95ee6..fec0d88564c 100644
--- a/addons/website_slides_forum/models/slide_channel.py
+++ b/addons/website_slides_forum/models/slide_channel.py
@@ -1,7 +1,7 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
-from odoo import fields, models
+from odoo import api, fields, models
class Channel(models.Model):
@@ -24,3 +24,23 @@ class Channel(models.Model):
action['domain'] = [('forum_id', '=', self.forum_id.id)]
return action
+
+ @api.model
+ def create(self, vals):
+ channel = super(Channel, self.with_context(mail_create_nosubscribe=True)).create(vals)
+ if channel.forum_id:
+ channel.forum_id.privacy = False
+ return channel
+
+ def write(self, vals):
+ old_forum = self.forum_id
+
+ res = super(Channel, self).write(vals)
+ if 'forum_id' in vals:
+ self.forum_id.privacy = False
+ if old_forum != self.forum_id:
+ old_forum.write({
+ 'privacy': 'private',
+ 'authorized_group_id': self.env.ref('website_slides.group_website_slides_officer').id,
+ })
+ return res
diff --git a/addons/website_slides_forum/security/website_slides_forum_security.xml b/addons/website_slides_forum/security/website_slides_forum_security.xml
new file mode 100644
index 00000000000..3ca12ec8b36
--- /dev/null
+++ b/addons/website_slides_forum/security/website_slides_forum_security.xml
@@ -0,0 +1,41 @@
+
+
+
+ Website forum: User can only access to forum related to followed courses
+
+ ['&', ('slide_channel_ids.website_published', '=', True), '|', ('slide_channel_ids.visibility', '=', 'public'), ('slide_channel_ids.partner_ids', 'in', user.partner_id.id)]
+
+
+
+ Website forum: website slides officer can access all forum
+
+ [(1, '=', 1)]
+
+
+
+
+ Website forum post: User can only access to post linked to forum related to followed courses
+
+ ['&', ('forum_id.slide_channel_ids.website_published', '=', True), '|', ('forum_id.slide_channel_ids.visibility', '=', 'public'), ('forum_id.slide_channel_ids.partner_ids', 'in', user.partner_id.id)]
+
+
+
+ Website forum post: website slides officer can access all post
+
+ [(1, '=', 1)]
+
+
+
+
+ Website slides forum tag: User can only access to tag linked to forum related to followed courses
+
+ ['&', ('forum_id.slide_channel_ids.website_published', '=', True), '|', ('forum_id.slide_channel_ids.visibility', '=', 'public'), ('forum_id.slide_channel_ids.partner_ids', 'in', user.partner_id.id)]
+
+
+
+ Website slides forum tag: website slides officer can access all tag
+
+ [(1, '=', 1)]
+
+
+
diff --git a/addons/website_slides_forum/views/forum_views.xml b/addons/website_slides_forum/views/forum_views.xml
index 08c05b7bba5..d0acd7037e6 100644
--- a/addons/website_slides_forum/views/forum_views.xml
+++ b/addons/website_slides_forum/views/forum_views.xml
@@ -10,6 +10,15 @@
+
+ {'invisible': [('slide_channel_id', '!=', False)], 'required': [('slide_channel_id', '!=', 'False')]}
+
+
+ {'invisible': ['|', ('privacy', '!=', 'private'), ('slide_channel_id', '!=', False)], 'required': [('privacy', '=', 'private')]}
+
+
+
+