first commit

This commit is contained in:
root
2026-03-14 09:42:12 +00:00
commit 0adbd20c2c
10991 changed files with 1646955 additions and 0 deletions

View File

@@ -0,0 +1,2 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.

Binary file not shown.

Binary file not shown.

Binary file not shown.

13
modules/user_role/ir.py Normal file
View File

@@ -0,0 +1,13 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
from trytond.pool import PoolMeta
class Cron(metaclass=PoolMeta):
__name__ = 'ir.cron'
@classmethod
def __setup__(cls):
super().__setup__()
cls.method.selection.append(
('res.user|sync_roles', "Synchronize Users Roles"))

View File

@@ -0,0 +1,79 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:res.role,groups:"
msgid "Groups"
msgstr ""
msgctxt "field:res.role,name:"
msgid "Name"
msgstr ""
msgctxt "field:res.role,users:"
msgid "Users"
msgstr ""
msgctxt "field:res.role-res.group,group:"
msgid "Group"
msgstr ""
msgctxt "field:res.role-res.group,role:"
msgid "Role"
msgstr ""
msgctxt "field:res.user,roles:"
msgid "Roles"
msgstr ""
msgctxt "field:res.user.role,from_date:"
msgid "From Date"
msgstr ""
msgctxt "field:res.user.role,role:"
msgid "Role"
msgstr ""
msgctxt "field:res.user.role,to_date:"
msgid "To Date"
msgstr ""
msgctxt "field:res.user.role,user:"
msgid "User"
msgstr ""
msgctxt "model:ir.action,name:act_role_form"
msgid "Roles"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_role_form"
msgid "Roles"
msgstr ""
msgctxt "model:res.role,string:"
msgid "Role"
msgstr ""
msgctxt "model:res.role-res.group,string:"
msgid "Role - Group"
msgstr ""
msgctxt "model:res.user.role,string:"
msgid "User Role"
msgstr ""
msgctxt "selection:ir.cron,method:"
msgid "Synchronize Users Roles"
msgstr ""
msgctxt "view:res.role:"
msgid "Access Permissions"
msgstr ""
msgctxt "view:res.role:"
msgid "Members"
msgstr ""
msgctxt "view:res.user.role:"
msgid "Time"
msgstr ""

View File

@@ -0,0 +1,79 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:res.role,groups:"
msgid "Groups"
msgstr "Grups"
msgctxt "field:res.role,name:"
msgid "Name"
msgstr "Nom"
msgctxt "field:res.role,users:"
msgid "Users"
msgstr "Usuaris"
msgctxt "field:res.role-res.group,group:"
msgid "Group"
msgstr "Grup"
msgctxt "field:res.role-res.group,role:"
msgid "Role"
msgstr "Rol"
msgctxt "field:res.user,roles:"
msgid "Roles"
msgstr "Rols"
msgctxt "field:res.user.role,from_date:"
msgid "From Date"
msgstr "Des de la data"
msgctxt "field:res.user.role,role:"
msgid "Role"
msgstr "Rol"
msgctxt "field:res.user.role,to_date:"
msgid "To Date"
msgstr "Fins a la data"
msgctxt "field:res.user.role,user:"
msgid "User"
msgstr "Usuari"
msgctxt "model:ir.action,name:act_role_form"
msgid "Roles"
msgstr "Rols"
msgctxt "model:ir.ui.menu,name:menu_role_form"
msgid "Roles"
msgstr "Rols"
msgctxt "model:res.role,string:"
msgid "Role"
msgstr "Rol"
msgctxt "model:res.role-res.group,string:"
msgid "Role - Group"
msgstr "Rol - Grup"
msgctxt "model:res.user.role,string:"
msgid "User Role"
msgstr "Rol d'usuari"
msgctxt "selection:ir.cron,method:"
msgid "Synchronize Users Roles"
msgstr "Sincronitza rols d'usuari"
msgctxt "view:res.role:"
msgid "Access Permissions"
msgstr "Permisos d'accés"
msgctxt "view:res.role:"
msgid "Members"
msgstr "Membres"
msgctxt "view:res.user.role:"
msgid "Time"
msgstr "Hora"

View File

@@ -0,0 +1,79 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:res.role,groups:"
msgid "Groups"
msgstr ""
msgctxt "field:res.role,name:"
msgid "Name"
msgstr ""
msgctxt "field:res.role,users:"
msgid "Users"
msgstr ""
msgctxt "field:res.role-res.group,group:"
msgid "Group"
msgstr ""
msgctxt "field:res.role-res.group,role:"
msgid "Role"
msgstr ""
msgctxt "field:res.user,roles:"
msgid "Roles"
msgstr ""
msgctxt "field:res.user.role,from_date:"
msgid "From Date"
msgstr ""
msgctxt "field:res.user.role,role:"
msgid "Role"
msgstr ""
msgctxt "field:res.user.role,to_date:"
msgid "To Date"
msgstr ""
msgctxt "field:res.user.role,user:"
msgid "User"
msgstr ""
msgctxt "model:ir.action,name:act_role_form"
msgid "Roles"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_role_form"
msgid "Roles"
msgstr ""
msgctxt "model:res.role,string:"
msgid "Role"
msgstr ""
msgctxt "model:res.role-res.group,string:"
msgid "Role - Group"
msgstr ""
msgctxt "model:res.user.role,string:"
msgid "User Role"
msgstr ""
msgctxt "selection:ir.cron,method:"
msgid "Synchronize Users Roles"
msgstr ""
msgctxt "view:res.role:"
msgid "Access Permissions"
msgstr ""
msgctxt "view:res.role:"
msgid "Members"
msgstr ""
msgctxt "view:res.user.role:"
msgid "Time"
msgstr ""

View File

@@ -0,0 +1,79 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:res.role,groups:"
msgid "Groups"
msgstr "Gruppen"
msgctxt "field:res.role,name:"
msgid "Name"
msgstr "Name"
msgctxt "field:res.role,users:"
msgid "Users"
msgstr "Benutzer"
msgctxt "field:res.role-res.group,group:"
msgid "Group"
msgstr "Gruppe"
msgctxt "field:res.role-res.group,role:"
msgid "Role"
msgstr "Rolle"
msgctxt "field:res.user,roles:"
msgid "Roles"
msgstr "Rollen"
msgctxt "field:res.user.role,from_date:"
msgid "From Date"
msgstr "Von Datum"
msgctxt "field:res.user.role,role:"
msgid "Role"
msgstr "Rolle"
msgctxt "field:res.user.role,to_date:"
msgid "To Date"
msgstr "Bis Datum"
msgctxt "field:res.user.role,user:"
msgid "User"
msgstr "Benutzer"
msgctxt "model:ir.action,name:act_role_form"
msgid "Roles"
msgstr "Rollen"
msgctxt "model:ir.ui.menu,name:menu_role_form"
msgid "Roles"
msgstr "Rollen"
msgctxt "model:res.role,string:"
msgid "Role"
msgstr "Rolle"
msgctxt "model:res.role-res.group,string:"
msgid "Role - Group"
msgstr "Rolle - Gruppe"
msgctxt "model:res.user.role,string:"
msgid "User Role"
msgstr "Benutzerrolle"
msgctxt "selection:ir.cron,method:"
msgid "Synchronize Users Roles"
msgstr "Benutzerrollen synchronisieren"
msgctxt "view:res.role:"
msgid "Access Permissions"
msgstr "Zugriffsberechtigungen"
msgctxt "view:res.role:"
msgid "Members"
msgstr "Mitglieder"
msgctxt "view:res.user.role:"
msgid "Time"
msgstr "Uhrzeit"

