diff --git a/model_access_rights/README.rst b/model_access_rights/README.rst
index 48f5ef657..13342848b 100644
--- a/model_access_rights/README.rst
+++ b/model_access_rights/README.rst
@@ -1,30 +1,37 @@
-Model Access Rights
-===================
-* Model Access Rights for Odoo 16 community editions
+.. image:: https://img.shields.io/badge/license-LGPL--3-green.svg
+ :target: https://www.gnu.org/licenses/lgpl-3.0-standalone.html
+ :alt: License: LGPL-3
+
+Hide Create|Delete|Archive|Export Options - Model Wise
+======================================================
+* By using this module we can hide the options like create,delete,export,and
+archive/un archive in the model which we want. Here we are also able to select
+the user groups except Administrator which we want to apply the above hiding
+functionality
Installation
============
- - www.odoo.com/documentation/16.0/setup/install.html
- - Install our custom addon
+ - www.odoo.com/documentation/16.0/setup/install.html
+ - Install our custom addon
License
-------
-General Public License, Version 3 (LGPL v3).
-(https://www.odoo.com/documentation/user/16.0/legal/licenses/licenses.html)
+GNU LESSER GENERAL PUBLIC LICENSE, Version 3 (LGPL v3).
+(https://www.gnu.org/licenses/lgpl-3.0-standalone.html)
Company
-------
-* 'Cybrosys Techno Solutions `__
+* `Cybrosys Techno Solutions `__
Credits
-------
* Developer:
-(v16) Anjana P V @ Cybrosys
-
+(v16) Anjana P V @ Cybrosys, Contact : odoo@cybrosys.com
Contacts
--------
* Mail Contact : odoo@cybrosys.com
+* Website : https://cybrosys.com
Bug Tracker
-----------
@@ -32,6 +39,9 @@ Bugs are tracked on GitHub Issues. In case of trouble, please check there if you
Maintainer
==========
+.. image:: https://cybrosys.com/images/logo.png
+ :target: https://cybrosys.com
+
This module is maintained by Cybrosys Technologies.
For support and more information, please visit https://www.cybrosys.com
@@ -39,4 +49,3 @@ For support and more information, please visit https://www.cybrosys.com
Further information
===================
HTML Description: ``__
-
diff --git a/model_access_rights/__manifest__.py b/model_access_rights/__manifest__.py
index ea32f9820..5f4729d9c 100644
--- a/model_access_rights/__manifest__.py
+++ b/model_access_rights/__manifest__.py
@@ -20,34 +20,32 @@
#
#############################################################################
{
- 'name': 'Model Access Rights',
+ 'name': 'Hide Create|Delete|Archive|Export Options - Model Wise',
'version': '16.0.1.0.0',
- 'category': 'Others',
+ 'category': 'Extra Tools, Productivity',
'summary': """ Can hide options from user """,
- 'description': """Can hide options according to specific model
- and access group """,
+ 'description': """ By using this module we can hide the options like create,
+ delete,export,and archive/un archive in the model which we want. Here we
+ are also able to select the user groups except Administrator which we want
+ to apply the above hiding functionality """,
'author': 'Cybrosys Techno Solutions',
'company': 'Cybrosys Techno Solutions',
'maintainer': 'Cybrosys Techno Solutions',
'website': "https://www.cybrosys.com",
- 'depends': [
- 'base_setup',
- 'mail',
- ],
+ 'depends': ['base_setup', 'mail'],
'data': [
'security/security.xml',
'security/ir.model.access.csv',
- 'data/ir_sequence_data.xml',
'views/model_access_rights_views.xml',
],
'assets': {
'web.assets_backend': [
'model_access_rights/static/src/js/form_controller.js',
'model_access_rights/static/src/js/list_controller.js',
+ 'model_access_rights/static/src/js/kanban_controller.js'
]
},
-
- 'images': ['static/description/banner.png'],
+ 'images': ['static/description/banner.jpg'],
'license': 'LGPL-3',
'installable': True,
'auto_install': False,
diff --git a/model_access_rights/data/ir_sequence_data.xml b/model_access_rights/data/ir_sequence_data.xml
deleted file mode 100644
index 0cb302588..000000000
--- a/model_access_rights/data/ir_sequence_data.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
- Model Access Right
- access.right
- MAR
- 5
-
-
-
\ No newline at end of file
diff --git a/model_access_rights/doc/RELEASE_NOTES.md b/model_access_rights/doc/RELEASE_NOTES.md
index 82b87eeac..28c2ff2aa 100644
--- a/model_access_rights/doc/RELEASE_NOTES.md
+++ b/model_access_rights/doc/RELEASE_NOTES.md
@@ -1,9 +1,5 @@
## Module
-
-#### 20.02.2023
+#### 8.11.2023
#### Version 16.0.1.0.0
##### ADD
-
-- Initial Commit for model_access_rights
-
-
+- Initial Commit for Hide Create|Delete|Archive|Export Options - Model Wise
diff --git a/model_access_rights/models/__init__.py b/model_access_rights/models/__init__.py
index 58bafa3bb..1ba0c1cd1 100644
--- a/model_access_rights/models/__init__.py
+++ b/model_access_rights/models/__init__.py
@@ -20,3 +20,4 @@
#
#############################################################################
from . import model_access_rights
+from . import models
diff --git a/model_access_rights/models/model_access_rights.py b/model_access_rights/models/model_access_rights.py
index e8d1b99a1..57924f7b6 100644
--- a/model_access_rights/models/model_access_rights.py
+++ b/model_access_rights/models/model_access_rights.py
@@ -21,7 +21,7 @@
# If not, see .
#
#############################################################################
-from odoo import models, fields, api, _
+from odoo import api, fields, models, _
class ModelAccessRights(models.Model):
@@ -30,6 +30,7 @@ class ModelAccessRights(models.Model):
_name = 'access.right'
_inherit = 'mail.thread'
_description = 'Manage Modules Access Control'
+ _rec_name = 'model_id'
model_id = fields.Many2one('ir.model', ondelete='cascade', required=True,
help="select the model")
@@ -44,17 +45,6 @@ class ModelAccessRights(models.Model):
" as well as form view")
is_archive = fields.Boolean(string="Archive/UnArchive",
help="hide the archive option")
- name = fields.Char(string='Order Reference', readonly=True,
- default=lambda self: _('New'))
-
- @api.model
- def create(self, vals):
- """This function is used to create the sequence number for this model"""
- if vals.get('name', _('New')) == _('New'):
- vals['name'] = self.env['ir.sequence'].next_by_code(
- 'access.right') or _('New')
- res = super(ModelAccessRights, self).create(vals)
- return res
@api.model
def hide_buttons(self):
diff --git a/model_access_rights/models/models.py b/model_access_rights/models/models.py
new file mode 100644
index 000000000..e2de02967
--- /dev/null
+++ b/model_access_rights/models/models.py
@@ -0,0 +1,315 @@
+# -*- coding: utf-8 -*-
+"""This model is used to detect, which all options want to hide from the
+ specified group and model"""
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies()
+# Author: Cybrosys Techno Solutions()
+#
+# You can modify it under the terms of the GNU LESSER
+# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
+#
+# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
+# (LGPL v3) along with this program.
+# If not, see .
+#
+
+from collections import defaultdict
+from operator import attrgetter
+from odoo import api, _
+from odoo.exceptions import UserError
+from odoo.models import BaseModel, _unlink, LOG_ACCESS_COLUMNS, \
+ INSERT_BATCH_SIZE, SQL_DEFAULT
+from odoo.tools import OrderedSet, split_every, attrgetter, clean_context
+
+
+@api.model
+def _create(self, data_list):
+ """ Create records from the stored field values in ``data_list``. """
+ assert data_list
+ cr = self.env.cr
+
+ # insert rows in batches of maximum INSERT_BATCH_SIZE
+ ids = [] # ids of created records
+ other_fields = OrderedSet() # non-column fields
+
+ for data_sublist in split_every(INSERT_BATCH_SIZE, data_list):
+ stored_list = [data['stored'] for data in data_sublist]
+ fnames = sorted({name for stored in stored_list for name in stored})
+
+ columns = []
+ rows = [[] for _ in stored_list]
+ for fname in fnames:
+ field = self._fields[fname]
+ if field.column_type:
+ columns.append(fname)
+ for stored, row in zip(stored_list, rows):
+ if fname in stored:
+ colval = field.convert_to_column(stored[fname], self,
+ stored)
+ if field.translate is True and colval:
+ if 'en_US' not in colval.adapted:
+ colval.adapted['en_US'] = next(
+ iter(colval.adapted.values()))
+ row.append(colval)
+ else:
+ row.append(SQL_DEFAULT)
+ else:
+ other_fields.add(field)
+
+ if field.type == 'properties':
+ # force calling fields.create for properties field because
+ # we might want to update the parent definition
+ other_fields.add(field)
+
+ if not columns:
+ # manage the case where we create empty records
+ columns = ['id']
+ for row in rows:
+ row.append(SQL_DEFAULT)
+
+ header = ", ".join(f'"{column}"' for column in columns)
+ template = ", ".join("%s" for _ in rows)
+ cr.execute(
+ f'INSERT INTO "{self._table}" ({header}) VALUES {template} RETURNING "id"',
+ [tuple(row) for row in rows],
+ )
+ ids.extend(id_ for id_, in cr.fetchall())
+
+ # put the new records in cache, and update inverse fields, for many2one
+ #
+ # cachetoclear is an optimization to avoid modified()'s cost until other_fields are processed
+ cachetoclear = []
+ records = self.browse(ids)
+ inverses_update = defaultdict(list) # {(field, value): ids}
+ common_set_vals = set(
+ LOG_ACCESS_COLUMNS + [self.CONCURRENCY_CHECK_FIELD, 'id',
+ 'parent_path'])
+ for data, record in zip(data_list, records):
+ data['record'] = record
+ # DLE P104: test_inherit.py, test_50_search_one2many
+ vals = dict(
+ {k: v for d in data['inherited'].values() for k, v in d.items()},
+ **data['stored'])
+ set_vals = common_set_vals.union(vals)
+ for field in self._fields.values():
+ if field.type in ('one2many', 'many2many'):
+ self.env.cache.set(record, field, ())
+ elif field.related and not field.column_type:
+ self.env.cache.set(record, field,
+ field.convert_to_cache(None, record))
+ # DLE P123: `test_adv_activity`, `test_message_assignation_inbox`, `test_message_log`, `test_create_mail_simple`, ...
+ # Set `mail.message.parent_id` to False in cache so it doesn't do the useless SELECT when computing the modified of `child_ids`
+ # in other words, if `parent_id` is not set, no other message `child_ids` are impacted.
+ # + avoid the fetch of fields which are False. e.g. if a boolean field is not passed in vals and as no default set in the field attributes,
+ # then we know it can be set to False in the cache in the case of a create.
+ elif field.name not in set_vals and not field.compute:
+ self.env.cache.set(record, field,
+ field.convert_to_cache(None, record))
+ for fname, value in vals.items():
+ field = self._fields[fname]
+ if field.type in ('one2many', 'many2many'):
+ cachetoclear.append((record, field))
+ else:
+ cache_value = field.convert_to_cache(value, record)
+ self.env.cache.set(record, field, cache_value)
+ if field.type in ('many2one', 'many2one_reference') and \
+ self.pool.field_inverses[field]:
+ inverses_update[(field, cache_value)].append(record.id)
+
+ for (field, value), record_ids in inverses_update.items():
+ field._update_inverses(self.browse(record_ids), value)
+
+ # update parent_path
+ records._parent_store_create()
+
+ # protect fields being written against recomputation
+ protected = [(data['protected'], data['record']) for data in data_list]
+ with self.env.protecting(protected):
+ # mark computed fields as todo
+ records.modified(self._fields, create=True)
+
+ if other_fields:
+ # discard default values from context for other fields
+ others = records.with_context(clean_context(self._context))
+ for field in sorted(other_fields, key=attrgetter('_sequence')):
+ field.create([
+ (other, data['stored'][field.name])
+ for other, data in zip(others, data_list)
+ if field.name in data['stored']
+ ])
+
+ # mark fields to recompute
+ records.modified([field.name for field in other_fields],
+ create=True)
+
+ # if value in cache has not been updated by other_fields, remove it
+ for record, field in cachetoclear:
+ if self.env.cache.contains(record,
+ field) and not self.env.cache.get(
+ record, field):
+ self.env.cache.remove(record, field)
+
+ # check Python constraints for stored fields
+ records._validate_fields(
+ name for data in data_list for name in data['stored'])
+ records.check_access_rule('create')
+ # This is used to restrict the access right to create a record
+ current_model_id = self.env['ir.model'].sudo().search(
+ [('model', '=', self._name)]).id
+ access_right_rec = self.env['access.right'].sudo().search_read(
+ [('model_id', '=', current_model_id)],
+ ['model_id', 'is_create_or_update',
+ 'groups_id'])
+ if access_right_rec and not self.env.is_admin():
+ for rec in access_right_rec:
+ group_name = self.env['ir.model.data'].sudo().search([
+ ('model', '=', 'res.groups'),
+ ('res_id', '=', rec['groups_id'][0])
+ ]).name
+ module_name = self.env['ir.model.data'].sudo().search([
+ ('model', '=', 'res.groups'),
+ ('res_id', '=', rec['groups_id'][0])
+ ]).module
+ group = module_name + "." + group_name
+ if self.env.user.has_group(group):
+ if rec['is_create_or_update']:
+ raise UserError('You are restricted from performing this'
+ ' operation. Please contact the'
+ ' administrator.')
+ return records
+
+
+@api.model
+def unlink(self):
+ """ unlink()
+
+ Deletes the records in ``self``.
+
+ :raise AccessError: if the user is not allowed to delete all the given records
+ :raise UserError: if the record is default property for other records
+ """
+ if not self:
+ return True
+
+ self.check_access_rights('unlink')
+ self.check_access_rule('unlink')
+
+ from odoo.addons.base.models.ir_model import MODULE_UNINSTALL_FLAG
+ for func in self._ondelete_methods:
+ # func._ondelete is True if it should be called during uninstallation
+ if func._ondelete or not self._context.get(MODULE_UNINSTALL_FLAG):
+ func(self)
+
+ # TOFIX: this avoids an infinite loop when trying to recompute a
+ # field, which triggers the recomputation of another field using the
+ # same compute function, which then triggers again the computation
+ # of those two fields
+ for field in self._fields.values():
+ self.env.remove_to_compute(field, self)
+
+ self.env.flush_all()
+
+ cr = self._cr
+ Data = self.env['ir.model.data'].sudo().with_context({})
+ Defaults = self.env['ir.default'].sudo()
+ Property = self.env['ir.property'].sudo()
+ Attachment = self.env['ir.attachment'].sudo()
+ ir_property_unlink = Property
+ ir_model_data_unlink = Data
+ ir_attachment_unlink = Attachment
+
+ # mark fields that depend on 'self' to recompute them after 'self' has
+ # been deleted (like updating a sum of lines after deleting one line)
+ with self.env.protecting(self._fields.values(), self):
+ self.modified(self._fields, before=True)
+ for sub_ids in cr.split_for_in_conditions(self.ids):
+ records = self.browse(sub_ids)
+
+ # Check if the records are used as default properties.
+ refs = [f'{self._name},{id_}' for id_ in sub_ids]
+ if Property.search(
+ [('res_id', '=', False), ('value_reference', 'in', refs)],
+ limit=1):
+ raise UserError(
+ _('Unable to delete this document because it is used as a default property'))
+
+ # Delete the records' properties.
+ ir_property_unlink |= Property.search([('res_id', 'in', refs)])
+
+ query = f'DELETE FROM "{self._table}" WHERE id IN %s'
+ cr.execute(query, (sub_ids,))
+
+ # Removing the ir_model_data reference if the record being deleted
+ # is a record created by xml/csv file, as these are not connected
+ # with real database foreign keys, and would be dangling references.
+ #
+ # Note: the following steps are performed as superuser to avoid
+ # access rights restrictions, and with no context to avoid possible
+ # side-effects during admin calls.
+ data = Data.search(
+ [('model', '=', self._name), ('res_id', 'in', sub_ids)])
+ ir_model_data_unlink |= data
+
+ # For the same reason, remove the defaults having some of the
+ # records as value
+ Defaults.discard_records(records)
+
+ # For the same reason, remove the relevant records in ir_attachment
+ # (the search is performed with sql as the search method of
+ # ir_attachment is overridden to hide attachments of deleted
+ # records)
+ query = 'SELECT id FROM ir_attachment WHERE res_model=%s AND res_id IN %s'
+ cr.execute(query, (self._name, sub_ids))
+ ir_attachment_unlink |= Attachment.browse(
+ row[0] for row in cr.fetchall())
+
+ # invalidate the *whole* cache, since the orm does not handle all
+ # changes made in the database, like cascading delete!
+ self.env.invalidate_all(flush=False)
+ if ir_property_unlink:
+ ir_property_unlink.unlink()
+ if ir_model_data_unlink:
+ ir_model_data_unlink.unlink()
+ if ir_attachment_unlink:
+ ir_attachment_unlink.unlink()
+ # DLE P93: flush after the unlink, for recompute fields depending on
+ # the modified of the unlink
+ self.env.flush_all()
+ # auditing: deletions are infrequent and leave no trace in the database
+ _unlink.info('User #%s deleted %s records with IDs: %r', self._uid,
+ self._name, self.ids)
+ # This is used to restrict the access right to unlink a record
+ current_model_id = self.env['ir.model'].sudo().search(
+ [('model', '=', self._name)]).id
+ access_right_rec = self.env['access.right'].sudo().search_read(
+ [('model_id', '=', current_model_id)], ['model_id', 'is_delete',
+ 'groups_id'])
+ if access_right_rec and not self.env.is_admin():
+ for rec in access_right_rec:
+ group_name = self.env['ir.model.data'].sudo().search([
+ ('model', '=', 'res.groups'),
+ ('res_id', '=', rec['groups_id'][0])
+ ]).name
+ module_name = self.env['ir.model.data'].sudo().search([
+ ('model', '=', 'res.groups'),
+ ('res_id', '=', rec['groups_id'][0])
+ ]).module
+ group = module_name + "." + group_name
+ if self.env.user.has_group(group):
+ if rec['is_delete']:
+ raise UserError(_('You are restricted from performing this'
+ ' operation. Please contact the'
+ ' administrator.'))
+ return True
+
+
+BaseModel._create = _create
+BaseModel.unlink = unlink
diff --git a/model_access_rights/security/ir.model.access.csv b/model_access_rights/security/ir.model.access.csv
index a9c391316..78f0cfbc4 100644
--- a/model_access_rights/security/ir.model.access.csv
+++ b/model_access_rights/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_access_right,access_access_right,model_access_right,model_access_rights.group_model_access_control,1,1,1,1
+access_access_right,access.access.right,model_access_right,model_access_rights.model_access_rights_groups_configure_model_access,1,1,1,1
diff --git a/model_access_rights/security/security.xml b/model_access_rights/security/security.xml
index b23564939..824cdd797 100644
--- a/model_access_rights/security/security.xml
+++ b/model_access_rights/security/security.xml
@@ -1,6 +1,7 @@
+
-
+ Configure Model Access
diff --git a/model_access_rights/static/description/assets/modules/1.png b/model_access_rights/static/description/assets/modules/1.png
index 5238bdeab..d0f36b007 100644
Binary files a/model_access_rights/static/description/assets/modules/1.png and b/model_access_rights/static/description/assets/modules/1.png differ
diff --git a/model_access_rights/static/description/assets/modules/2.png b/model_access_rights/static/description/assets/modules/2.png
deleted file mode 100644
index 1ae7cfe3b..000000000
Binary files a/model_access_rights/static/description/assets/modules/2.png and /dev/null differ
diff --git a/model_access_rights/static/description/assets/modules/3.png b/model_access_rights/static/description/assets/modules/3.png
deleted file mode 100644
index 3c3ff1afb..000000000
Binary files a/model_access_rights/static/description/assets/modules/3.png and /dev/null differ
diff --git a/model_access_rights/static/description/assets/modules/4.png b/model_access_rights/static/description/assets/modules/4.png
deleted file mode 100644
index 3fae4631e..000000000
Binary files a/model_access_rights/static/description/assets/modules/4.png and /dev/null differ
diff --git a/model_access_rights/static/description/assets/modules/5.gif b/model_access_rights/static/description/assets/modules/5.gif
deleted file mode 100644
index 2a5f8e659..000000000
Binary files a/model_access_rights/static/description/assets/modules/5.gif and /dev/null differ
diff --git a/model_access_rights/static/description/assets/modules/6.png b/model_access_rights/static/description/assets/modules/6.png
deleted file mode 100644
index 7f2815273..000000000
Binary files a/model_access_rights/static/description/assets/modules/6.png and /dev/null differ
diff --git a/model_access_rights/static/description/assets/modules/l2.png b/model_access_rights/static/description/assets/modules/l2.png
new file mode 100644
index 000000000..a3194264c
Binary files /dev/null and b/model_access_rights/static/description/assets/modules/l2.png differ
diff --git a/model_access_rights/static/description/assets/modules/l3.png b/model_access_rights/static/description/assets/modules/l3.png
new file mode 100644
index 000000000..e894393ef
Binary files /dev/null and b/model_access_rights/static/description/assets/modules/l3.png differ
diff --git a/model_access_rights/static/description/assets/modules/l4.png b/model_access_rights/static/description/assets/modules/l4.png
new file mode 100644
index 000000000..ed11bd818
Binary files /dev/null and b/model_access_rights/static/description/assets/modules/l4.png differ
diff --git a/model_access_rights/static/description/assets/modules/l5.png b/model_access_rights/static/description/assets/modules/l5.png
new file mode 100644
index 000000000..3415917c2
Binary files /dev/null and b/model_access_rights/static/description/assets/modules/l5.png differ
diff --git a/model_access_rights/static/description/assets/modules/l6.png b/model_access_rights/static/description/assets/modules/l6.png
new file mode 100644
index 000000000..c7ea331ee
Binary files /dev/null and b/model_access_rights/static/description/assets/modules/l6.png differ
diff --git a/model_access_rights/static/description/assets/screenshots/03_purchase_user_grp.png b/model_access_rights/static/description/assets/screenshots/03_purchase_user_grp.png
deleted file mode 100644
index 2b200cba3..000000000
Binary files a/model_access_rights/static/description/assets/screenshots/03_purchase_user_grp.png and /dev/null differ
diff --git a/model_access_rights/static/description/assets/screenshots/10_marcdemo_project_grp.png b/model_access_rights/static/description/assets/screenshots/10_marcdemo_project_grp.png
deleted file mode 100644
index 4ef3c2e61..000000000
Binary files a/model_access_rights/static/description/assets/screenshots/10_marcdemo_project_grp.png and /dev/null differ
diff --git a/model_access_rights/static/description/assets/screenshots/11_project_original.png b/model_access_rights/static/description/assets/screenshots/11_project_original.png
deleted file mode 100644
index 00ef7b30e..000000000
Binary files a/model_access_rights/static/description/assets/screenshots/11_project_original.png and /dev/null differ
diff --git a/model_access_rights/static/description/assets/screenshots/12_export_archive_hide.png b/model_access_rights/static/description/assets/screenshots/12_export_archive_hide.png
deleted file mode 100644
index 4316a5ec5..000000000
Binary files a/model_access_rights/static/description/assets/screenshots/12_export_archive_hide.png and /dev/null differ
diff --git a/model_access_rights/static/description/assets/screenshots/13_hidden_export_archive.png b/model_access_rights/static/description/assets/screenshots/13_hidden_export_archive.png
deleted file mode 100644
index e95d997e7..000000000
Binary files a/model_access_rights/static/description/assets/screenshots/13_hidden_export_archive.png and /dev/null differ
diff --git a/model_access_rights/static/description/assets/screenshots/1_field_menu.png b/model_access_rights/static/description/assets/screenshots/1_field_menu.png
deleted file mode 100644
index 4f6c20f52..000000000
Binary files a/model_access_rights/static/description/assets/screenshots/1_field_menu.png and /dev/null differ
diff --git a/model_access_rights/static/description/assets/screenshots/2_model_grp.png b/model_access_rights/static/description/assets/screenshots/2_model_grp.png
deleted file mode 100644
index c1e979977..000000000
Binary files a/model_access_rights/static/description/assets/screenshots/2_model_grp.png and /dev/null differ
diff --git a/model_access_rights/static/description/assets/screenshots/2_user_grp.png b/model_access_rights/static/description/assets/screenshots/2_user_grp.png
deleted file mode 100644
index 4e71fc6c4..000000000
Binary files a/model_access_rights/static/description/assets/screenshots/2_user_grp.png and /dev/null differ
diff --git a/model_access_rights/static/description/assets/screenshots/3_user_grp.png b/model_access_rights/static/description/assets/screenshots/3_user_grp.png
deleted file mode 100644
index 4e71fc6c4..000000000
Binary files a/model_access_rights/static/description/assets/screenshots/3_user_grp.png and /dev/null differ
diff --git a/model_access_rights/static/description/assets/screenshots/4_po_create_hide_tree.png b/model_access_rights/static/description/assets/screenshots/4_po_create_hide_tree.png
deleted file mode 100644
index e5b0c3ee4..000000000
Binary files a/model_access_rights/static/description/assets/screenshots/4_po_create_hide_tree.png and /dev/null differ
diff --git a/model_access_rights/static/description/assets/screenshots/5_Export_dlt_hide.png b/model_access_rights/static/description/assets/screenshots/5_Export_dlt_hide.png
deleted file mode 100644
index 383587406..000000000
Binary files a/model_access_rights/static/description/assets/screenshots/5_Export_dlt_hide.png and /dev/null differ
diff --git a/model_access_rights/static/description/assets/screenshots/6_export_dlt_hide_marc.png b/model_access_rights/static/description/assets/screenshots/6_export_dlt_hide_marc.png
deleted file mode 100644
index 9c9c26544..000000000
Binary files a/model_access_rights/static/description/assets/screenshots/6_export_dlt_hide_marc.png and /dev/null differ
diff --git a/model_access_rights/static/description/assets/screenshots/7_delete_hide_in_form.png b/model_access_rights/static/description/assets/screenshots/7_delete_hide_in_form.png
deleted file mode 100644
index fa8d52b75..000000000
Binary files a/model_access_rights/static/description/assets/screenshots/7_delete_hide_in_form.png and /dev/null differ
diff --git a/model_access_rights/static/description/assets/screenshots/8_archieve_edit_hide.png b/model_access_rights/static/description/assets/screenshots/8_archieve_edit_hide.png
deleted file mode 100644
index e5bd20dd3..000000000
Binary files a/model_access_rights/static/description/assets/screenshots/8_archieve_edit_hide.png and /dev/null differ
diff --git a/model_access_rights/static/description/assets/screenshots/9_edit_archive_hide.png b/model_access_rights/static/description/assets/screenshots/9_edit_archive_hide.png
deleted file mode 100644
index 6510ffd58..000000000
Binary files a/model_access_rights/static/description/assets/screenshots/9_edit_archive_hide.png and /dev/null differ
diff --git a/model_access_rights/static/description/assets/screenshots/hero.gif b/model_access_rights/static/description/assets/screenshots/hero.gif
new file mode 100644
index 000000000..cb2f6b523
Binary files /dev/null and b/model_access_rights/static/description/assets/screenshots/hero.gif differ
diff --git a/model_access_rights/static/description/assets/screenshots/model_access_right_01.png b/model_access_rights/static/description/assets/screenshots/model_access_right_01.png
new file mode 100644
index 000000000..2ca6bf0b7
Binary files /dev/null and b/model_access_rights/static/description/assets/screenshots/model_access_right_01.png differ
diff --git a/model_access_rights/static/description/assets/screenshots/model_access_right_02.png b/model_access_rights/static/description/assets/screenshots/model_access_right_02.png
new file mode 100644
index 000000000..4d800214e
Binary files /dev/null and b/model_access_rights/static/description/assets/screenshots/model_access_right_02.png differ
diff --git a/model_access_rights/static/description/assets/screenshots/model_access_right_03.png b/model_access_rights/static/description/assets/screenshots/model_access_right_03.png
new file mode 100644
index 000000000..ee165e8f7
Binary files /dev/null and b/model_access_rights/static/description/assets/screenshots/model_access_right_03.png differ
diff --git a/model_access_rights/static/description/assets/screenshots/model_access_right_04.png b/model_access_rights/static/description/assets/screenshots/model_access_right_04.png
new file mode 100644
index 000000000..d3760944e
Binary files /dev/null and b/model_access_rights/static/description/assets/screenshots/model_access_right_04.png differ
diff --git a/model_access_rights/static/description/assets/screenshots/model_access_right_05.png b/model_access_rights/static/description/assets/screenshots/model_access_right_05.png
new file mode 100644
index 000000000..7418fda68
Binary files /dev/null and b/model_access_rights/static/description/assets/screenshots/model_access_right_05.png differ
diff --git a/model_access_rights/static/description/assets/screenshots/model_access_right_06.png b/model_access_rights/static/description/assets/screenshots/model_access_right_06.png
new file mode 100644
index 000000000..738a4160a
Binary files /dev/null and b/model_access_rights/static/description/assets/screenshots/model_access_right_06.png differ
diff --git a/model_access_rights/static/description/assets/screenshots/model_access_right_07.png b/model_access_rights/static/description/assets/screenshots/model_access_right_07.png
new file mode 100644
index 000000000..3bd2812d6
Binary files /dev/null and b/model_access_rights/static/description/assets/screenshots/model_access_right_07.png differ
diff --git a/model_access_rights/static/description/assets/screenshots/model_access_right_08.png b/model_access_rights/static/description/assets/screenshots/model_access_right_08.png
new file mode 100644
index 000000000..fa3b03877
Binary files /dev/null and b/model_access_rights/static/description/assets/screenshots/model_access_right_08.png differ
diff --git a/model_access_rights/static/description/assets/screenshots/v16-hero.gif b/model_access_rights/static/description/assets/screenshots/v16-hero.gif
deleted file mode 100644
index f9205387b..000000000
Binary files a/model_access_rights/static/description/assets/screenshots/v16-hero.gif and /dev/null differ
diff --git a/model_access_rights/static/description/banner.jpg b/model_access_rights/static/description/banner.jpg
new file mode 100644
index 000000000..cc970a2b9
Binary files /dev/null and b/model_access_rights/static/description/banner.jpg differ
diff --git a/model_access_rights/static/description/banner.png b/model_access_rights/static/description/banner.png
deleted file mode 100644
index 1b57f61b3..000000000
Binary files a/model_access_rights/static/description/banner.png and /dev/null differ
diff --git a/model_access_rights/static/description/icon.png b/model_access_rights/static/description/icon.png
index 51e28ec44..7b22e2b91 100644
Binary files a/model_access_rights/static/description/icon.png and b/model_access_rights/static/description/icon.png differ
diff --git a/model_access_rights/static/description/index.html b/model_access_rights/static/description/index.html
index d6c1e3d5b..3d68168a1 100644
--- a/model_access_rights/static/description/index.html
+++ b/model_access_rights/static/description/index.html
@@ -27,10 +27,10 @@
- Model Access Rights
-
Hide the Options
+ Hide Create|Delete|Archive|Export Options - Model Wise
+
Hide Create, Delete, Archive, Export Options in Models
-
@@ -159,53 +159,54 @@
Go to Settings > Users and there you can see the Configure Model Access, by enabling that
- option and refresh the page, you can see a new menu named 'Model Access Config'
-
+ option and refresh the page, you can see a new menu named 'Restrict Access Rights'
+
-
To show an example, set Marc Demo as the User in the purchase module
-
+
User in the Purchase module
+
-
Select the model, group and the option which we want to hide
-
+
Select the Model, Groups and the options which we want to hide
+
-
We can see create option is hidden in purchase.order to those who are User
+
We can see Create option is hidden in purchase.order to those who are User
in purchase module
-
+
-
Set the access right of Marc Demo as User in project module
-
+
User in Project module
+
-
By default we can see Export and Archive/UnArchive options
-
+
By default, we can see Export and Archive/UnArchive options
+
Select the options which we want to hide
-
+
Export and Archive/UnArchive functionality are hidden