2015-09-05 20 views
6

ho provato tirando fuori l'accesso di eliminazione nella calendario-> cartella di sicurezza -> calendar_event_all dipendente, ma non ha dato alcun risultatoCome limitare un dipendente dall'eliminare un evento del calendario in Odoo?

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

questa è la linea di sicurezza di accesso nel file CSV di sicurezza di calendario

+0

"1" significa dare diritti di accesso e "0" significa viceversa. –

+0

sì lo so, ma dare 0 non lo ha fatto, –

+0

provare a esaminare tutti i diritti di accesso per il modello "calender.attendee_employee", e vedere quale gruppo sta avendo il diritto di eliminare, e controllare se questo utente è lì in quell'elenco . Può accadere a causa di qualche altro diritto di accesso che l'utente può ancora essere in grado di cancellare i dati. –

risposta

0

voi il cambiamento accesso a destra sotto per l'evento del calendario:

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

evento di calendario con eliminazione limitata per base.group_user = Impiegato.

se si desidera creare il proprio gruppo quindi aggiungere codice seguente tipo

Esempio:

<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> 
+0

L'ho già fatto, ma non ha effetto. permette all'altro utente di cancellare l'altro evento utente –

+0

non capisco? –

+0

Ho già effettuato le modifiche nel diritto di accesso, ma consente a un utente di eliminare l'evento del calendario di altri utenti –

0

L'idea è, Prova sovrascrivendo il metodo unlink

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

come ogni volta che proviamo a cancellare un record, verrà chiamato il metodo unlink e in uid avremo l'id utente corrente. quindi, se si desidera limitare la cancellazione per tutti gli utenti, quindi nel metodo sollevare un'eccezione con un messaggio appropriato. Se si desidera limitare la cancellazione per altri utenti, confrontare l'uid corrente con il record uid. Se differiscono, sollevare l'eccezione altrimenti consentire.

0

È possibile utilizzare JavaScript per gestire il proprio scopo. Creare un file JS nella cartella src/static del modulo personalizzato e aggiungere questo codice (non dimenticare di includere questo JS file nel data del __openerp__.py del modulo):

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")); 
       } 
      }); 
    }, 

Con questo codice, solo gli utenti chi appartiene al gruppo specificato (nel metodo Users.call) sarà in grado di rimuovere gli eventi del calendario (Riceveranno una finestra di dialogo di conferma: Sei sicuro di voler eliminare questo record?). Gli utenti che non appartengono a quel gruppo riceveranno un messaggio di avviso: L'utente non è autorizzato a eliminare questo evento.

0

È possibile estendere il metodo di scollegamento in questo modo.

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() 

È possibile utilizzare le regole di registrazione

<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> 

Si noti che con questa regola, essi non saranno in grado di modificarla pure.