View File

@@ -0,0 +1,79 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:res.role,groups:"
msgid "Groups"
msgstr "Grupos"
msgctxt "field:res.role,name:"
msgid "Name"
msgstr "Nombre"
msgctxt "field:res.role,users:"
msgid "Users"
msgstr "Usuarios"
msgctxt "field:res.role-res.group,group:"
msgid "Group"
msgstr "Grupo"
msgctxt "field:res.role-res.group,role:"
msgid "Role"
msgstr "Rol"
msgctxt "field:res.user,roles:"
msgid "Roles"
msgstr "Roles"
msgctxt "field:res.user.role,from_date:"
msgid "From Date"
msgstr "Desde la fecha"
msgctxt "field:res.user.role,role:"
msgid "Role"
msgstr "Rol"
msgctxt "field:res.user.role,to_date:"
msgid "To Date"
msgstr "Hasta la fecha"
msgctxt "field:res.user.role,user:"
msgid "User"
msgstr "Usuario"
msgctxt "model:ir.action,name:act_role_form"
msgid "Roles"
msgstr "Roles"
msgctxt "model:ir.ui.menu,name:menu_role_form"
msgid "Roles"
msgstr "Roles"
msgctxt "model:res.role,string:"
msgid "Role"
msgstr "Rol"
msgctxt "model:res.role-res.group,string:"
msgid "Role - Group"
msgstr "Rol - Grupo"
msgctxt "model:res.user.role,string:"
msgid "User Role"
msgstr "Rol de usuario"
msgctxt "selection:ir.cron,method:"
msgid "Synchronize Users Roles"
msgstr "Sincronizar roles de usuario"
msgctxt "view:res.role:"
msgid "Access Permissions"
msgstr "Permisos de acceso"
msgctxt "view:res.role:"
msgid "Members"
msgstr "Miembros"
msgctxt "view:res.user.role:"
msgid "Time"
msgstr "Hora"

View File

@@ -0,0 +1,79 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:res.role,groups:"
msgid "Groups"
msgstr ""
msgctxt "field:res.role,name:"
msgid "Name"
msgstr ""
msgctxt "field:res.role,users:"
msgid "Users"
msgstr ""
msgctxt "field:res.role-res.group,group:"
msgid "Group"
msgstr ""
msgctxt "field:res.role-res.group,role:"
msgid "Role"
msgstr ""
msgctxt "field:res.user,roles:"
msgid "Roles"
msgstr ""
msgctxt "field:res.user.role,from_date:"
msgid "From Date"
msgstr ""
msgctxt "field:res.user.role,role:"
msgid "Role"
msgstr ""
msgctxt "field:res.user.role,to_date:"
msgid "To Date"
msgstr ""
msgctxt "field:res.user.role,user:"
msgid "User"
msgstr ""
msgctxt "model:ir.action,name:act_role_form"
msgid "Roles"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_role_form"
msgid "Roles"
msgstr ""
msgctxt "model:res.role,string:"
msgid "Role"
msgstr ""
msgctxt "model:res.role-res.group,string:"
msgid "Role - Group"
msgstr ""
msgctxt "model:res.user.role,string:"
msgid "User Role"
msgstr ""
msgctxt "selection:ir.cron,method:"
msgid "Synchronize Users Roles"
msgstr ""
msgctxt "view:res.role:"
msgid "Access Permissions"
msgstr ""
msgctxt "view:res.role:"
msgid "Members"
msgstr ""
msgctxt "view:res.user.role:"
msgid "Time"
msgstr ""

View File

@@ -0,0 +1,83 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:res.role,groups:"
msgid "Groups"
msgstr "Grupid"
msgctxt "field:res.role,name:"
msgid "Name"
msgstr "Nimi"
#, fuzzy
msgctxt "field:res.role,users:"
msgid "Users"
msgstr "Kasutaja"
msgctxt "field:res.role-res.group,group:"
msgid "Group"
msgstr "Grupp"
msgctxt "field:res.role-res.group,role:"
msgid "Role"
msgstr "Roll"
msgctxt "field:res.user,roles:"
msgid "Roles"
msgstr "Rollid"
msgctxt "field:res.user.role,from_date:"
msgid "From Date"
msgstr "Kuupäevast"
msgctxt "field:res.user.role,role:"
msgid "Role"
msgstr "Roll"
msgctxt "field:res.user.role,to_date:"
msgid "To Date"
msgstr "Kuupäevani"
msgctxt "field:res.user.role,user:"
msgid "User"
msgstr "Kasutaja"
msgctxt "model:ir.action,name:act_role_form"
msgid "Roles"
msgstr "Rollid"
msgctxt "model:ir.ui.menu,name:menu_role_form"
msgid "Roles"
msgstr "Rollid"
#, fuzzy
msgctxt "model:res.role,string:"
msgid "Role"
msgstr "Roll"
#, fuzzy
msgctxt "model:res.role-res.group,string:"
msgid "Role - Group"
msgstr "Roll - Grupp"
#, fuzzy
msgctxt "model:res.user.role,string:"
msgid "User Role"
msgstr "Kasutajaroll"
msgctxt "selection:ir.cron,method:"
msgid "Synchronize Users Roles"
msgstr "Sünkroniseeri kasutajarollid"
msgctxt "view:res.role:"
msgid "Access Permissions"
msgstr ""
msgctxt "view:res.role:"
msgid "Members"
msgstr ""
msgctxt "view:res.user.role:"
msgid "Time"
msgstr ""

View File

