3
.. i18n: single: access rights
4
.. i18n: single: access; user
18
.. i18n: .. tip:: Managing Passwords
20
.. i18n: If you let users change their passwords for themselves you'll have no direct control over the
21
.. i18n: password they choose.
22
.. i18n: You should have a written policy about password strength to try to maintain a level of security in
26
.. tip:: Managing Passwords
28
If you let users change their passwords for themselves you'll have no direct control over the
30
You should have a written policy about password strength to try to maintain a level of security in
34
.. i18n: single: module; users_ldap
38
single: module; users_ldap
40
.. i18n: .. tip:: Managing users through LDAP
42
.. i18n: With the :mod:`users_ldap` module, user accounts can be managed through an LDAP directory that can be
43
.. i18n: made common to various different company resources.
45
.. i18n: Connection parameters for the LDAP directory are then registered with the company definition.
46
.. i18n: You can provide a user profile template there from which new users are automatically created during
47
.. i18n: their first connection to Open ERP.
50
.. tip:: Managing users through LDAP
52
With the :mod:`users_ldap` module, user accounts can be managed through an LDAP directory that can be
53
made common to various different company resources.
55
Connection parameters for the LDAP directory are then registered with the company definition.
56
You can provide a user profile template there from which new users are automatically created during
57
their first connection to Open ERP.
66
.. i18n: .. note:: LDAP
68
.. i18n: The LDAP protocol (Lightweight Directory Access Protocol) enables you to manage common directories
69
.. i18n: for various different resources through your standard TCP/IP network.
71
.. i18n: This enables users in the company to have the same username and password to access all
72
.. i18n: their applications (such as email and intranet).
77
The LDAP protocol (Lightweight Directory Access Protocol) enables you to manage common directories
78
for various different resources through your standard TCP/IP network.
80
This enables users in the company to have the same username and password to access all
81
their applications (such as email and intranet).
83
.. i18n: Managing access rights
84
.. i18n: ======================
87
Managing access rights
88
======================
90
.. i18n: One of the most important areas in configuring Open ERP is how to manage access rights to the
91
.. i18n: information in it.
94
One of the most important areas in configuring Open ERP is how to manage access rights to the
97
.. i18n: You're planning to put everything significant to your business into the system, but most of your
98
.. i18n: staff need see only part of it, and may need to change even less of it. Who should have rights to
99
.. i18n: what, and how do you manage that?
102
You're planning to put everything significant to your business into the system, but most of your
103
staff need see only part of it, and may need to change even less of it. Who should have rights to
104
what, and how do you manage that?
106
.. i18n: OpenERP's approach to rights management is highly flexible. Each user can belong to one or more
107
.. i18n: groups, and the group(s) you belong to determine(s):
110
OpenERP's approach to rights management is highly flexible. Each user can belong to one or more
111
groups, and the group(s) you belong to determine(s):
113
.. i18n: * the visibility of each menu item and
115
.. i18n: * the accessibility of each table in the database.
118
* the visibility of each menu item and
120
* the accessibility of each table in the database.
122
.. i18n: For example, the group \ ``Stock``\ may only be given access to some of the menus in
123
.. i18n: :menuselection:`Stock Management`, and may have no access to any of the accounting information. Each system user who works in
124
.. i18n: Stores is given membership of the ``Stock`` group. If some users also work elsewhere, they'd also be
125
.. i18n: given membership of other groups.
128
For example, the group \ ``Stock``\ may only be given access to some of the menus in
129
:menuselection:`Stock Management`, and may have no access to any of the accounting information. Each system user who works in
130
Stores is given membership of the ``Stock`` group. If some users also work elsewhere, they'd also be
131
given membership of other groups.
133
.. i18n: Open ERP users can also belong to various roles. Just as group gives a user access rights, each
134
.. i18n: role determines the user's duties. This is managed at the level of workflows, which form the
135
.. i18n: company's business processes.
138
Open ERP users can also belong to various roles. Just as group gives a user access rights, each
139
role determines the user's duties. This is managed at the level of workflows, which form the
140
company's business processes.
143
.. i18n: pair: user; group
149
.. i18n: Groups and Users
150
.. i18n: ================
156
.. i18n: To configure access rights you'd start by defining the groups. It's important for the groups to
157
.. i18n: be representative of your company's job functions rather than of its individual employees.
160
To configure access rights you'd start by defining the groups. It's important for the groups to
161
be representative of your company's job functions rather than of its individual employees.
163
.. i18n: So if your finance director is also your sales director, you should create both a Finance Director
164
.. i18n: group and a Sales Director group, even though they're both the same person, and would both be
165
.. i18n: assigned to this user in practice. This gives you flexibility for the future.
168
So if your finance director is also your sales director, you should create both a Finance Director
169
group and a Sales Director group, even though they're both the same person, and would both be
170
assigned to this user in practice. This gives you flexibility for the future.
172
.. i18n: You should also create groups within a departmental areas that have different levels of access
173
.. i18n: rights. For example, if you create a \ ``Sales Director``\ group and a \ ``Sales``\ group avoid
174
.. i18n: assigning exactly the same rights to each group. The first could see all the of reports, while the
175
.. i18n: second could be restricted to seeing quotations. You could either make the \ ``Sales Director``\ a
176
.. i18n: member of both groups, and give the Sales Director group a limited set of extra rights, or give the
177
.. i18n: \ ``Sales Director``\ group all the rights it needs for a Sales Director to belong only to this one
178
.. i18n: group. You should choose the scheme that gives you most flexibility and then stick with it to
179
.. i18n: maintain consistency.
182
You should also create groups within a departmental areas that have different levels of access
183
rights. For example, if you create a \ ``Sales Director``\ group and a \ ``Sales``\ group avoid
184
assigning exactly the same rights to each group. The first could see all the of reports, while the
185
second could be restricted to seeing quotations. You could either make the \ ``Sales Director``\ a
186
member of both groups, and give the Sales Director group a limited set of extra rights, or give the
187
\ ``Sales Director``\ group all the rights it needs for a Sales Director to belong only to this one
188
group. You should choose the scheme that gives you most flexibility and then stick with it to
189
maintain consistency.
192
.. i18n: pair: system; administrator
196
pair: system; administrator
198
.. i18n: .. tip:: Flexibility in managing access
200
.. i18n: To give yourself flexibility, you can ensure that a trusted staff member
201
.. i18n: (perhaps a director or someone in accounts, or even the system administrator) is given wide rights
202
.. i18n: to use the system,
203
.. i18n: and is authorized by the management to carry out specific tasks for people.
206
.. tip:: Flexibility in managing access
208
To give yourself flexibility, you can ensure that a trusted staff member
209
(perhaps a director or someone in accounts, or even the system administrator) is given wide rights
211
and is authorized by the management to carry out specific tasks for people.
214
.. i18n: single: access; menu
220
.. i18n: Access rights for menus
221
.. i18n: -----------------------
224
Access rights for menus
225
-----------------------
227
.. i18n: To get a feel for rights management in OpenERP you'll create a new \ ``Stock1``\ group, with
228
.. i18n: access to the *Stock Management* menu items. You'll then create a stores person user who's a member
229
.. i18n: of the \ ``Stock1``\ group.
232
To get a feel for rights management in OpenERP you'll create a new \ ``Stock1``\ group, with
233
access to the *Stock Management* menu items. You'll then create a stores person user who's a member
234
of the \ ``Stock1``\ group.
236
.. i18n: To create a new group, use the menu :menuselection:`Administration --> Users --> Groups`. Enter the
237
.. i18n: group name Stock1.
240
To create a new group, use the menu :menuselection:`Administration --> Users --> Groups`. Enter the
243
.. i18n: Then to create a new user linked to this, use :menuselection:`Administration --> Users --> Users` to
244
.. i18n: enter the following:
247
Then to create a new user linked to this, use :menuselection:`Administration --> Users --> Users` to
250
.. i18n: * :guilabel:`Name` : \ ``Stores Person``\ ,
252
.. i18n: * :guilabel:`Username` : \ ``stores``\ ,
254
.. i18n: * :guilabel:`Password` : \ ``stores``\ ,
256
.. i18n: * :guilabel:`Company` : \ ``<your company>``\ ,
258
.. i18n: * :guilabel:`Action` : \ ``Menu``\ ,
260
.. i18n: * :guilabel:`Menu Action` : \ ``Menu``\ .
263
* :guilabel:`Name` : \ ``Stores Person``\ ,
265
* :guilabel:`Username` : \ ``stores``\ ,
267
* :guilabel:`Password` : \ ``stores``\ ,
269
* :guilabel:`Company` : \ ``<your company>``\ ,
271
* :guilabel:`Action` : \ ``Menu``\ ,
273
* :guilabel:`Menu Action` : \ ``Menu``\ .
275
.. i18n: In the second tab of the user form, :guilabel:`Security` , add the \ ``Stock1``\ group that you
276
.. i18n: just created.
279
In the second tab of the user form, :guilabel:`Security` , add the \ ``Stock1``\ group that you
282
.. i18n: .. figure:: images/menu_access.png
284
.. i18n: :align: center
286
.. i18n: *Groups that have access to the Stock Management menu*
289
.. figure:: images/menu_access.png
293
*Groups that have access to the Stock Management menu*
295
.. i18n: Save the user, then go into the menu :menuselection:`Administration --> Security --> Grant Access
296
.. i18n: to Menus` to get a list of menus. Filter this list using the search field :guilabel:`Menu` to
297
.. i18n: get the :menuselection:`Stock Management` menu item. In the form describing the menu, add \ ``Stock1``\
298
.. i18n: into the :guilabel:`Groups` field. While you're at it, also add the \ ``admin``\ group there. From
299
.. i18n: now on, only members of the \ ``Stock1``\ group and the \ ``admin``\ group will be able to see
300
.. i18n: this menu item in their main menu list.
303
Save the user, then go into the menu :menuselection:`Administration --> Security --> Grant Access
304
to Menus` to get a list of menus. Filter this list using the search field :guilabel:`Menu` to
305
get the :menuselection:`Stock Management` menu item. In the form describing the menu, add \ ``Stock1``\
306
into the :guilabel:`Groups` field. While you're at it, also add the \ ``admin``\ group there. From
307
now on, only members of the \ ``Stock1``\ group and the \ ``admin``\ group will be able to see
308
this menu item in their main menu list.
310
.. i18n: .. tip:: Menu hierarchy
312
.. i18n: Since menus are hierarchical there is no need to hide access to lower menus:
313
.. i18n: once you've configured :menuselection:`Stock Management` this way, all lower-level menus become invisible to
314
.. i18n: members of other groups.
317
.. tip:: Menu hierarchy
319
Since menus are hierarchical there is no need to hide access to lower menus:
320
once you've configured :menuselection:`Stock Management` this way, all lower-level menus become invisible to
321
members of other groups.
323
.. i18n: .. tip:: Security
325
.. i18n: This method of managing access to menus doesn't guarantee that users are prevented from reaching
326
.. i18n: hidden business objects in the system in other ways.
327
.. i18n: For example, hiding the Invoices menu won't prevent people reaching invoices through purchase and
328
.. i18n: sales orders, or by guessing the URL.
330
.. i18n: For effective security management you must use the methods for managing access rights to objects
331
.. i18n: presented in the following section.
336
This method of managing access to menus doesn't guarantee that users are prevented from reaching
337
hidden business objects in the system in other ways.
338
For example, hiding the Invoices menu won't prevent people reaching invoices through purchase and
339
sales orders, or by guessing the URL.
341
For effective security management you must use the methods for managing access rights to objects
342
presented in the following section.
344
.. i18n: .. note:: Initial access configuration
346
.. i18n: In the initial configuration, Open ERP's admin user, a member of the admin group, is given access
347
.. i18n: to the Configuration menu
348
.. i18n: in each section of the main menu. This is a general convention.
349
.. i18n: For example, :menuselection:`Partners --> Configuration` is visible in the administrator's menu
350
.. i18n: amongst the other Partner menu items,
351
.. i18n: but only those other menu entries are visible to other users.
352
.. i18n: Similarly, the main menu entry :menuselection:`Administration` is, by convention, visible only to
353
.. i18n: users who are members of the admin group.
356
.. note:: Initial access configuration
358
In the initial configuration, Open ERP's admin user, a member of the admin group, is given access
359
to the Configuration menu
360
in each section of the main menu. This is a general convention.
361
For example, :menuselection:`Partners --> Configuration` is visible in the administrator's menu
362
amongst the other Partner menu items,
363
but only those other menu entries are visible to other users.
364
Similarly, the main menu entry :menuselection:`Administration` is, by convention, visible only to
365
users who are members of the admin group.
368
.. i18n: single: access; objects
372
single: access; objects
374
.. i18n: Access Rights to Objects
375
.. i18n: ------------------------
378
Access Rights to Objects
379
------------------------
381
.. i18n: The menu access rights determine who can access which menu, but doesn't define what you can do once
382
.. i18n: you're in the menu.
385
The menu access rights determine who can access which menu, but doesn't define what you can do once
388
.. i18n: Access controls on the objects give you the possibility of defining what your users have the right
389
.. i18n: to do with your data when they get access to it. Access control of objects is structured the same
390
.. i18n: way as access to menus.
393
Access controls on the objects give you the possibility of defining what your users have the right
394
to do with your data when they get access to it. Access control of objects is structured the same
395
way as access to menus.
397
.. i18n: .. note:: Object
399
.. i18n: An object represents a document in the system.
400
.. i18n: Objects are linked to database tables and also have additional concepts,
401
.. i18n: such as the functions of fields, inheritance from other objects, and class methods that give them
407
An object represents a document in the system.
408
Objects are linked to database tables and also have additional concepts,
409
such as the functions of fields, inheritance from other objects, and class methods that give them
412
.. i18n: If no group is assigned to an object, all users can access it without any restriction of any sort.
413
.. i18n: Conversely, when an access control is defined for an object, a user must be a member of a group
414
.. i18n: owning appropriate access rights to have any sort of access to that object.
417
If no group is assigned to an object, all users can access it without any restriction of any sort.
418
Conversely, when an access control is defined for an object, a user must be a member of a group
419
owning appropriate access rights to have any sort of access to that object.
421
.. i18n: You must always ensure that you don't lock the \ ``admin``\ group out of any objects that control
422
.. i18n: administration and configuration options, such as the \ ``ir.model.access``\ model.
425
You must always ensure that you don't lock the \ ``admin``\ group out of any objects that control
426
administration and configuration options, such as the \ ``ir.model.access``\ model.
428
.. i18n: You can manage four access modes on objects independently:
431
You can manage four access modes on objects independently:
433
.. i18n: * :guilabel:`Read access` : members of the group can read the data in the object,
435
.. i18n: * :guilabel:`Create access` : members of the group can create a new record in the object,
437
.. i18n: * :guilabel:`Write access` : members of the group can modify the contents of records in the object,
439
.. i18n: * :guilabel:`Delete access` : members of the group can delete records from the object.
442
* :guilabel:`Read access` : members of the group can read the data in the object,
444
* :guilabel:`Create access` : members of the group can create a new record in the object,
446
* :guilabel:`Write access` : members of the group can modify the contents of records in the object,
448
* :guilabel:`Delete access` : members of the group can delete records from the object.
450
.. i18n: .. figure:: images/access_control.png
452
.. i18n: :align: center
454
.. i18n: *Access control to invoices for the Finance/Admin group*
457
.. figure:: images/access_control.png
461
*Access control to invoices for the Finance/Admin group*
463
.. i18n: To configure access rights on a Open ERP objects, use the menu :menuselection:`Administration -->
464
.. i18n: Security --> Access Controls --> Access Controls List` and click :guilabel:`New` or choose one there
465
.. i18n: and click :guilabel:`Edit`.
466
.. i18n: You give a :guilabel:`Name` to the access control, select a :guilabel:`Group`, and
467
.. i18n: the object (:guilabel:`Model`), then check the checkbox corresponding to each of the four :guilabel:`Access` modes.
470
To configure access rights on a Open ERP objects, use the menu :menuselection:`Administration -->
471
Security --> Access Controls --> Access Controls List` and click :guilabel:`New` or choose one there
472
and click :guilabel:`Edit`.
473
You give a :guilabel:`Name` to the access control, select a :guilabel:`Group`, and
474
the object (:guilabel:`Model`), then check the checkbox corresponding to each of the four :guilabel:`Access` modes.
476
.. i18n: If you don't specify any group in the access rules, the rule is applied to all groups. So to remove
477
.. i18n: access to an object for all users you could create a rule:
480
If you don't specify any group in the access rules, the rule is applied to all groups. So to remove
481
access to an object for all users you could create a rule:
483
.. i18n: * which is defined for a specific object,
485
.. i18n: * which is linked to no group,
487
.. i18n: * for which none of the four access options is checked.
490
* which is defined for a specific object,
492
* which is linked to no group,
494
* for which none of the four access options is checked.
496
.. i18n: You can then create additional rules on the same object to give specific rights to certain groups.
499
You can then create additional rules on the same object to give specific rights to certain groups.
502
.. i18n: single: record
508
.. i18n: Record Rules For Objects
509
.. i18n: ------------------------
512
Record Rules For Objects
513
------------------------
515
.. i18n: Record rules determine who can access the objects depending on the rules set for the particular object. A record rule has some tests to be performed on objects.
518
Record rules determine who can access the objects depending on the rules set for the particular object. A record rule has some tests to be performed on objects.
520
.. i18n: You can manage four access modes on objects independently depending on the test:
523
You can manage four access modes on objects independently depending on the test:
525
.. i18n: * :guilabel:`Read access` : can read the data in the object,
527
.. i18n: * :guilabel:`Create access` : can create a new record in the object,
529
.. i18n: * :guilabel:`Write access` : can modify the contents of records in the object,
531
.. i18n: * :guilabel:`Delete access` : can delete records from the object.
534
* :guilabel:`Read access` : can read the data in the object,
536
* :guilabel:`Create access` : can create a new record in the object,
538
* :guilabel:`Write access` : can modify the contents of records in the object,
540
* :guilabel:`Delete access` : can delete records from the object.
542
.. i18n: To configure rule on object, use the menu :menuselection:`Administration -->
543
.. i18n: Security --> Record Rules`. The fields in the ``ir.rule`` object describe:
546
To configure rule on object, use the menu :menuselection:`Administration -->
547
Security --> Record Rules`. The fields in the ``ir.rule`` object describe:
549
.. i18n: * :guilabel:`Object` : Object on which to have the rule
551
.. i18n: * :guilabel:`Name` : Name of the rule
553
.. i18n: * :guilabel:`Global` : If global is checked then that rule would be applied for all the groups and if it is unchecked then that rule would be applied only for the groups selected for it
555
.. i18n: * :guilabel:`Test` : A list of all the tests for the object
557
.. i18n: * If there are mulitple tests on same object then all of them are joined using ``AND`` operator and depending on the result the rule would be satisfied
559
.. i18n: * If there are multiple rules on same object then all of them are joined using ``OR`` operator
561
.. i18n: * :guilabel:`Access Modes` : Read, Write, Create, Delete as described earlier
563
.. i18n: * If only one access mode is checked, then only that mode would be applied
565
.. i18n: * If all of them are checked then all the access modes would be applied
568
* :guilabel:`Object` : Object on which to have the rule
570
* :guilabel:`Name` : Name of the rule
572
* :guilabel:`Global` : If global is checked then that rule would be applied for all the groups and if it is unchecked then that rule would be applied only for the groups selected for it
574
* :guilabel:`Test` : A list of all the tests for the object
576
* If there are mulitple tests on same object then all of them are joined using ``AND`` operator and depending on the result the rule would be satisfied
578
* If there are multiple rules on same object then all of them are joined using ``OR`` operator
580
* :guilabel:`Access Modes` : Read, Write, Create, Delete as described earlier
582
* If only one access mode is checked, then only that mode would be applied
584
* If all of them are checked then all the access modes would be applied
586
.. i18n: But at least one access mode has to be checked, all of them can not be unchecked. If all of them are unchecked it would raise exception.
589
But at least one access mode has to be checked, all of them can not be unchecked. If all of them are unchecked it would raise exception.
591
.. i18n: .. .. figure:: images/security_rule.png
592
.. i18n: .. :scale: 75
593
.. i18n: .. :align: center
596
.. .. figure:: images/security_rule.png
600
.. i18n: *For eg :* If we have a rule defined on ``res.partner`` object which tests if the user is the dedicated salesman of the partner ``[('user_id', '=', User)]``. We check only the create and write access mode and keep other access modes unchecked.
603
*For eg :* If we have a rule defined on ``res.partner`` object which tests if the user is the dedicated salesman of the partner ``[('user_id', '=', User)]``. We check only the create and write access mode and keep other access modes unchecked.
605
.. i18n: So this means that a user in the group for which the rule is applied can only create/write records where he himself serves as the dedicated salesman and can not create/write records where he is not the dedicated salesman. As other access modes are unchecked the user can read/delete the records of partners where he is not the dedicated salesman.
608
So this means that a user in the group for which the rule is applied can only create/write records where he himself serves as the dedicated salesman and can not create/write records where he is not the dedicated salesman. As other access modes are unchecked the user can read/delete the records of partners where he is not the dedicated salesman.
610
.. i18n: .. note:: Currently record rules are enforced for all operations (read, create, write, delete). But the above described feature is new for version 5.2.
613
.. note:: Currently record rules are enforced for all operations (read, create, write, delete). But the above described feature is new for version 5.2.
616
.. i18n: single: modification history
620
single: modification history
622
.. i18n: Modification history
623
.. i18n: --------------------
629
.. i18n: .. figure:: images/view_log.png
631
.. i18n: :align: center
633
.. i18n: *Partner Record history*
636
.. figure:: images/view_log.png
640
*Partner Record history*
642
.. i18n: Each record in a OpenERP database carries a note of its history. You can find out who it was
643
.. i18n: created by and when that occurred, and who last modified it and when that occurred. Click the
644
.. i18n: :guilabel:`View Log` icon at the top right of any form in the web client (but only when it's read-
645
.. i18n: only, not when it's editable) to display a dialog box showing this information, as shown in the
646
.. i18n: figure :ref:`fig-sflow`. It can help you identify who to contact if there are any problems with the
647
.. i18n: data in the records.
650
Each record in a OpenERP database carries a note of its history. You can find out who it was
651
created by and when that occurred, and who last modified it and when that occurred. Click the
652
:guilabel:`View Log` icon at the top right of any form in the web client (but only when it's read-
653
only, not when it's editable) to display a dialog box showing this information, as shown in the
654
figure :ref:`fig-sflow`. It can help you identify who to contact if there are any problems with the
658
.. i18n: single: module; audittrail
662
single: module; audittrail
664
.. i18n: .. tip:: Audit Trail
666
.. i18n: OpenERP has an Audit Trail module :mod:`audittrail` which can be used to track any or
667
.. i18n: all of the changes to one or more objects. It should be used with care, because it
668
.. i18n: can generate huge amounts of data in the live database, but can be an invaluable
674
OpenERP has an Audit Trail module :mod:`audittrail` which can be used to track any or
675
all of the changes to one or more objects. It should be used with care, because it
676
can generate huge amounts of data in the live database, but can be an invaluable
679
.. i18n: .. Copyright © Open Object Press. All rights reserved.
682
.. Copyright © Open Object Press. All rights reserved.
684
.. i18n: .. You may take electronic copy of this publication and distribute it if you don't
685
.. i18n: .. change the content. You can also print a copy to be read by yourself only.
688
.. You may take electronic copy of this publication and distribute it if you don't
689
.. change the content. You can also print a copy to be read by yourself only.
691
.. i18n: .. We have contracts with different publishers in different countries to sell and
692
.. i18n: .. distribute paper or electronic based versions of this book (translated or not)
693
.. i18n: .. in bookstores. This helps to distribute and promote the OpenERP product. It
694
.. i18n: .. also helps us to create incentives to pay contributors and authors using author
695
.. i18n: .. rights of these sales.
698
.. We have contracts with different publishers in different countries to sell and
699
.. distribute paper or electronic based versions of this book (translated or not)
700
.. in bookstores. This helps to distribute and promote the OpenERP product. It
701
.. also helps us to create incentives to pay contributors and authors using author
702
.. rights of these sales.
704
.. i18n: .. Due to this, grants to translate, modify or sell this book are strictly
705
.. i18n: .. forbidden, unless Tiny SPRL (representing Open Object Press) gives you a
706
.. i18n: .. written authorisation for this.
709
.. Due to this, grants to translate, modify or sell this book are strictly
710
.. forbidden, unless Tiny SPRL (representing Open Object Press) gives you a
711
.. written authorisation for this.
713
.. i18n: .. Many of the designations used by manufacturers and suppliers to distinguish their
714
.. i18n: .. products are claimed as trademarks. Where those designations appear in this book,
715
.. i18n: .. and Open Object Press was aware of a trademark claim, the designations have been
716
.. i18n: .. printed in initial capitals.
719
.. Many of the designations used by manufacturers and suppliers to distinguish their
720
.. products are claimed as trademarks. Where those designations appear in this book,
721
.. and Open Object Press was aware of a trademark claim, the designations have been
722
.. printed in initial capitals.
724
.. i18n: .. While every precaution has been taken in the preparation of this book, the publisher
725
.. i18n: .. and the authors assume no responsibility for errors or omissions, or for damages
726
.. i18n: .. resulting from the use of the information contained herein.
729
.. While every precaution has been taken in the preparation of this book, the publisher
730
.. and the authors assume no responsibility for errors or omissions, or for damages
731
.. resulting from the use of the information contained herein.
733
.. i18n: .. Published by Open Object Press, Grand Rosière, Belgium
736
.. Published by Open Object Press, Grand Rosière, Belgium