Reviewers: ,


Please review this at http://codereview.tryton.org/398002/

Affected files:
  M CHANGELOG
  M trytond/ir/model.py
  M trytond/ir/model.xml
  M trytond/model/model.py


Index: CHANGELOG
===================================================================

--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,4 @@
+* Add create/delete field access
 * Replace __tryton__.py by tryton.cfg
 * Allow to use Reference field in One2Many & Many2Many
 * Remove hexmd5 from ModelView.fields_view_get

Index: trytond/ir/model.py
===================================================================

--- a/trytond/ir/model.py
+++ b/trytond/ir/model.py
@@ -391,6 +391,8 @@
     group = fields.Many2One('res.group', 'Group', ondelete='CASCADE')
     perm_read = fields.Boolean('Read Access')
     perm_write = fields.Boolean('Write Access')
+    perm_create = fields.Boolean('Create Access')
+    perm_delete = fields.Boolean('Delete Access')
     description = fields.Text('Description')

     def __init__(self):
@@ -413,6 +415,12 @@
     def default_perm_write(self):
         return False

+    def default_perm_create(self):
+        return True
+
+    def default_perm_delete(self):
+        return True
+
     @Cache('ir_model_field_access.check')
     def check(self, model_name, fields, mode='read', raise_exception=True,
             access=False):
@@ -421,13 +429,14 @@

         :param model_name: the model name
         :param fields: a list of fields
-        :param mode: 'read' or 'write'
+        :param mode: 'read', 'write', 'create' or 'delete'
         :param raise_exception: raise an exception if the test failed
:param access: return a dictionary with access right instead of boolean

         :return: a boolean
         '''
-        assert mode in ('read', 'write'), 'Invalid access mode'
+        assert mode in ('read', 'write', 'create', 'delete'), \
+            'Invalid access mode'
         if Transaction().user == 0:
             if access:
                 return dict((x, True) for x in fields)

Index: trytond/ir/model.xml
===================================================================

--- a/trytond/ir/model.xml
+++ b/trytond/ir/model.xml
@@ -181,6 +181,8 @@
                 <tree string="Field Access">
                     <field name="perm_read"/>
                     <field name="perm_write"/>
+                    <field name="perm_create"/>
+                    <field name="perm_delete"/>
                     <field name="field"/>
                     <field name="group"/>
                 </tree>
@@ -203,6 +205,10 @@
                     <field name="perm_read"/>
                     <label name="perm_write"/>
                     <field name="perm_write"/>
+                    <label name="perm_create"/>
+                    <field name="perm_create"/>
+                    <label name="perm_delete"/>
+                    <field name="perm_delete"/>
                     <separator name="description" colspan="4"/>
                     <field name="description" colspan="4"/>
                 </form>

Index: trytond/model/model.py
===================================================================

--- a/trytond/model/model.py
+++ b/trytond/model/model.py
@@ -450,6 +450,10 @@

fwrite_accesses = field_access_obj.check(self._name, fields_names or
                 self._columns.keys(), 'write', access=True)
+ fcreate_accesses = field_access_obj.check(self._name, fields_names or
+            self._columns.keys(), 'create', access=True)
+ fdelete_accesses = field_access_obj.check(self._name, fields_names or
+            self._columns.keys(), 'delete', access=True)
         for field in (x for x in self._columns.keys()
                 if ((not fields_names) or x in fields_names)):
             res[field] = {
@@ -547,6 +551,8 @@
                 res[field]['relation'] = relation
res[field]['domain'] = copy.copy(self._columns[field].domain) res[field]['context'] = copy.copy(self._columns[field].context)
+                res[field]['create'] = fcreate_accesses.get(field, True)
+                res[field]['delete'] = fdelete_accesses.get(field, True)
             if res[field]['type'] == 'one2many' \
                     and hasattr(self._columns[field], 'field'):
                 res[field]['relation_field'] = copy.copy(



--
[email protected] mailing list

Reply via email to