@@ -0,0 +1,84 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:res.role,groups:"
msgid "Groups"
msgstr "گروه ها"
msgctxt "field:res.role,name:"
msgid "Name"
msgstr "نام"
#, fuzzy
msgctxt "field:res.role,users:"
msgid "Users"
msgstr "کاربر"
msgctxt "field:res.role-res.group,group:"
msgid "Group"
msgstr "گروه"
msgctxt "field:res.role-res.group,role:"
msgid "Role"
msgstr "نقش، وظیفه"
msgctxt "field:res.user,roles:"
msgid "Roles"
msgstr "نقش ها، وظایف"
msgctxt "field:res.user.role,from_date:"
msgid "From Date"
msgstr "از تاریخ"
msgctxt "field:res.user.role,role:"
msgid "Role"
msgstr "نقش، وظیفه"
msgctxt "field:res.user.role,to_date:"
msgid "To Date"
msgstr "تا تاریخ"
msgctxt "field:res.user.role,user:"
msgid "User"
msgstr "کاربر"
msgctxt "model:ir.action,name:act_role_form"
msgid "Roles"
msgstr "نقش ها، وظایف"
msgctxt "model:ir.ui.menu,name:menu_role_form"
msgid "Roles"
msgstr "نقش ها، وظایف"
#, fuzzy
msgctxt "model:res.role,string:"
msgid "Role"
msgstr "نقش، وظیفه"
#, fuzzy
msgctxt "model:res.role-res.group,string:"
msgid "Role - Group"
msgstr "گروه - نقش، وظیفه"
#, fuzzy
msgctxt "model:res.user.role,string:"
msgid "User Role"
msgstr "نقش کاربر"
#, fuzzy
msgctxt "selection:ir.cron,method:"
msgid "Synchronize Users Roles"
msgstr "هماهنگ سازی نقش های کاربران"
msgctxt "view:res.role:"
msgid "Access Permissions"
msgstr ""
msgctxt "view:res.role:"
msgid "Members"
msgstr ""
msgctxt "view:res.user.role:"
msgid "Time"
msgstr ""

View File

@@ -0,0 +1,79 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:res.role,groups:"
msgid "Groups"
msgstr ""
msgctxt "field:res.role,name:"
msgid "Name"
msgstr ""
msgctxt "field:res.role,users:"
msgid "Users"
msgstr ""
msgctxt "field:res.role-res.group,group:"
msgid "Group"
msgstr ""
msgctxt "field:res.role-res.group,role:"
msgid "Role"
msgstr ""
msgctxt "field:res.user,roles:"
msgid "Roles"
msgstr ""
msgctxt "field:res.user.role,from_date:"
msgid "From Date"
msgstr ""
msgctxt "field:res.user.role,role:"
msgid "Role"
msgstr ""
msgctxt "field:res.user.role,to_date:"
msgid "To Date"
msgstr ""
msgctxt "field:res.user.role,user:"
msgid "User"
msgstr ""
msgctxt "model:ir.action,name:act_role_form"
msgid "Roles"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_role_form"
msgid "Roles"
msgstr ""
msgctxt "model:res.role,string:"
msgid "Role"
msgstr ""
msgctxt "model:res.role-res.group,string:"
msgid "Role - Group"
msgstr ""
msgctxt "model:res.user.role,string:"
msgid "User Role"
msgstr ""
msgctxt "selection:ir.cron,method:"
msgid "Synchronize Users Roles"
msgstr ""
msgctxt "view:res.role:"
msgid "Access Permissions"
msgstr ""
msgctxt "view:res.role:"
msgid "Members"
msgstr ""
msgctxt "view:res.user.role:"
msgid "Time"
msgstr ""

View File

@@ -0,0 +1,79 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:res.role,groups:"
msgid "Groups"
msgstr "Groupes"
msgctxt "field:res.role,name:"
msgid "Name"
msgstr "Nom"
msgctxt "field:res.role,users:"
msgid "Users"
msgstr "Utilisateurs"
msgctxt "field:res.role-res.group,group:"
msgid "Group"
msgstr "Groupe"
msgctxt "field:res.role-res.group,role:"
msgid "Role"
msgstr "Rôle"
msgctxt "field:res.user,roles:"
msgid "Roles"
msgstr "Rôles"
msgctxt "field:res.user.role,from_date:"
msgid "From Date"
msgstr "Date de début"
msgctxt "field:res.user.role,role:"
msgid "Role"
msgstr "Rôle"
msgctxt "field:res.user.role,to_date:"
msgid "To Date"
msgstr "Date de fin"
msgctxt "field:res.user.role,user:"
msgid "User"
msgstr "Utilisateur"
msgctxt "model:ir.action,name:act_role_form"
msgid "Roles"
msgstr "Rôles"
msgctxt "model:ir.ui.menu,name:menu_role_form"
msgid "Roles"
msgstr "Rôles"
msgctxt "model:res.role,string:"
msgid "Role"
msgstr "Rôle"
msgctxt "model:res.role-res.group,string:"
msgid "Role - Group"
msgstr "Rôle - Groupe"
msgctxt "model:res.user.role,string:"
msgid "User Role"
msgstr "Rôle de l'utilisateur"
msgctxt "selection:ir.cron,method:"
msgid "Synchronize Users Roles"
msgstr "Synchroniser les utilisateurs et rôles"
msgctxt "view:res.role:"
msgid "Access Permissions"
msgstr "Permissions d'accès"
msgctxt "view:res.role:"
msgid "Members"
msgstr "Membres"
msgctxt "view:res.user.role:"
msgid "Time"
msgstr "Heure"

View File

@@ -0,0 +1,79 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:res.role,groups:"
msgid "Groups"
msgstr ""
msgctxt "field:res.role,name:"
msgid "Name"
msgstr ""
msgctxt "field:res.role,users:"
msgid "Users"
msgstr ""
msgctxt "field:res.role-res.group,group:"
msgid "Group"
msgstr ""
msgctxt "field:res.role-res.group,role:"
msgid "Role"
msgstr ""
msgctxt "field:res.user,roles:"
msgid "Roles"
msgstr ""
msgctxt "field:res.user.role,from_date:"
msgid "From Date"
msgstr ""
msgctxt "field:res.user.role,role:"
msgid "Role"
msgstr ""
msgctxt "field:res.user.role,to_date:"
msgid "To Date"
msgstr ""
msgctxt "field:res.user.role,user:"
msgid "User"
msgstr ""
msgctxt "model:ir.action,name:act_role_form"
msgid "Roles"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_role_form"
msgid "Roles"
msgstr ""
msgctxt "model:res.role,string:"
msgid "Role"
msgstr ""
msgctxt "model:res.role-res.group,string:"
msgid "Role - Group"
msgstr ""
msgctxt "model:res.user.role,string:"
msgid "User Role"
msgstr ""
msgctxt "selection:ir.cron,method:"
msgid "Synchronize Users Roles"
msgstr ""
msgctxt "view:res.role:"
msgid "Access Permissions"
msgstr ""
msgctxt "view:res.role:"
msgid "Members"
msgstr ""
msgctxt "view:res.user.role:"
msgid "Time"
msgstr ""

View File

@@ -0,0 +1,81 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:res.role,groups:"
msgid "Groups"
msgstr ""
msgctxt "field:res.role,name:"
msgid "Name"
msgstr "Nama"
#, fuzzy
msgctxt "field:res.role,users:"
msgid "Users"
msgstr "Pengguna"
msgctxt "field:res.role-res.group,group:"
msgid "Group"
msgstr "Kelompok"
msgctxt "field:res.role-res.group,role:"
msgid "Role"
msgstr ""
msgctxt "field:res.user,roles:"
msgid "Roles"
msgstr ""
msgctxt "field:res.user.role,from_date:"
msgid "From Date"
msgstr "Dari Tanggal"
msgctxt "field:res.user.role,role:"
msgid "Role"
msgstr ""
msgctxt "field:res.user.role,to_date:"
msgid "To Date"
msgstr "Ke Tanggal"
msgctxt "field:res.user.role,user:"
msgid "User"
msgstr "Pengguna"
msgctxt "model:ir.action,name:act_role_form"
msgid "Roles"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_role_form"
msgid "Roles"
msgstr ""
msgctxt "model:res.role,string:"
msgid "Role"
msgstr ""
msgctxt "model:res.role-res.group,string:"
msgid "Role - Group"
msgstr ""
#, fuzzy
msgctxt "model:res.user.role,string:"
msgid "User Role"
msgstr "Pengguna"
msgctxt "selection:ir.cron,method:"
msgid "Synchronize Users Roles"
msgstr ""
msgctxt "view:res.role:"
msgid "Access Permissions"
msgstr ""
msgctxt "view:res.role:"
msgid "Members"
msgstr ""
msgctxt "view:res.user.role:"
msgid "Time"
msgstr ""

View File

@@ -0,0 +1,83 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:res.role,groups:"
msgid "Groups"
msgstr "Gruppi"
msgctxt "field:res.role,name:"
msgid "Name"
msgstr "Nome"
#, fuzzy
msgctxt "field:res.role,users:"
msgid "Users"
msgstr "Utente"
msgctxt "field:res.role-res.group,group:"
msgid "Group"
msgstr "Gruppo"
msgctxt "field:res.role-res.group,role:"
msgid "Role"
msgstr "Ruolo"
msgctxt "field:res.user,roles:"
msgid "Roles"
msgstr "Ruoli"
msgctxt "field:res.user.role,from_date:"
msgid "From Date"
msgstr "Dalla data"
msgctxt "field:res.user.role,role:"
msgid "Role"
msgstr "Ruolo"
msgctxt "field:res.user.role,to_date:"
msgid "To Date"
msgstr "A data"
msgctxt "field:res.user.role,user:"
msgid "User"
msgstr "Utente"
msgctxt "model:ir.action,name:act_role_form"
msgid "Roles"
msgstr "Ruoli"
msgctxt "model:ir.ui.menu,name:menu_role_form"
msgid "Roles"
msgstr "Ruoli"
#, fuzzy
msgctxt "model:res.role,string:"
msgid "Role"
msgstr "Ruolo"
#, fuzzy
msgctxt "model:res.role-res.group,string:"
msgid "Role - Group"
msgstr "Ruolo - Gruppo"
#, fuzzy
msgctxt "model:res.user.role,string:"
msgid "User Role"
msgstr "Ruolo utente"
msgctxt "selection:ir.cron,method:"
msgid "Synchronize Users Roles"
msgstr "Sincronizza ruoli utenti"
msgctxt "view:res.role:"
msgid "Access Permissions"
msgstr ""
msgctxt "view:res.role:"
msgid "Members"
msgstr ""
msgctxt "view:res.user.role:"
msgid "Time"
msgstr "Orario"

View File

@@ -0,0 +1,79 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:res.role,groups:"
msgid "Groups"
msgstr ""
msgctxt "field:res.role,name:"
msgid "Name"
msgstr ""
msgctxt "field:res.role,users:"
msgid "Users"
msgstr ""
msgctxt "field:res.role-res.group,group:"
msgid "Group"
msgstr ""
msgctxt "field:res.role-res.group,role:"
msgid "Role"
msgstr ""
msgctxt "field:res.user,roles:"
msgid "Roles"
msgstr ""
msgctxt "field:res.user.role,from_date:"
msgid "From Date"
msgstr ""
msgctxt "field:res.user.role,role:"
msgid "Role"
msgstr ""
msgctxt "field:res.user.role,to_date:"
msgid "To Date"
msgstr ""
msgctxt "field:res.user.role,user:"
msgid "User"
msgstr ""
msgctxt "model:ir.action,name:act_role_form"
msgid "Roles"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_role_form"
msgid "Roles"
msgstr ""
msgctxt "model:res.role,string:"
msgid "Role"
msgstr ""
msgctxt "model:res.role-res.group,string:"
msgid "Role - Group"
msgstr ""
msgctxt "model:res.user.role,string:"
msgid "User Role"
msgstr ""
msgctxt "selection:ir.cron,method:"
msgid "Synchronize Users Roles"
msgstr ""
msgctxt "view:res.role:"
msgid "Access Permissions"
msgstr ""
msgctxt "view:res.role:"
msgid "Members"
msgstr ""
msgctxt "view:res.user.role:"
msgid "Time"
msgstr ""

View File

@@ -0,0 +1,82 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:res.role,groups:"
msgid "Groups"
msgstr ""
msgctxt "field:res.role,name:"
msgid "Name"
msgstr ""
#, fuzzy
msgctxt "field:res.role,users:"
msgid "Users"
msgstr "Naudotojas"
msgctxt "field:res.role-res.group,group:"
msgid "Group"
msgstr ""
msgctxt "field:res.role-res.group,role:"
msgid "Role"
msgstr ""
msgctxt "field:res.user,roles:"
msgid "Roles"
msgstr ""
msgctxt "field:res.user.role,from_date:"
msgid "From Date"
msgstr ""
msgctxt "field:res.user.role,role:"
msgid "Role"
msgstr ""
msgctxt "field:res.user.role,to_date:"
msgid "To Date"
msgstr ""
msgctxt "field:res.user.role,user:"
msgid "User"
msgstr "Naudotojas"
msgctxt "model:ir.action,name:act_role_form"
msgid "Roles"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_role_form"
msgid "Roles"
msgstr ""
#, fuzzy
msgctxt "model:res.role,string:"
msgid "Role"
msgstr "Naudotojo vaidmenys"
msgctxt "model:res.role-res.group,string:"
msgid "Role - Group"
msgstr ""
#, fuzzy
msgctxt "model:res.user.role,string:"
msgid "User Role"
msgstr "Naudotojo vaidmenys"
msgctxt "selection:ir.cron,method:"
msgid "Synchronize Users Roles"
msgstr ""
msgctxt "view:res.role:"
msgid "Access Permissions"
msgstr ""
msgctxt "view:res.role:"
msgid "Members"
msgstr ""
msgctxt "view:res.user.role:"
msgid "Time"
msgstr ""

