Join the social network of Tech Nerds, increase skill rank, get work, manage projects...
  • How to Share filter created by user in OpenERP?

    • 0
    • 0
    • 0
    • 0
    • 0
    • 0
    • 0
    • 0
    • 252
    Comment on it

    In OpenERP first we create users and configure users access rights, then user will create a new filter, use filter group and also add a new ir.rule entry for model_id and domain on the target group_id. If restrict is True then instead of adding a rule, the domain will be combined with AND operator with all existing rules in the group and then share filter.

    Use this function show below


    def sharing_rule(self, cr, current_user, wizard_data, group_id, model_id, domain, restrict=False, rule_name=None, context=None):
            if rule_name is None:
                rule_name = _('Sharing filter created by user %s (%s) for group %s') % \
                                (, current_user.login, group_id)
            rule_obj = self.pool.get('ir.rule')
            rule_ids =, UID_ROOT, [('groups', 'in', group_id), ('model_id', '=', model_id)])
            if rule_ids:
                for rule in rule_obj.browse(cr, UID_ROOT, rule_ids, context=context):
                    if rule.domain_force == domain:
                        # don't create it twice!
                        if restrict:
                            self._logger.debug("Ignoring sharing rule on model %s with domain: %s the same rule exists already", model_id, domain)
                    if restrict:
                        # restricting existing rules is done by adding the clause
                        # with an AND, but we can't alter the rule if it belongs to
                        # other groups, so we duplicate if needed
                        rule = self._check_personal_rule_or_duplicate(cr, group_id, rule, context=context)
                        eval_ctx = rule_obj._eval_context_for_combinations()
                        org_domain = expression.normalize(eval(rule.domain_force, eval_ctx))
                        new_clause = expression.normalize(eval(domain, eval_ctx))
                        combined_domain = expression.AND([new_clause, org_domain])
                        rule.write({'domain_force': combined_domain, 'name': + _('(Modified)')})
                        self._logger.debug("Combining sharing rule %s on model %s with domain: %s",, model_id, domain)
            if not rule_ids or not restrict:
                rule_obj.create(cr, UID_ROOT, {
                    'name': rule_name,
                    'model_id': model_id,
                    'domain_force': domain,
                    'groups': [(4,group_id)]
                self._logger.debug("Created sharing rule on model %s with domain: %s", model_id, domain)


 0 Comment(s)

Sign In

Sign up using

Forgot Password
Fill out the form below and instructions to reset your password will be emailed to you:
Reset Password
Fill out the form below and reset your password: