如何限制员工删除Odoo中的日历事件?

时间:2015-09-05 05:13:04

标签: xml calendar odoo openerp-8

我尝试在日历中取出删除权限 - >安全文件夹 - > calendar_event_all员工,但没有给出任何结果

access_calendar_attendee_employee,calendar.attendee_employee,model_calendar_attendee,base.group_user,1,1,1,1

这是日历安全性的csv文件中的访问安全性行

4 个答案:

答案 0 :(得分:0)

您更改日历活动的下方访问权限:

access_calendar_event_all_employee,calendar.event_all_employee,model_calendar_event,base.group_user,1,1,1,0

日历事件限制删除base.group_user = Employee。

如果您想创建自己的组,请添加以下类型代码

示例:

 <record model="res.groups" id="group_user">
       <field name="implied_ids" eval="[(4, ref('group_no_one'))]"/>
       <field name="users" eval="[(4, ref('base.user_root'))]"/>
  </record>

答案 1 :(得分:0)

这里的想法是, 尝试重写unlink方法

def unlink(self,cr,uid,ids,context=None):
...
...

每当我们尝试删除记录时,都会调用unlink方法,在uid中我们将拥有当前的用户ID。 因此,如果要限制所有用户的删除,则在该方法中使用一些适当的消息引发异常。 如果要限制其他用户的删除,请将当前uid与记录uid进行比较。如果它们不同则提高异常,否则允许。

答案 2 :(得分:0)

您可以使用JavaScript来管理您的目的。在自定义模块的src/static文件夹中创建一个JS文件并添加此代码(不要忘记将此JS文件包含在模块的data的{​​{1}}中) :

__openerp__.py

使用此代码,只有属于指定组的用户(使用openerp.your_module_name = function(instance) { var _t = instance.web._t; var Users = new openerp.web.Model('res.users'); var Events = new openerp.web.Model('calendar.event'); instance.web_calendar.CalendarView.include({ remove_event: function(id) { var self = this; do_removal = function() { return $.when(self.dataset.unlink([id])).then(function() { self.$calendar.fullCalendar('removeEvents', id); }); }; confirm_removal = function() { if (self.options.confirm_on_delete) { if (confirm(_t("Are you sure you want to delete this record?"))) { do_removal(); } } else { do_removal(); } }; Users.call('has_group', ['put_here_the_module_name_where_the_group_which_can_remove_is_declared.put_here_the_group_which_can_remove']) .done(function(result) { if (result == true) { confirm_removal(); } else { alert(_t("Your user has not permission to delete this event")); } }); }, 方法)才能删除日历事件(他们将收到确认对话框:您确定要删除此记录?)。不属于该组的用户将收到一条警告消息:您的用户无权删除此活动

答案 3 :(得分:0)

您可以像这样扩展unlink方法。

from openerp import models, api, exceptions

class CalendarEvent(models.Model):
    _inherit = "calendar.event"

    @api.multi
    def unlink(self):
        for record in self:
            if record.create_uid != self.uid:
                raise exceptions.Warning(('Error'), ('You cannot delete an event that you did not create.'))
        return super(ClassName, self).unlink()

您可以使用记录规则

<record model="ir.rule" id="calendar_event_rule">
    <field name="name">Calendar Event : cannot delete someone else's event</field>
    <field name="model_id" ref="model_calendar_event"></field>
    <!-- Omitting group as you want it to be global -->
    <field name="domain_force">[('create_uid', '!=', user.id)]</field>
    <field eval="0" name="perm_write"></field>
    <field eval="1" name="perm_read"></field>
    <field eval="0" name="perm_unlink"></field>
    <field eval="1" name="perm_create"></field>
 </record>

请注意,使用此规则时,他们也无法对其进行编辑。