View File

@@ -0,0 +1,79 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:res.role,groups:"
msgid "Groups"
msgstr "Groepen"
msgctxt "field:res.role,name:"
msgid "Name"
msgstr "Naam"
msgctxt "field:res.role,users:"
msgid "Users"
msgstr "Gebruikers"
msgctxt "field:res.role-res.group,group:"
msgid "Group"
msgstr "Groep"
msgctxt "field:res.role-res.group,role:"
msgid "Role"
msgstr "Rol"
msgctxt "field:res.user,roles:"
msgid "Roles"
msgstr "Rollen"
msgctxt "field:res.user.role,from_date:"
msgid "From Date"
msgstr "Vanaf datum"
msgctxt "field:res.user.role,role:"
msgid "Role"
msgstr "Rol"
msgctxt "field:res.user.role,to_date:"
msgid "To Date"
msgstr "Tot datum"
msgctxt "field:res.user.role,user:"
msgid "User"
msgstr "Gebruiker"
msgctxt "model:ir.action,name:act_role_form"
msgid "Roles"
msgstr "Rollen"
msgctxt "model:ir.ui.menu,name:menu_role_form"
msgid "Roles"
msgstr "Rollen"
msgctxt "model:res.role,string:"
msgid "Role"
msgstr "Rol"
msgctxt "model:res.role-res.group,string:"
msgid "Role - Group"
msgstr "Rol - Groep"
msgctxt "model:res.user.role,string:"
msgid "User Role"
msgstr "Gebruikersrol"
msgctxt "selection:ir.cron,method:"
msgid "Synchronize Users Roles"
msgstr "Gebruikersrollen synchroniseren"
msgctxt "view:res.role:"
msgid "Access Permissions"
msgstr "Toegangsrechten"
msgctxt "view:res.role:"
msgid "Members"
msgstr "Leden"
msgctxt "view:res.user.role:"
msgid "Time"
msgstr "Tijd"

View File

@@ -0,0 +1,83 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:res.role,groups:"
msgid "Groups"
msgstr "Grupy"
msgctxt "field:res.role,name:"
msgid "Name"
msgstr "Nazwa"
#, fuzzy
msgctxt "field:res.role,users:"
msgid "Users"
msgstr "Użytkownik"
msgctxt "field:res.role-res.group,group:"
msgid "Group"
msgstr "Grupa"
msgctxt "field:res.role-res.group,role:"
msgid "Role"
msgstr "Rola"
msgctxt "field:res.user,roles:"
msgid "Roles"
msgstr "Role"
msgctxt "field:res.user.role,from_date:"
msgid "From Date"
msgstr "Od"
msgctxt "field:res.user.role,role:"
msgid "Role"
msgstr "Rola"
msgctxt "field:res.user.role,to_date:"
msgid "To Date"
msgstr "Do"
msgctxt "field:res.user.role,user:"
msgid "User"
msgstr "Użytkownik"
msgctxt "model:ir.action,name:act_role_form"
msgid "Roles"
msgstr "Role"
msgctxt "model:ir.ui.menu,name:menu_role_form"
msgid "Roles"
msgstr "Role"
#, fuzzy
msgctxt "model:res.role,string:"
msgid "Role"
msgstr "Rola"
#, fuzzy
msgctxt "model:res.role-res.group,string:"
msgid "Role - Group"
msgstr "Rola - Grupa"
#, fuzzy
msgctxt "model:res.user.role,string:"
msgid "User Role"
msgstr "Rola użytkownika"
msgctxt "selection:ir.cron,method:"
msgid "Synchronize Users Roles"
msgstr "Synchronizuj role użytkowników"
msgctxt "view:res.role:"
msgid "Access Permissions"
msgstr ""
msgctxt "view:res.role:"
msgid "Members"
msgstr ""
msgctxt "view:res.user.role:"
msgid "Time"
msgstr ""

View File

@@ -0,0 +1,80 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:res.role,groups:"
msgid "Groups"
msgstr "Grupos"
msgctxt "field:res.role,name:"
msgid "Name"
msgstr "Nome"
#, fuzzy
msgctxt "field:res.role,users:"
msgid "Users"
msgstr "Usuário"
msgctxt "field:res.role-res.group,group:"
msgid "Group"
msgstr "Grupo"
msgctxt "field:res.role-res.group,role:"
msgid "Role"
msgstr "Função"
msgctxt "field:res.user,roles:"
msgid "Roles"
msgstr "Funções"
msgctxt "field:res.user.role,from_date:"
msgid "From Date"
msgstr "A Partir da Data"
msgctxt "field:res.user.role,role:"
msgid "Role"
msgstr "Função"
msgctxt "field:res.user.role,to_date:"
msgid "To Date"
msgstr "Até a Data"
msgctxt "field:res.user.role,user:"
msgid "User"
msgstr "Usuário"
msgctxt "model:ir.action,name:act_role_form"
msgid "Roles"
msgstr "Funções"
msgctxt "model:ir.ui.menu,name:menu_role_form"
msgid "Roles"
msgstr "Funções"
msgctxt "model:res.role,string:"
msgid "Role"
msgstr "Função"
msgctxt "model:res.role-res.group,string:"
msgid "Role - Group"
msgstr "Função - Grupo"
msgctxt "model:res.user.role,string:"
msgid "User Role"
msgstr "Função do Usuário"
msgctxt "selection:ir.cron,method:"
msgid "Synchronize Users Roles"
msgstr "Sincronizar Funções de Usuários"
msgctxt "view:res.role:"
msgid "Access Permissions"
msgstr ""
msgctxt "view:res.role:"
msgid "Members"
msgstr ""
msgctxt "view:res.user.role:"
msgid "Time"
msgstr "Tempo"

View File

