Browse Source

permisos

master
jazmin 6 months ago
parent
commit
536023bc6e
  1. 14
      InventarioJakartaJIN-war/src/java/mx/edu/tsj/chapala/sistemas/jin/seguridad/Login.java
  2. 5
      InventarioJakartaJIN-war/web/rol.xhtml
  3. 8
      InventarioJakartaJIN-war/web/template/templatePlantilla.xhtml
  4. 310
      InventarioJakartaJIN-war/web/usuarios.xhtml

14
InventarioJakartaJIN-war/src/java/mx/edu/tsj/chapala/sistemas/jin/seguridad/Login.java

@ -79,5 +79,19 @@ public class Login implements Serializable {
return false;
}
}
public boolean esAdmin() {
if (user != null && user.getRolidRol() != null) {
return "Admin".equals(user.getRolidRol().getNombreRol()); // Supongamos que el nombre del rol de administrador es "Admin"
} else {
return false;
}
}
public boolean esOperador() {
return !esAdmin();
}
}

5
InventarioJakartaJIN-war/web/rol.xhtml

@ -23,7 +23,8 @@
<p:toolbarGroup>
<p:commandButton value="Nuevo Rol " icon="pi pi-plus" actionListener="#{rolBean.prepararNuevoRol()}"
update=":dialogs:manage-product-content" oncomplete="PF('manageProductDialog').show()"
styleClass="ui-button-raised ui-button-flat" style="margin-right: 0.5rem">
styleClass="ui-button-raised ui-button-flat" style="margin-right: 0.5rem"
rendered="#{not login.esOperador()}">>
<p:resetInput target=":dialogs:manage-product-content" />
</p:commandButton>
</p:toolbarGroup>
@ -56,7 +57,7 @@
</p:column>
<p:column headerText="Acciones">
<p:column headerText="Acciones" rendered="#{not login.esOperador()}">
<p:commandButton icon="pi pi-pencil" update=":dialogs:manage-product-content"
oncomplete="PF('manageProductDialog').show()"
styleClass="rounded-button ui-button-info" process="@this"

8
InventarioJakartaJIN-war/web/template/templatePlantilla.xhtml

@ -117,7 +117,13 @@
<a class="navbar-brand" href="#">INVENTARIO</a>
</div>
<ul class="nav navbar-nav navbar-right">
<li><a href="#"><span class="glyphicon glyphicon-log-in"></span> Cerrar Sesión</a></li>
<li>
<h:form>
<h:commandLink value="Cerrar Sesión" action="#{login.logout}" styleClass="logout-link" style="text-decoration: none;">
<span class="glyphicon glyphicon-log-in"></span>
</h:commandLink>
</h:form>
</li>
<li><a href="#"> </a></li>
</ul>

310
InventarioJakartaJIN-war/web/usuarios.xhtml

