From b8286b0e3dab12eaa56f52fc7c9ded4a68e21586 Mon Sep 17 00:00:00 2001 From: bch <> Date: Fri, 1 Jun 2007 10:57:34 +0000 Subject: [PATCH] IR_MODEL, ORM : A model without write access will appear as readonly for the client.\nir_model.check is modified to not raise exception if asked to. bzr revid: bch-3a158ff8d5710cfcbd610b966d078396e2df65fd --- bin/addons/base/ir/ir_model.py | 7 +++++-- bin/osv/orm.py | 3 +++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/bin/addons/base/ir/ir_model.py b/bin/addons/base/ir/ir_model.py index bbc56103f33..855a8e7030a 100644 --- a/bin/addons/base/ir/ir_model.py +++ b/bin/addons/base/ir/ir_model.py @@ -86,7 +86,7 @@ class ir_model_access(osv.osv): 'perm_create': fields.boolean('Create Access'), 'perm_unlink': fields.boolean('Delete Permission'), } - def check(self, cr, uid, model_name, mode='read'): + def check(self, cr, uid, model_name, mode='read',raise_exception=True): assert mode in ['read','write','create','unlink'], 'Invalid access mode for security' if uid==1: return True @@ -98,7 +98,10 @@ class ir_model_access(osv.osv): if r[0][0] == None : return True if not r[0][0]: - raise osv.except_osv('Access denied !', 'You can not %s this resource !' % mode) + if raise_exception: + raise osv.except_osv('Access denied !', 'You can not %s this resource !' % mode) + else: + return False return True check = tools.cache()(check) diff --git a/bin/osv/orm.py b/bin/osv/orm.py index 43327902bbc..9551ed3a14c 100644 --- a/bin/osv/orm.py +++ b/bin/osv/orm.py @@ -1059,11 +1059,14 @@ class orm(object): res = {} for parent in self._inherits: res.update(self.pool.get(parent).fields_get(cr, user, fields, context)) + read_access= self.pool.get('ir.model.access').check(cr, user, self._name,'write',raise_exception=False) for f in self._columns.keys(): res[f] = {'type': self._columns[f]._type} for arg in ('string','readonly','states','size','required','change_default','translate', 'help', 'select'): if getattr(self._columns[f], arg): res[f][arg] = getattr(self._columns[f], arg) + if not read_access: + res[f]['readonly']= True for arg in ('digits', 'invisible'): if hasattr(self._columns[f], arg) and getattr(self._columns[f], arg): res[f][arg] = getattr(self._columns[f], arg)