@@ -0,0 +1,79 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:res.role,groups:"
msgid "Groups"
msgstr "Grupuri"
msgctxt "field:res.role,name:"
msgid "Name"
msgstr ""
msgctxt "field:res.role,users:"
msgid "Users"
msgstr ""
msgctxt "field:res.role-res.group,group:"
msgid "Group"
msgstr ""
msgctxt "field:res.role-res.group,role:"
msgid "Role"
msgstr ""
msgctxt "field:res.user,roles:"
msgid "Roles"
msgstr ""
msgctxt "field:res.user.role,from_date:"
msgid "From Date"
msgstr ""
msgctxt "field:res.user.role,role:"
msgid "Role"
msgstr ""
msgctxt "field:res.user.role,to_date:"
msgid "To Date"
msgstr ""
msgctxt "field:res.user.role,user:"
msgid "User"
msgstr ""
msgctxt "model:ir.action,name:act_role_form"
msgid "Roles"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_role_form"
msgid "Roles"
msgstr ""
msgctxt "model:res.role,string:"
msgid "Role"
msgstr ""
msgctxt "model:res.role-res.group,string:"
msgid "Role - Group"
msgstr ""
msgctxt "model:res.user.role,string:"
msgid "User Role"
msgstr ""
msgctxt "selection:ir.cron,method:"
msgid "Synchronize Users Roles"
msgstr ""
msgctxt "view:res.role:"
msgid "Access Permissions"
msgstr ""
msgctxt "view:res.role:"
msgid "Members"
msgstr ""
msgctxt "view:res.user.role:"
msgid "Time"
msgstr ""

View File

@@ -0,0 +1,79 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:res.role,groups:"
msgid "Groups"
msgstr ""
msgctxt "field:res.role,name:"
msgid "Name"
msgstr ""
msgctxt "field:res.role,users:"
msgid "Users"
msgstr ""
msgctxt "field:res.role-res.group,group:"
msgid "Group"
msgstr ""
msgctxt "field:res.role-res.group,role:"
msgid "Role"
msgstr ""
msgctxt "field:res.user,roles:"
msgid "Roles"
msgstr ""
msgctxt "field:res.user.role,from_date:"
msgid "From Date"
msgstr ""
msgctxt "field:res.user.role,role:"
msgid "Role"
msgstr ""
msgctxt "field:res.user.role,to_date:"
msgid "To Date"
msgstr ""
msgctxt "field:res.user.role,user:"
msgid "User"
msgstr ""
msgctxt "model:ir.action,name:act_role_form"
msgid "Roles"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_role_form"
msgid "Roles"
msgstr ""
msgctxt "model:res.role,string:"
msgid "Role"
msgstr ""
msgctxt "model:res.role-res.group,string:"
msgid "Role - Group"
msgstr ""
msgctxt "model:res.user.role,string:"
msgid "User Role"
msgstr ""
msgctxt "selection:ir.cron,method:"
msgid "Synchronize Users Roles"
msgstr ""
msgctxt "view:res.role:"
msgid "Access Permissions"
msgstr ""
msgctxt "view:res.role:"
msgid "Members"
msgstr ""
msgctxt "view:res.user.role:"
msgid "Time"
msgstr ""

View File

@@ -0,0 +1,83 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:res.role,groups:"
msgid "Groups"
msgstr "Skupine"
msgctxt "field:res.role,name:"
msgid "Name"
msgstr "Naziv"
#, fuzzy
msgctxt "field:res.role,users:"
msgid "Users"
msgstr "Uporabnik"
msgctxt "field:res.role-res.group,group:"
msgid "Group"
msgstr "Skupina"
msgctxt "field:res.role-res.group,role:"
msgid "Role"
msgstr "Vloga"
msgctxt "field:res.user,roles:"
msgid "Roles"
msgstr "Vloge"
msgctxt "field:res.user.role,from_date:"
msgid "From Date"
msgstr "Od datuma"
msgctxt "field:res.user.role,role:"
msgid "Role"
msgstr "Vloga"
msgctxt "field:res.user.role,to_date:"
msgid "To Date"
msgstr "Do datuma"
msgctxt "field:res.user.role,user:"
msgid "User"
msgstr "Uporabnik"
msgctxt "model:ir.action,name:act_role_form"
msgid "Roles"
msgstr "Vloge"
msgctxt "model:ir.ui.menu,name:menu_role_form"
msgid "Roles"
msgstr "Vloge"
#, fuzzy
msgctxt "model:res.role,string:"
msgid "Role"
msgstr "Vloga"
#, fuzzy
msgctxt "model:res.role-res.group,string:"
msgid "Role - Group"
msgstr "Vloga - Skupina"
#, fuzzy
msgctxt "model:res.user.role,string:"
msgid "User Role"
msgstr "Vloga uporabnika"
msgctxt "selection:ir.cron,method:"
msgid "Synchronize Users Roles"
msgstr "Sinhroniziraj vloge uporabnikov"
msgctxt "view:res.role:"
msgid "Access Permissions"
msgstr ""
msgctxt "view:res.role:"
msgid "Members"
msgstr ""
msgctxt "view:res.user.role:"
msgid "Time"
msgstr "Čas"

View File

@@ -0,0 +1,79 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:res.role,groups:"
msgid "Groups"
msgstr ""
msgctxt "field:res.role,name:"
msgid "Name"
msgstr ""
msgctxt "field:res.role,users:"
msgid "Users"
msgstr ""
msgctxt "field:res.role-res.group,group:"
msgid "Group"
msgstr ""
msgctxt "field:res.role-res.group,role:"
msgid "Role"
msgstr ""
msgctxt "field:res.user,roles:"
msgid "Roles"
msgstr ""
msgctxt "field:res.user.role,from_date:"
msgid "From Date"
msgstr ""
msgctxt "field:res.user.role,role:"
msgid "Role"
msgstr ""
msgctxt "field:res.user.role,to_date:"
msgid "To Date"
msgstr ""
msgctxt "field:res.user.role,user:"
msgid "User"
msgstr ""
msgctxt "model:ir.action,name:act_role_form"
msgid "Roles"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_role_form"
msgid "Roles"
msgstr ""
msgctxt "model:res.role,string:"
msgid "Role"
msgstr ""
msgctxt "model:res.role-res.group,string:"
msgid "Role - Group"
msgstr ""
msgctxt "model:res.user.role,string:"
msgid "User Role"
msgstr ""
msgctxt "selection:ir.cron,method:"
msgid "Synchronize Users Roles"
msgstr ""
msgctxt "view:res.role:"
msgid "Access Permissions"
msgstr ""
msgctxt "view:res.role:"
msgid "Members"
msgstr ""
msgctxt "view:res.user.role:"
msgid "Time"
msgstr ""

View File

