Commits

Anonymous committed a95acd8

Primera documentación

Comments (0)

Files changed (1)

 
 = Descripción =
 
-= Funcionalidad =
+== Modelos de dominio ==
+Activiti usa un modelo de seguridad con tres entidades (User, Role y el enlace entre las dos), para ello define dos interfaces que deben ser implementadas por los modelos de dominio [[http://activiti.org/javadocs/org/activiti/engine/identity/User.html|User]] y [[http://activiti.org/javadocs/org/activiti/engine/identity/Group.html|Group]], la tercera es la asociacion m:n entre ellas (UserRole).
+
+El siguiente modelo es una ligera adaptación del modelo de dominio base de Spring Security: 
+
+{{https://docs.google.com/drawings/pub?id=1hd15f_YZQGY__MTgHIvXE_LZQU7RiNfGYqmh_LWNn2g&w=490&h=594|Modelo}}
+
+No todos los atributos de las clases son necesarios (solmente los definidos por las interfaces de Activiti y en ShiroUser //passwordChangeRequiredOnNextLogon//). Éstas clases se pueden crear a partir del plugin de shiro para grails.
+
+El plugin usa convenciones para generar las consultas dinámicas de permisos, por tanto es neceserio que en **UserRole** los nombres de los atributos user y role conincidan con los nombres de las clases User y Role usadas, en este caso ShiroUser y ShiroRole.
+
+Activiti necesita realizar consultas basado en el nombre de usuario y el identificador de grupo por ello los atributos //id// de los modelos son de tipo String y deben ser mapeados de la siguiente manera:
+
+Para User
+{{{
+#!groovy
+
+static mapping = {
+		password column: '`password`'
+		id generator: 'uuid'
+	}
+}}}
+
+Para Group
+{{{
+#!groovy
+
+static mapping = {
+                id generator: 'assigned'
+	}
+}}}
+
+Para UserRole
+{{{
+#!groovy
+
+static mapping = {
+		id composite: ['shiroRole', 'shiroUser']
+		version false
+	}
+}}}
+
+Lo que implica que los identificadores de los roles deben ser asignados, éstos identificadores deben contener los nombres de los roles usados en las expresiones de selección de psoibles usuarios durante la definición de tareas del proceso, el siguiente fragmento es extraído del proceso VacationRequest:
+
+{{{
+#!xml
+
+<userTask id="initiateVacationRequest" activiti:formKey="/vacationRequest/create"
+			name="Initiate Vacation Request">
+			<documentation>Vacation request by ${username}</documentation>
+			<potentialOwner>
+				<resourceAssignmentExpression>
+					<formalExpression>user</formalExpression>
+				</resourceAssignmentExpression>
+			</potentialOwner>
+		</userTask>
+		<sequenceFlow id="flow1" targetRef="handleVacationRequest"
+			sourceRef="initiateVacationRequest" />
+		<userTask id="handleVacationRequest" activiti:formKey="/vacationRequest/approval"
+			name="Handle Vacation Request">
+			<documentation>Vacation request by ${username}</documentation>
+			<potentialOwner>
+				<resourceAssignmentExpression>
+					<formalExpression>management</formalExpression>
+				</resourceAssignmentExpression>
+			</potentialOwner>
+		</userTask>
+}}}
+
+debido a que el Activiti realiza la búsqueda de posibles usuarios basándose en las expresiones formales (//formalExpression//) del xml del proceso.
+
+== Inicialización ==
+
+El plugin implementa las interfaces [[http://www.activiti.org/javadocs/org/activiti/engine/impl/persistence/entity/GroupManager.html| GroupManager]] y [[http://www.activiti.org/javadocs/org/activiti/engine/impl/persistence/entity/UserManager.html|UserManager]] de Activiti y configura el [[http://www.activiti.org/javadocs/org/activiti/engine/IdentityService.html|IdentityService]] para usar las implementaciones, usa las propiedades de //**Config.groovy**// (Ver instalación) para generar las consultas dinámicas.
+
+Es necesario registrar en la sesión de usuario el nombre de usuario para que Activiti busque los grupos y usuarios posibles para las tareas para ello el plugin implementa el método //**attachUsername2Session()**// del servicio **ShiroActivitiSessionService**, este servicio debe ser inyectado en la aplicación cliente y llamada una vez se inicie sesión, es posible realizar esto con un listener de Shiro o en el controlador de grails que realiza la autenticación de usuario.
 
 = Instalación =
 
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.