[IMP] share:

* Rules/Access rights
* Previous button is removed from wizard.

bzr revid: hmo@tinyerp.com-20100610180032-gyr17c7xow6qx5h7
This commit is contained in:
Harry (OpenERP)
2010-06-10 23:30:32 +05:30
parent 4181486b6a
commit 2f94616062
2 changed files with 51 additions and 29 deletions
+48 -24
View File
@@ -76,7 +76,7 @@ class share_create(osv.osv_memory):
'user_type': fields.selection( [ ('existing','Existing'),('new','New')],'User Type'),
'user_ids': fields.many2many('res.users', 'share_user_rel', 'share_id','user_id', 'Share Users'),
'new_user': fields.text("New user"),
'access_mode': fields.selection( [ ('readonly','READ ONLY'),('readwrite','READ & WRITE')],'Access Mode'),
'access_mode': fields.selection([('readwrite','READ & WRITE'),('readonly','READ ONLY')],'Access Mode'),
'write_access': fields.function(_access, method=True, string='Write Access',type='boolean', multi='write_access'),
'read_access': fields.function(_access, method=True, string='Write Access',type='boolean', multi='read_access'),
}
@@ -84,6 +84,7 @@ class share_create(osv.osv_memory):
'user_type' : 'existing',
'domain': '[]',
'access_mode': 'readonly'
}
def default_get(self, cr, uid, fields, context=None):
@@ -124,7 +125,8 @@ class share_create(osv.osv_memory):
vals ={
'domain': this.domain,
'action_id': this.action_id and this.action_id.id or False,
}
}
step1_id = this.id
context.update(vals)
value = {
@@ -132,7 +134,8 @@ class share_create(osv.osv_memory):
'view_type': 'form',
'view_mode': 'form',
'res_model': 'share.create',
'view_id': False,
'view_id': False,
'res_id': step1_id,
'views': [(step1_form_view_id, 'form'), (False, 'tree'), (False, 'calendar'), (False, 'graph')],
'type': 'ir.actions.act_window',
'context': context,
@@ -162,9 +165,6 @@ class share_create(osv.osv_memory):
'user_type': this.user_type,
'existing_user_ids': map(lambda x:x.id, this.user_ids),
'new_user': this.new_user,
'domain': this.domain,
'access_mode': this.access_mode,
'action_id': this.action_id and this.action_id.id or False
}
context.update(vals)
@@ -189,6 +189,13 @@ class share_create(osv.osv_memory):
"""
if not context:
context = {}
for this in self.browse(cr, uid, ids, context=context):
vals ={
'access_mode': this.access_mode,
}
context.update(vals)
group_obj = self.pool.get('res.groups')
user_obj = self.pool.get('res.users')
@@ -248,7 +255,7 @@ class share_create(osv.osv_memory):
#ACCESS RIGHTS / IR.RULES COMPUTATION
#TODO: TO Resolve Recurrent Problems
active_model_ids = model_obj.search(cr, uid, [('model','=',active_model)])
active_model_id = active_model_ids and active_model_ids[0] or False
@@ -268,14 +275,21 @@ class share_create(osv.osv_memory):
return obj
obj0 = model_obj.browse(cr, uid, active_model_id, context=context)
active_model = model_obj.browse(cr, uid, active_model_id, context=context)
obj0 = [(None, active_model)]
obj1 = _get_relation(active_model_id, ['one2many'])
obj2 = _get_relation(active_model_id, ['one2many', 'many2many'])
obj3 = _get_relation(active_model_id, ['many2one'])
for rel_field, model in obj1:
obj3 += _get_relation(model.id, ['many2one'])
if access_mode == 'readonly':
for rel_field, model in obj1+obj2+obj3:
#TODO: intersect with read access rights of user running the
# wizard, to avoid adding more access than current
res = []
for rel_field, model in obj0+obj1+obj2+obj3:
if model.id in res:
continue
res.append(model.id)
model_access_obj.create(cr, uid, {
'name': 'Read Access of group %s on %s model'%(share_group_name, model.name),
'model_id' : model.id,
@@ -283,27 +297,42 @@ class share_create(osv.osv_memory):
'perm_read' : True
})
if access_mode == 'readwrite':
for rel_field, model in obj1+obj2+obj3:
res = []
for rel_field, model in obj0+obj1:
if model.id in res:
continue
res.append(model.id)
model_access_obj.create(cr, uid, {
'name': 'Read Access of group %s on %s model'%(share_group_name, model.name),
'name': 'Write Access of group %s on %s model'%(share_group_name, model.name),
'model_id' : model.id,
'group_id' : group_id,
'perm_read' : True,
'perm_write' : True
'perm_write' : True,
'perm_unlink' : True,
'perm_create' : True,
})
#TODO: intersect with access rights of user
# running the wizard, to avoid adding more access than current
for rel_field, model in obj2+obj3:
if model.id in res:
continue
res.append(model.id)
model_access_obj.create(cr, uid, {
'name': 'Read Access of group %s on %s model'%(share_group_name, model.name),
'model_id' : model.id,
'group_id' : group_id,
'perm_read' : True
})
# TODO:
# And on OBJ0, OBJ1, OBJ2, OBJ3: add all rules from groups of the user
# that is sharing in the many2many of the rules on the new group
# (rule must be copied instead of adding it if it contains a reference to uid
# or user.xxx so it can be replaced correctly)
rule_obj.create(cr, uid, {
'name': '%s-%s'%(share_group_name, obj0.model),
'model_id': obj0.id,
'domain': domain,
'group_ids': [(6,0,[group_id])]
'name': '%s-%s'%(share_group_name, active_model.model),
'model_id': active_model.id,
'domain_force': domain,
'groups': [(6,0,[group_id])]
})
for rel_field, model in obj1:
obj1_domain = []
@@ -314,15 +343,10 @@ class share_create(osv.osv_memory):
rule_obj.create(cr, uid, {
'name': '%s-%s'%(share_group_name, model.model),
'model_id': model.id,
'domain': obj1_domain,
'domain_force': obj1_domain,
'groups': [(6,0,[group_id])]
})
# TODO:
# And on OBJ0, OBJ1, OBJ2, OBJ3: add all rules from groups of the user
# that is sharing in the many2many of the rules on the new group
# (rule must be copied instead of adding it if it contains a reference to uid
# or user.xxx so it can be replaced correctly)
context['share_model'] = active_model
context['share_model'] = active_model.model
context['share_rec_id'] = active_id
+3 -5
View File
@@ -39,8 +39,7 @@
</group>
<separator colspan="4"/>
<group col="3" colspan="4">
<button special="cancel" string="Cancel" icon='gtk-cancel'/>
<button name="do_step_1" string="Previous" colspan="1" type="object" icon="gtk-go-back"/>
<button special="cancel" string="Cancel" icon='gtk-cancel'/>
<button name="do_step_2" string="Next" colspan="1" type="object" icon="gtk-go-forward"/>
</group>
</form>
@@ -54,13 +53,12 @@
<field name="arch" type="xml">
<form string="Share">
<separator colspan="4" string="Step 3: Chose Access Mode"/>
<group colspan="4" attrs="{'invisible':[('read_access','!=',True)]}">
<field name="access_mode" attrs="{'readonly':[('write_access','!=',True)]}"/>
<group colspan="4">
<field name="access_mode"/>
</group>
<separator colspan="4"/>
<group col="3" colspan="4">
<button special="cancel" string="Cancel" icon='gtk-cancel'/>
<button name="do_step_2" string="Previous" colspan="1" type="object" icon="gtk-go-back"/>
<button name="do_step_3" string="Next" colspan="1" type="object" icon="gtk-go-forward"/>
</group>
</form>