@@ -0,0 +1,79 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:res.role,groups:"
msgid "Groups"
msgstr ""
msgctxt "field:res.role,name:"
msgid "Name"
msgstr ""
msgctxt "field:res.role,users:"
msgid "Users"
msgstr ""
msgctxt "field:res.role-res.group,group:"
msgid "Group"
msgstr ""
msgctxt "field:res.role-res.group,role:"
msgid "Role"
msgstr ""
msgctxt "field:res.user,roles:"
msgid "Roles"
msgstr ""
msgctxt "field:res.user.role,from_date:"
msgid "From Date"
msgstr ""
msgctxt "field:res.user.role,role:"
msgid "Role"
msgstr ""
msgctxt "field:res.user.role,to_date:"
msgid "To Date"
msgstr ""
msgctxt "field:res.user.role,user:"
msgid "User"
msgstr ""
msgctxt "model:ir.action,name:act_role_form"
msgid "Roles"
msgstr ""
msgctxt "model:ir.ui.menu,name:menu_role_form"
msgid "Roles"
msgstr ""
msgctxt "model:res.role,string:"
msgid "Role"
msgstr ""
msgctxt "model:res.role-res.group,string:"
msgid "Role - Group"
msgstr ""
msgctxt "model:res.user.role,string:"
msgid "User Role"
msgstr ""
msgctxt "selection:ir.cron,method:"
msgid "Synchronize Users Roles"
msgstr ""
msgctxt "view:res.role:"
msgid "Access Permissions"
msgstr ""
msgctxt "view:res.role:"
msgid "Members"
msgstr ""
msgctxt "view:res.user.role:"
msgid "Time"
msgstr ""

View File

@@ -0,0 +1,83 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "field:res.role,groups:"
msgid "Groups"
msgstr "组"
msgctxt "field:res.role,name:"
msgid "Name"
msgstr "名称"
#, fuzzy
msgctxt "field:res.role,users:"
msgid "Users"
msgstr "用户"
msgctxt "field:res.role-res.group,group:"
msgid "Group"
msgstr "组"
msgctxt "field:res.role-res.group,role:"
msgid "Role"
msgstr "角色"
msgctxt "field:res.user,roles:"
msgid "Roles"
msgstr "角色"
msgctxt "field:res.user.role,from_date:"
msgid "From Date"
msgstr "从日期"
msgctxt "field:res.user.role,role:"
msgid "Role"
msgstr "角色"
msgctxt "field:res.user.role,to_date:"
msgid "To Date"
msgstr "到日期"
msgctxt "field:res.user.role,user:"
msgid "User"
msgstr "用户"
msgctxt "model:ir.action,name:act_role_form"
msgid "Roles"
msgstr "角色"
msgctxt "model:ir.ui.menu,name:menu_role_form"
msgid "Roles"
msgstr "角色"
#, fuzzy
msgctxt "model:res.role,string:"
msgid "Role"
msgstr "角色"
#, fuzzy
msgctxt "model:res.role-res.group,string:"
msgid "Role - Group"
msgstr "角色-组"
#, fuzzy
msgctxt "model:res.user.role,string:"
msgid "User Role"
msgstr "用户角色"
msgctxt "selection:ir.cron,method:"
msgid "Synchronize Users Roles"
msgstr "同步用户角色"
msgctxt "view:res.role:"
msgid "Access Permissions"
msgstr ""
msgctxt "view:res.role:"
msgid "Members"
msgstr ""
msgctxt "view:res.user.role:"
msgid "Time"
msgstr ""

123
modules/user_role/res.py Normal file
View File

@@ -0,0 +1,123 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
import datetime as dt
from trytond.model import ModelSQL, ModelView, fields
from trytond.pool import Pool, PoolMeta
from trytond.pyson import Bool, Eval, If
class Role(ModelSQL, ModelView):
__name__ = 'res.role'
name = fields.Char("Name", required=True, translate=True)
groups = fields.Many2Many('res.role-res.group', 'role', 'group', "Groups")
users = fields.One2Many('res.user.role', 'role', "Users")
@classmethod
def on_modification(cls, mode, roles, field_names=None):
pool = Pool()
User = pool.get('res.user')
super().on_modification(mode, roles, field_names=field_names)
if mode == 'write':
users = {u.user for r in roles for u in r.users}
User.sync_roles(User.browse(users))
@classmethod
def on_delete(cls, roles):
pool = Pool()
User = pool.get('res.user')
callback = super().on_delete(roles)
if users := {u.user for r in roles for u in r.users}:
callback.append(lambda: User.sync_roles(
User.browse(users), clear=True))
return callback
@classmethod
def copy(cls, roles, default=None):
default = default.copy() if default is not None else {}
default.setdefault('users')
return super().copy(roles, default=default)
class RoleGroup(ModelSQL):
__name__ = 'res.role-res.group'
role = fields.Many2One(
'res.role', "Role", ondelete='CASCADE', required=True)
group = fields.Many2One(
'res.group', "Group", ondelete='CASCADE', required=True)
class User(metaclass=PoolMeta):
__name__ = 'res.user'
roles = fields.One2Many('res.user.role', 'user', "Roles")
@classmethod
def __setup__(cls):
super().__setup__()
group_readonly = Bool(Eval('roles', []))
if 'readonly' in cls.groups.states:
group_readonly |= cls.groups.states['readonly']
cls.groups.states['readonly'] = group_readonly
cls._context_fields.append('roles')
@classmethod
def on_modification(cls, mode, users, field_names=None):
super().on_modification(mode, users, field_names=field_names)
if mode in {'create', 'write'}:
cls.sync_roles(users)
@classmethod
def sync_roles(cls, users=None, date=None, clear=False):
if date is None:
date = dt.datetime.now()
if users is None:
users = cls.search([])
to_write = []
for user in users:
if not user.roles and not clear:
continue
new = {g.id for r in user.roles for g in r.role.groups
if r.valid(date)}
old = {g.id for g in user.groups}
if new != old:
to_write.append([user])
to_write.append({'groups': [
('add', new - old),
('remove', old - new),
]})
if to_write:
cls.write(*to_write)
class UserRole(ModelSQL, ModelView):
__name__ = 'res.user.role'
user = fields.Many2One(
'res.user', "User", ondelete='CASCADE', required=True)
role = fields.Many2One(
'res.role', "Role", ondelete='CASCADE', required=True)
from_date = fields.DateTime(
"From Date",
domain=[
If(Eval('from_date') & Eval('to_date'),
('from_date', '<=', Eval('to_date', None)),
()),
])
to_date = fields.DateTime(
"To Date",
domain=[
If(Eval('from_date') & Eval('to_date'),
('to_date', '>=', Eval('from_date', None)),
()),
])
@classmethod
def __setup__(cls):
super().__setup__()
cls._order.insert(0, ('from_date', 'DESC NULLS FIRST'))
cls._order.insert(1, ('to_date', 'ASC NULLS FIRST'))
def valid(self, date):
from_date = self.from_date or dt.datetime.min
to_date = self.to_date or dt.datetime.max
return from_date <= date <= to_date

95
modules/user_role/res.xml Normal file
View File

