<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.infinite-erp.co.id/index.php?action=history&amp;feed=atom&amp;title=Security_Model</id>
	<title>Security Model - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.infinite-erp.co.id/index.php?action=history&amp;feed=atom&amp;title=Security_Model"/>
	<link rel="alternate" type="text/html" href="https://wiki.infinite-erp.co.id/index.php?title=Security_Model&amp;action=history"/>
	<updated>2026-09-22T02:56:41Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.31.1</generator>
	<entry>
		<id>https://wiki.infinite-erp.co.id/index.php?title=Security_Model&amp;diff=4569&amp;oldid=prev</id>
		<title>Wikiadmin: Adopsi Security Model dari Etendo Documentation, rebrand Etendo→InfiniteERP</title>
		<link rel="alternate" type="text/html" href="https://wiki.infinite-erp.co.id/index.php?title=Security_Model&amp;diff=4569&amp;oldid=prev"/>
		<updated>2026-09-20T16:08:47Z</updated>

		<summary type="html">&lt;p&gt;Adopsi Security Model dari Etendo Documentation, rebrand Etendo→InfiniteERP&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Languages}}&lt;br /&gt;
{{BackTo|Main Page}}&lt;br /&gt;
&lt;br /&gt;
= Security Model =&lt;br /&gt;
&lt;br /&gt;
This page describes how different InfiniteERP security concepts influence development.&lt;br /&gt;
&lt;br /&gt;
InfiniteERP's security concept consists of three main parts:&lt;br /&gt;
&lt;br /&gt;
* '''Multi-Client/Multi-organization''': defines which client/organizations are visible to a user and referenceable from other client/organizations.&lt;br /&gt;
* '''Data access level''' (of a table): defines the client/organization which is allowed for data stored in a specific table. See the access level field of &amp;lt;code&amp;gt;AD_Table&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''Access definition''': InfiniteERP has several access definitions, allowing for fine-grained access control, see the tables in the &amp;lt;code&amp;gt;org.openbravo.model.ad.access&amp;lt;/code&amp;gt; package.&lt;br /&gt;
&lt;br /&gt;
This section discusses security and access definitions from the perspective of a developer. Where necessary references to functional documentation are used.&lt;br /&gt;
&lt;br /&gt;
The developer can work in two modes in InfiniteERP:&lt;br /&gt;
&lt;br /&gt;
1. '''Traditional''': using sqlc, etc.&lt;br /&gt;
2. '''Data Access Layer''': using the Data Access Layer.&lt;br /&gt;
&lt;br /&gt;
Both approaches are discussed separately.&lt;br /&gt;
&lt;br /&gt;
== Security concepts and InfiniteERP Servlets ==&lt;br /&gt;
&lt;br /&gt;
The tables in the &amp;lt;code&amp;gt;org.openbravo.model.ad.access&amp;lt;/code&amp;gt; package define access control for windows/tabs, processes, workflow, etc.&lt;br /&gt;
&lt;br /&gt;
The security checks using this table are implemented by the &amp;lt;code&amp;gt;HttpSecureAppServlet&amp;lt;/code&amp;gt; servlet. Any servlet extending this class will automatically inherit this security implementation.&lt;br /&gt;
&lt;br /&gt;
== Security concepts and XSQL and Manual Code ==&lt;br /&gt;
&lt;br /&gt;
InfiniteERP provides a standard way to extend SQL queries with filters for accessible clients and organizations. This is discussed in detail in this section of the developer's guide:&lt;br /&gt;
&lt;br /&gt;
* [[XML REST Web Services|XSQL Definition]]&lt;br /&gt;
* [[XML REST Web Services|XSQL Java Usage]]&lt;br /&gt;
&lt;br /&gt;
== Security concepts and the Data Access Layer ==&lt;br /&gt;
&lt;br /&gt;
For the developer the [[Data Access Layer]] provides several interfaces ([[Data Access Layer#OBCriteria|OBCriteria]] and [[Data Access Layer#OBQuery|OBQuery]]) that take automatic care of specific security aspects:&lt;br /&gt;
&lt;br /&gt;
* filter for readable &amp;lt;code&amp;gt;clients&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;organizations&amp;lt;/code&amp;gt;&lt;br /&gt;
* filter for readable tables (based on &amp;lt;code&amp;gt;AD_Window_Access&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
In addition, checks are done when retrieving a value of a property. The data access layer makes a distinction between the following two read-modes (on object level):&lt;br /&gt;
&lt;br /&gt;
* '''direct readable''': all properties of the object are readable; this readability is defined by the &amp;lt;code&amp;gt;AD_Window_Access&amp;lt;/code&amp;gt; table&lt;br /&gt;
* '''derived readable''': only the id and identifier properties are readable; derived readable entities are entities which are not directly readable but are referred to by directly readable entities&lt;br /&gt;
&lt;br /&gt;
The '''DAL''' also checks write access when changing properties of a business object. Write access is also checked when an object is saved to the database. The following checks are done:&lt;br /&gt;
&lt;br /&gt;
* the user has write access to the &amp;lt;code&amp;gt;client&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;organization&amp;lt;/code&amp;gt;&lt;br /&gt;
* the user has write access to the table of the object (defined in the &amp;lt;code&amp;gt;AD_Window_Access&amp;lt;/code&amp;gt; table)&lt;br /&gt;
* the &amp;lt;code&amp;gt;client&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;organization&amp;lt;/code&amp;gt; of the object fit to the access level of the table&lt;br /&gt;
* the object only refers to other objects which are in the natural tree of organizations of the object itself&lt;br /&gt;
&lt;br /&gt;
The data access layer also performs specific authorization checks when an object is deleted: the user must have access to the object and it must be deletable.&lt;br /&gt;
&lt;br /&gt;
== Application Administrators ==&lt;br /&gt;
&lt;br /&gt;
There is an administrator flag on the '''Role''' window that enables users to make configurations at different levels depending on their role.&lt;br /&gt;
&lt;br /&gt;
There are 4 different levels in InfiniteERP:&lt;br /&gt;
&lt;br /&gt;
'''System level'''&lt;br /&gt;
* There is no flag for '''System''' level.&lt;br /&gt;
* Users logged as '''System Administrator''' are able to configure settings at '''System''' level.&lt;br /&gt;
* These settings will be available to everyone.&lt;br /&gt;
&lt;br /&gt;
'''Client level'''&lt;br /&gt;
* There is a '''Client Administrator''' flag on the '''Role''' tab.&lt;br /&gt;
* Users are able to configure settings at Client level if the logged role has the flag enabled.&lt;br /&gt;
* These settings are available to all the users on the role's client.&lt;br /&gt;
&lt;br /&gt;
'''Organization level'''&lt;br /&gt;
* There is an '''Organization Administrator''' flag on the '''Org Access''' tab.&lt;br /&gt;
* Users are able to configure settings at Organization level on all the organizations of the logged role that have the flag enabled.&lt;br /&gt;
* These settings are available to all the users logged on that Organization.&lt;br /&gt;
&lt;br /&gt;
'''Role level'''&lt;br /&gt;
* There is a '''Role Administrator''' flag on the '''User Assignment''' tab.&lt;br /&gt;
* Users are able to configure settings at '''Role''' level on all the roles it is assigned to with the flag enabled.&lt;br /&gt;
* These settings are available to all the users logged with that role.&lt;br /&gt;
&lt;br /&gt;
=== Upgrading from previous versions ===&lt;br /&gt;
&lt;br /&gt;
When a role is created manually all the flags are set to false by default. There is a module script defined to set as true the flags based on the following rules:&lt;br /&gt;
&lt;br /&gt;
'''Client Administrator'''&lt;br /&gt;
* All roles with access to &amp;lt;code&amp;gt;(*)&amp;lt;/code&amp;gt; organization and to the '''Initial Organization Setup''' form.&lt;br /&gt;
&lt;br /&gt;
'''Organization Administrator'''&lt;br /&gt;
* All the assigned organizations of a role with access to the '''Initial Organization Setup''' form.&lt;br /&gt;
&lt;br /&gt;
'''Role Administrator'''&lt;br /&gt;
* All the roles assigned to a user if at least one of the roles has access to the '''Role''' window.&lt;br /&gt;
&lt;br /&gt;
Notice that this module script only populates the flags the first time these flags are added. On the following core updates, the flags won't be updated and the configuration has to be done manually.&lt;br /&gt;
&lt;br /&gt;
=== Roles created by the Initial Client and Organization setup ===&lt;br /&gt;
&lt;br /&gt;
The '''Initial Client and Organization Setup''' forms automatically create some users and roles. These ones have the flag initialized to true.&lt;br /&gt;
&lt;br /&gt;
'''Initial Client Setup'''&lt;br /&gt;
* The role created has the '''Client Administrator''' flag set to true.&lt;br /&gt;
* The user created has the new role assigned with the '''Role Administrator''' set to true.&lt;br /&gt;
&lt;br /&gt;
'''Initial Organization Setup'''&lt;br /&gt;
* The role and the organization created have the '''Organization Administrator''' flag set to true.&lt;br /&gt;
* The user created has the new role assigned with the '''Role Administrator''' set to true.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[Data Access Layer]]&lt;br /&gt;
* [[Application Dictionary]]&lt;br /&gt;
* [[Multi Client and Multi Org]]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
* [https://docs.etendo.software/developer-guide/etendo-classic/concepts/security-model/ Security Model — Etendo Documentation]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
''This page is a derivative of [http://wiki.openbravo.com/wiki/Security_Model Security Model] by [http://wiki.openbravo.com/wiki/Welcome_to_Openbravo Openbravo Wiki], used under [https://creativecommons.org/licenses/by-sa/2.5/es/ CC BY-SA 2.5 ES]. This work is licensed under [https://creativecommons.org/licenses/by-sa/2.5/ CC BY-SA 2.5].''&lt;br /&gt;
&lt;br /&gt;
[[Category:Developers Guide]]&lt;br /&gt;
[[Category:Documentation ERP]]&lt;/div&gt;</summary>
		<author><name>Wikiadmin</name></author>
		
	</entry>
</feed>