@ -15,162 +15,166 @@
</ui:define>
<ui:define name="content">
<div class="card crud-demo">
<h:form id="form">
<p:growl id="messages" showDetail="true" />
<p:toolbar>
<p:toolbarGroup>
<p:commandButton value="Nuevo Usuario 👥" icon="pi pi-plus" actionListener="#{usuariosBean.prepararNuevoUsuario()}"
update=":dialogs:manage-product-content" oncomplete="PF('manageProductDialog').show()"
styleClass="ui-button-raised ui-button-flat" style="margin-right: 0.5rem">
<p:resetInput target=":dialogs:manage-product-content" />
</p:commandButton>
</p:toolbarGroup>
</p:toolbar>
<p:dataTable id="dt-usuario" widgetVar="dtusuario" var="usuario" value="#{usuariosBean.usuarios}"
reflow="true" styleClass="products-table"
rowKey="#{usuariosBean.usuario.idUsuarios}" paginator="true" rows="10" rowSelectMode="add" paginatorPosition="bottom">
<f:facet name="header">
<div class="products-table-header">
<span style="font-weight: bold">Usuarios</span>
<span class="filter-container ui-input-icon-left"> <i class="pi pi-search"></i>
<p:inputText id="globalFilter" onkeyup="PF('dtusuario').filter()" placeholder="Search" />
</span>
</div>
</f:facet>
<p:column headerText="Usuario" sortBy="#{usuario.usuario}" filterBy="#{usuario.usuario}">
<h:outputText value="#{usuario.usuario}" />
</p:column>
<p:column headerText="Nombre" sortBy="#{usuario.nombre }" filterBy="#{usuario.nombre}">
<h:outputText value="#{usuario.nombre} #{usuario.apaterno} #{usuario.amaterno}" />
</p:column>
<p:column headerText="Domicilio" sortBy="#{usuario.domicilio}" filterBy="#{usuario.domicilio}">
<h:outputText value="#{usuario.domicilio}" />
</p:column>
<p:column headerText="Telefono" sortBy="#{usuario.telefono}" filterBy="#{usuario.telefono}">
<h:outputText value="#{usuario.telefono}" />
</p:column>
<p:column headerText="F.Nacimiento" sortBy="#{usuario.fechanacimiento}" filterBy="#{usuario.fechanacimiento}">
<h:outputText value="#{usuario.fechanacimiento}">
<f:convertDateTime pattern="dd/MM/yyyy" />
</h:outputText>
</p:column>
<p:column headerText="T. Sangre" sortBy="#{usuario.tiposangre}" filterBy="#{usuario.tiposangre}">
<h:outputText value="#{usuario.tiposangre}" />
</p:column>
<p:column headerText="Rol" sortBy="#{usuario.rolidRol.nombreRol}" filterBy="#{usuario.rolidRol.nombreRol}">
<h:outputText value="#{usuario.rolidRol.nombreRol}" />
</p:column>
<p:column headerText="Acciones">
<p:commandButton icon="pi pi-pencil" update=":dialogs:manage-product-content"
oncomplete="PF('manageProductDialog').show()"
styleClass="rounded-button ui-button-info" process="@this"
actionListener="#{usuariosBean.prepararEditarUsuario(usuario)}">
<p:resetInput target=":dialogs:manage-product-content" />
</p:commandButton>
<p:commandButton styleClass="rounded-button ui-button-danger" icon="pi pi-trash"
process="@this"
actionListener="#{usuariosBean.prepararEditarUsuario(usuario)}"
oncomplete="PF('deleteProductDialog').show()">
</p:commandButton>
</p:column>
</p:dataTable>
</h:form>
<h:form id="dialogs">
<p:dialog header="Detalles de Usuario" showEffect="fade" modal="true" widgetVar="manageProductDialog"
responsive="true">
<p:outputPanel id="manage-product-content" styleClass="ui-fluid">
<p:outputPanel>
<h:panelGrid columns="2">
<p:outputLabel value="Usuario:" for="usuario" />
<p:inputText id="usuario" value="#{usuariosBean.usuario.usuario}" title="Usuario" required="true" requiredMessage="El usuario es requerdio." validatorMessage="Solo se pueden introducir letras y numeros">
<f:validateRegex pattern="[A-Za-z0-9]+" for="usuario"></f:validateRegex>
</p:inputText>
<p:outputLabel value="Contraseña" for="password" />
<p:inputText id="password" value="#{usuariosBean.usuario.password}" title="Contraseña" required="true" requiredMessage="La Contraseña es requerida." validatorMessage="La contraseña debe tener entre 8 y 10 caracteres, al menos una letra mayúscula, un número y un caracter especial (@$!%*?).">
<f:validateRegex pattern="^(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?])[A-Za-z\d@$!%*?]{8,10}$+" for="password"></f:validateRegex>
</p:inputText>
<p:outputLabel value="Nombre:" for="nombre" />
<p:inputText id="nombre" value="#{usuariosBean.usuario.nombre}" title="Nombre" required="true" requiredMessage="El usuario es requerdio." validatorMessage="Solo se pueden introducir letras">
<f:validateRegex pattern="[A-Za-z\s]+" for="nombre"></f:validateRegex>
</p:inputText>
<p:outputLabel value="Apellido Paterno" for="apaterno" />
<p:inputText id="apaterno" value="#{usuariosBean.usuario.apaterno}" title="Apellido Paterno" required="true" requiredMessage="El Apellido es requerido" validatorMessage="Solo se pueden introducir letras">
<f:validateRegex pattern="[A-Za-z\s]+" for="apaterno"></f:validateRegex>
</p:inputText>
<p:outputLabel value="Apellido Materno" for="amaterno" />
<p:inputText id="amaterno" value="#{usuariosBean.usuario.amaterno}" title="Apellido Materno" required="true" requiredMessage="El Apellido es requerido" validatorMessage="Solo se pueden introducir letras">
<f:validateRegex pattern="[A-Za-z\s]+" for="amaterno"></f:validateRegex>
</p:inputText>
<p:outputLabel value="Domicilio:" for="domicilio" />
<p:inputText id="domicilio" value="#{usuariosBean.usuario.domicilio}" title="Domicilio" required="true" requiredMessage="El domicilio es requerido" validatorMessage="El domicilio solo puede contener letras, números y ciertos caracteres especiales como -, ., #, y espacios." >
<f:validateRegex pattern="^[A-Za-z0-9\s\-,.#áéíóúÁÉÍÓÚñÑ]+$" for="domicilio"></f:validateRegex>
</p:inputText>
<p:outputLabel value="Telefono:" for="telefono" />
<p:inputMask id="telefono" value="#{usuariosBean.usuario.telefono}" mask="(999) 999-9999" validateMask="true" >
</p:inputMask>
<p:outputLabel value="Fecha de nacimiento" for="fechanacimiento" />
<p:inputMask id="fechanacimiento" value="#{usuariosBean.usuario.fechanacimiento}" mask="99/99/9999" required="true" >
<f:convertDateTime pattern="dd/MM/yyyy" />
</p:inputMask>
<p:outputLabel value="Tipo de sangre" for="tiposangre" />
<p:inputText id="tiposangre" value="#{usuariosBean.usuario.tiposangre}" title="Tipo de sangre" required="true" requiredMessage="El tipo de sangre es requerdio"/>
<p:outputLabel value="Rol" for="rolidRol" />
<p:selectOneMenu id="rolidRol" value="#{usuariosBean.usuario.rolidRol}" required="true" converter="selectOneMenuConverter" requiredMessage="El rol es requerido">
<!-- TODO: update below reference to list of available items-->
<f:selectItem itemLabel="Selecciona una" itemValue="" />
<f:selectItems value="#{rolBean.roles}" var="item" itemLabel="#{item.nombreRol}" itemValue="#{item}"/>
</p:selectOneMenu>
</h:panelGrid>
<div class="card crud-demo">
<h:form id="form">
<p:growl id="messages" showDetail="true" />
<p:toolbar>
<p:toolbarGroup>
<p:commandButton value="Nuevo Usuario 👥" icon="pi pi-plus"
actionListener="#{usuariosBean.prepararNuevoUsuario()}"
update=":dialogs:manage-product-content" oncomplete="PF('manageProductDialog').show()"
styleClass="ui-button-raised ui-button-flat" style="margin-right: 0.5rem"
rendered="#{ not login.esOperador()}">
<p:resetInput target=":dialogs:manage-product-content" />
</p:commandButton>
</p:toolbarGroup>
</p:toolbar>
<p:dataTable id="dt-usuario" widgetVar="dtusuario" var="usuario" value="#{usuariosBean.usuarios}"
reflow="true" styleClass="products-table"
rowKey="#{usuariosBean.usuario.idUsuarios}" paginator="true" rows="10" rowSelectMode="add" paginatorPosition="bottom">
<f:facet name="header">
<div class="products-table-header">
<span style="font-weight: bold">Usuarios</span>
<span class="filter-container ui-input-icon-left"> <i class="pi pi-search"></i>
<p:inputText id="globalFilter" onkeyup="PF('dtusuario').filter()" placeholder="Search" />
</span>
</div>
</f:facet>
<p:column headerText="Usuario" sortBy="#{usuario.usuario}" filterBy="#{usuario.usuario}">
<h:outputText value="#{usuario.usuario}" />
</p:column>
<p:column headerText="Nombre" sortBy="#{usuario.nombre }" filterBy="#{usuario.nombre}">
<h:outputText value="#{usuario.nombre} #{usuario.apaterno} #{usuario.amaterno}" />
</p:column>
<p:column headerText="Domicilio" sortBy="#{usuario.domicilio}" filterBy="#{usuario.domicilio}">
<h:outputText value="#{usuario.domicilio}" />
</p:column>
<p:column headerText="Telefono" sortBy="#{usuario.telefono}" filterBy="#{usuario.telefono}">
<h:outputText value="#{usuario.telefono}" />
</p:column>
<p:column headerText="F.Nacimiento" sortBy="#{usuario.fechanacimiento}" filterBy="#{usuario.fechanacimiento}">
<h:outputText value="#{usuario.fechanacimiento}">
<f:convertDateTime pattern="dd/MM/yyyy" />
</h:outputText>
</p:column>
<p:column headerText="T. Sangre" sortBy="#{usuario.tiposangre}" filterBy="#{usuario.tiposangre}">
<h:outputText value="#{usuario.tiposangre}" />
</p:column>
<p:column headerText="Rol" sortBy="#{usuario.rolidRol.nombreRol}" filterBy="#{usuario.rolidRol.nombreRol}">
<h:outputText value="#{usuario.rolidRol.nombreRol}" />
</p:column>
<p:column headerText="Acciones" rendered="#{not login.esOperador()}">
<p:commandButton icon="pi pi-pencil" update=":dialogs:manage-product-content"
oncomplete="PF('manageProductDialog').show()"
styleClass="rounded-button ui-button-info" process="@this"
actionListener="#{usuariosBean.prepararEditarUsuario(usuario)}" style="margin-right: 10px;"
>
<p:resetInput target=":dialogs:manage-product-content" />
</p:commandButton>
<p:commandButton styleClass="rounded-button ui-button-danger" icon="pi pi-trash"
process="@this"
actionListener="#{usuariosBean.prepararEditarUsuario(usuario)}"
oncomplete="PF('deleteProductDialog').show()">
</p:commandButton>
</p:column>
</p:dataTable>
</h:form>
<h:form id="dialogs">
<p:dialog header="Detalles de Usuario" showEffect="fade" modal="true" widgetVar="manageProductDialog"
responsive="true">
<p:outputPanel id="manage-product-content" styleClass="ui-fluid">
<p:outputPanel>
<h:panelGrid columns="2">
<p:outputLabel value="Usuario:" for="usuario" />
<p:inputText id="usuario" value="#{usuariosBean.usuario.usuario}" title="Usuario" required="true" requiredMessage="El usuario es requerdio." validatorMessage="Solo se pueden introducir letras y numeros">
<f:validateRegex pattern="[A-Za-z0-9]+" for="usuario"></f:validateRegex>
</p:inputText>
<p:outputLabel value="Contraseña" for="password" />
<p:inputText id="password" value="#{usuariosBean.usuario.password}" title="Contraseña" required="true" requiredMessage="La Contraseña es requerida." validatorMessage="La contraseña debe tener entre 8 y 10 caracteres, al menos una letra mayúscula, un número y un caracter especial (@$!%*?).">
<f:validateRegex pattern="^(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?])[A-Za-z\d@$!%*?]{8,10}$+" for="password"></f:validateRegex>
</p:inputText>
<p:outputLabel value="Nombre:" for="nombre" />
<p:inputText id="nombre" value="#{usuariosBean.usuario.nombre}" title="Nombre" required="true" requiredMessage="El usuario es requerdio." validatorMessage="Solo se pueden introducir letras">
<f:validateRegex pattern="[A-Za-z\s]+" for="nombre"></f:validateRegex>
</p:inputText>
<p:outputLabel value="Apellido Paterno" for="apaterno" />
<p:inputText id="apaterno" value="#{usuariosBean.usuario.apaterno}" title="Apellido Paterno" required="true" requiredMessage="El Apellido es requerido" validatorMessage="Solo se pueden introducir letras">
<f:validateRegex pattern="[A-Za-z\s]+" for="apaterno"></f:validateRegex>
</p:inputText>
<p:outputLabel value="Apellido Materno" for="amaterno" />
<p:inputText id="amaterno" value="#{usuariosBean.usuario.amaterno}" title="Apellido Materno" required="true" requiredMessage="El Apellido es requerido" validatorMessage="Solo se pueden introducir letras">
<f:validateRegex pattern="[A-Za-z\s]+" for="amaterno"></f:validateRegex>
</p:inputText>
<p:outputLabel value="Domicilio:" for="domicilio" />
<p:inputText id="domicilio" value="#{usuariosBean.usuario.domicilio}" title="Domicilio" required="true" requiredMessage="El domicilio es requerido" validatorMessage="El domicilio solo puede contener letras, números y ciertos caracteres especiales como -, ., #, y espacios." >
<f:validateRegex pattern="^[A-Za-z0-9\s\-,.#áéíóúÁÉÍÓÚñÑ]+$" for="domicilio"></f:validateRegex>
</p:inputText>
<p:outputLabel value="Telefono:" for="telefono" />
<p:inputMask id="telefono" value="#{usuariosBean.usuario.telefono}" mask="(999) 999-9999" validateMask="true" >
</p:inputMask>
<p:outputLabel value="Fecha de nacimiento" for="fechanacimiento" />
<p:inputMask id="fechanacimiento" value="#{usuariosBean.usuario.fechanacimiento}" mask="99/99/9999" required="true" >
<f:convertDateTime pattern="dd/MM/yyyy" />
</p:inputMask>
<p:outputLabel value="Tipo de sangre" for="tiposangre" />
<p:inputText id="tiposangre" value="#{usuariosBean.usuario.tiposangre}" title="Tipo de sangre" required="true" requiredMessage="El tipo de sangre es requerdio"/>
<p:outputLabel value="Rol" for="rolidRol" />
<p:selectOneMenu id="rolidRol" value="#{usuariosBean.usuario.rolidRol}" required="true" converter="selectOneMenuConverter" requiredMessage="El rol es requerido">
<!-- TODO: update below reference to list of available items-->
<f:selectItem itemLabel="Selecciona una" itemValue="" />
<f:selectItems value="#{rolBean.roles}" var="item" itemLabel="#{item.nombreRol}" itemValue="#{item}"/>
</p:selectOneMenu>
</h:panelGrid>
</p:outputPanel>
</p:outputPanel>
</p:outputPanel>
<f:facet name="footer">
<div style="text-align: center;">
<p:commandButton value="Guardar" icon="pi pi-save"
styleClass="ui-button-raised ui-button-flat" actionListener="#{usuariosBean.agregarUsuario()}"
update="manage-product-content" process="manage-product-content @this" />
<f:facet name="footer">
<div style="text-align: center;">
<p:commandButton value="Guardar" icon="pi pi-save"
styleClass="ui-button-raised ui-button-flat" actionListener="#{usuariosBean.agregarUsuario()}"
update="manage-product-content" process="manage-product-content @this" />
</div>
</f:facet>
</p:dialog>
<p:confirmDialog widgetVar="deleteProductDialog" showEffect="fade" width="300"
message="¿Deseas eliminar este elemento?" header="Eliminar" severity="warn">
<div style="display: flex; justify-content: space-between;">
<p:commandButton value="Eliminar" icon="pi pi-trash"
styleClass="ui-button-raised ui-button-danger ui-button-flat"
actionListener="#{usuariosBean.eliminaUsuario()}" process="@this"
oncomplete="PF('deleteProductDialog').hide()" />
<p:commandButton value="Cancelar" type="button"
styleClass="ui-button-raised ui-button-danger-success ui-button-flat" icon="pi pi-times"
onclick="PF('deleteProductDialog').hide()" />
</div>
</f:facet>
</p:dialog>
<p:confirmDialog widgetVar="deleteProductDialog" showEffect="fade" width="300"
message="¿Deseas eliminar este elemento?" header="Eliminar" severity="warn">
<div style="display: flex; justify-content: space-between;">
<p:commandButton value="Eliminar" icon="pi pi-trash"
styleClass="ui-button-raised ui-button-danger ui-button-flat"
actionListener="#{usuariosBean.eliminaUsuario()}" process="@this"
oncomplete="PF('deleteProductDialog').hide()" />
<p:commandButton value="Cancelar" type="button"
styleClass="ui-button-raised ui-button-danger-success ui-button-flat" icon="pi pi-times"
onclick="PF('deleteProductDialog').hide()" />
</div>
</p:confirmDialog>
</h:form>
</div>
</p:confirmDialog>
</h:form>
</div>
</ui:define>
</ui:composition>

Loading…
Cancel
Save