@@ -0,0 +1,95 @@
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<tryton>
<data>
<record model="ir.ui.view" id="role_view_form">
<field name="model">res.role</field>
<field name="type">form</field>
<field name="name">role_form</field>
</record>
<record model="ir.ui.view" id="role_view_list">
<field name="model">res.role</field>
<field name="type">tree</field>
<field name="name">role_list</field>
</record>
<record model="ir.action.act_window" id="act_role_form">
<field name="name">Roles</field>
<field name="res_model">res.role</field>
</record>
<record model="ir.action.act_window.view" id="act_role_form_view1">
<field name="sequence" eval="10"/>
<field name="view" ref="role_view_list"/>
<field name="act_window" ref="act_role_form"/>
</record>
<record model="ir.action.act_window.view" id="act_role_form_view2">
<field name="sequence" eval="20"/>
<field name="view" ref="role_view_form"/>
<field name="act_window" ref="act_role_form"/>
</record>
<menuitem
parent="res.menu_res"
action="act_role_form"
sequence="50"
id="menu_role_form"/>
<record model="ir.model.access" id="access_role">
<field name="model">res.role</field>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="False"/>
<field name="perm_create" eval="False"/>
<field name="perm_delete" eval="False"/>
</record>
<record model="ir.model.access" id="access_role_admin">
<field name="model">res.role</field>
<field name="group" ref="res.group_admin"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="True"/>
<field name="perm_create" eval="True"/>
<field name="perm_delete" eval="True"/>
</record>
<record model="ir.ui.view" id="user_view_form">
<field name="model">res.user</field>
<field name="inherit" ref="res.user_view_form"/>
<field name="name">user_form</field>
</record>
<record model="ir.ui.view" id="user_role_form">
<field name="model">res.user.role</field>
<field name="type">form</field>
<field name="name">user_role_form</field>
</record>
<record model="ir.ui.view" id="user_role_list">
<field name="model">res.user.role</field>
<field name="type">tree</field>
<field name="name">user_role_list</field>
</record>
<record model="ir.model.access" id="access_user_role">
<field name="model">res.user.role</field>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="False"/>
<field name="perm_create" eval="False"/>
<field name="perm_delete" eval="False"/>
</record>
<record model="ir.model.access" id="access_user_role_admin">
<field name="model">res.user.role</field>
<field name="group" ref="res.group_admin"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="True"/>
<field name="perm_create" eval="True"/>
<field name="perm_delete" eval="True"/>
</record>
</data>
<data noupdate="1">
<record model="ir.cron" id="cron_sync_roles">
<field name="method">res.user|sync_roles</field>
<field name="interval_number" eval="1"/>
<field name="interval_type">days</field>
</record>
</data>
</tryton>

View File

@@ -0,0 +1,2 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.

View File

@@ -0,0 +1,96 @@
==================
User Role Scenario
==================
Imports::
>>> import datetime as dt
>>> from proteus import Model
>>> from trytond.tests.tools import activate_modules, assertEqual
Activate modules::
>>> config = activate_modules('user_role')
Create some groups::
>>> Group = Model.get('res.group')
>>> groups = [Group(name="Group %s" % i) for i in range(5)]
>>> Group.save(groups)
Create a role::
>>> Role = Model.get('res.role')
>>> role = Role(name="Role")
>>> role.groups.append(Group(groups[0].id))
>>> role.groups.append(Group(groups[1].id))
>>> role.save()
Create a user with some groups::
>>> User = Model.get('res.user')
>>> user = User(login="user")
>>> user.groups.append(Group(groups[1].id))
>>> user.groups.append(Group(groups[2].id))
>>> user.groups.append(Group(groups[3].id))
>>> user.save()
>>> len(user.groups)
3
Set the role to the user::
>>> user_role = user.roles.new()
>>> user_role.role = role
>>> user.save()
>>> len(user.groups)
2
>>> assertEqual(user.groups, [groups[0], groups[1]])
Start the role in the future::
>>> user_role, = user.roles
>>> user_role.from_date = dt.datetime.now() + dt.timedelta(days=1)
>>> user_role.to_date = None
>>> user.save()
>>> len(user.groups)
0
End the role in the past::
>>> user_role, = user.roles
>>> user_role.from_date = None
>>> user_role.to_date = dt.datetime.now() - dt.timedelta(days=1)
>>> user.save()
>>> len(user.groups)
0
Start the role in the past and end in the future::
>>> user_role, = user.roles
>>> user_role.from_date = dt.datetime.now() - dt.timedelta(days=1)
>>> user_role.to_date = dt.datetime.now() + dt.timedelta(days=1)
>>> user.save()
>>> len(user.groups)
2
Changing groups to role::
>>> role.groups.append(Group(groups[4].id))
>>> role.save()
>>> user.reload()
>>> len(user.groups)
3
Deleting role::
>>> role.delete()
>>> user.reload()
>>> len(user.groups)
0

View File

@@ -0,0 +1,12 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
from trytond.tests.test_tryton import ModuleTestCase
class UserRoleTestCase(ModuleTestCase):
'Test User Role module'
module = 'user_role'
del ModuleTestCase

View File

@@ -0,0 +1,8 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
from trytond.tests.test_tryton import load_doc_tests
def load_tests(*args, **kwargs):
return load_doc_tests(__name__, __file__, *args, **kwargs)

View File

@@ -0,0 +1,15 @@
[tryton]
version=7.8.0
depends:
ir
res
xml:
res.xml
[register]
model:
ir.Cron
res.Role
res.RoleGroup
res.User
res.UserRole

View File

@@ -0,0 +1,16 @@
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<form>
<label name="name"/>
<field name="name"/>
<notebook colspan="4">
<page string="Members" col="2" id="members">
<field name="users" colspan="2"/>
</page>
<page string="Access Permissions" col="1" id="permissions">
<field name="groups"/>
</page>
</notebook>
</form>

View File

@@ -0,0 +1,6 @@
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<tree>
<field name="name" expand="1"/>
</tree>

View File

@@ -0,0 +1,8 @@
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<data>
<xpath expr="//field[@name='groups']" position="before">
<field name="roles"/>
</xpath>
</data>

View File

@@ -0,0 +1,13 @@
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<form>
<label name="user"/>
<field name="user" colspan="3"/>
<label name="role"/>
<field name="role" colspan="3"/>
<label name="from_date"/>
<field name="from_date"/>
<label name="to_date"/>
<field name="to_date"/>
</form>

View File

@@ -0,0 +1,11 @@
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<tree>
<field name="user" expand="1"/>
<field name="role" expand="1"/>
<field name="from_date" widget="date"/>
<field name="from_date" widget="time" string="Time"/>
<field name="to_date" widget="date"/>
<field name="to_date" widget="time" string="Time"/>
</tree>