简体   繁体   中英

How to store multiple permissions in a table from values of checkboxes?

I'm a building a simple system to allow/disallow permissions in specific areas but I want to know what is the best way to send the values of checkboxes from jquery.ajax() to process in a PHP function and insert in a table:

Doesn't exists a problem, just I want know a way to Insert the value of each checkbox from each Area in a table table_perfiles_permisos without create a variable for each checkbox and insert! Some dynamic using foreach or something.

复选框权限

HTML

    <form> 
    <div id="permisosPerfiles">
        <div id="leftPermisos">
        <p>
        <h4>Usuarios</h4>
        <label for="pCrearUsuario">Crear</label>
        <input id="pCrearUsuario" name="permUsuarios[]" value="CrearU" type="checkbox" />
        <label for="pBuscarUsuario">Buscar</label>
        <input id="pBuscarUsuario" name="permUsuarios[]" value="BuscarU" type="checkbox"/>
        <label for="pModificarUsuario">Modificar</label>
        <input id="pModificarUsuario" name="permUsuarios[]" value="ModificarU" type="checkbox"/>
        <label for="pEliminarUsuario">Eliminar</label>
        <input id="pEliminarUsuario" name="permUsuarios[]" value="EliminarU" type="checkbox"/>
        </p>

        <p>
        <h4>Clientes</h4>
        <label for="pCrearCliente">Crear</label>
        <input id="pCrearCliente" name="permClientes[]" value="CrearC" type="checkbox"/>
        <label for="pBuscarCliente">Buscar</label>
        <input id="pBuscarCliente" name="permClientes[]" value="BuscarC" type="checkbox"/>
        <label for="pModificarCliente">Modificar</label>
        <input id="pModificarCliente" name="permClientes[]" value="ModificarC" type="checkbox"/>
        <label for="pEliminarCliente">Eliminar</label>
        <input id="pEliminarCliente" name="permClientes[]" value="EliminarC" type="checkbox"/>
        </p>
        <p>
        <h4>Marca, Producto Subproducto</h4>
        <label for="pCrearMPS">Crear</label>
        <input id="pCrearMPS" name="permMPS[]" value="CrearMPS" type="checkbox"/>
        <label for="pBuscarMPS">Buscar</label>
        <input id="pBuscarMPS" name="permMPS[]" value="BuscarMPS" type="checkbox"/>
        <label for="pModificarMPS">Modificar</label>
        <input id="pModificarMPS" name="permMPS[]" value="ModificarMPS" type="checkbox"/>
        <label for="pEliminarMPS">Eliminar</label>
        <input id="pEliminarMPS" name="permMPS[]" value="EliminarMPS" type="checkbox"/>
        </p>
        </div>

        <div id="rightPermisos">
        <p>
        <h4>Póliza</h4>
        <label for="pCrearPoliza">Crear</label>
        <input id="pCrearPoliza" name="permPoliza[]" value="CrearP" type="checkbox"/>
        <label for="pBuscarPoliza">Buscar</label>
        <input id="pBuscarPoliza" name="permPoliza[]" value="BuscarP" type="checkbox"/>
        <label for="pModificarPoliza">Modificar</label>
        <input id="pModificarPoliza" name="permPoliza[]" value="ModificarP" type="checkbox"/>
        <label for="pEliminarPoliza">Eliminar</label>
        <input id="pEliminarPoliza" name="permPoliza[]" value="EliminarP" type="checkbox"/>
        </p>
        <p>
        <h4>Servicio</h4>
        <label for="pCrearServicio">Crear</label>
        <input id="pCrearServicio" name="permServicio[]" value="CrearS" type="checkbox"/>
        <label for="pBuscarServicio">Buscar</label>
        <input id="pBuscarServicio" name="permServicio[]" value="BuscarS" type="checkbox"/>
        <label for="pModificarServicio">Modificar</label>
        <input id="pModificarServicio" name="permServicio[]" value="ModificarS" type="checkbox"/>
        <label for="pEliminarServicio">Eliminar</label>
        <input id="pEliminarServicio" name="permServicio[]" value="EliminarS" type="checkbox"/>
        </p>
        </div>
    </div>
</form>

jQuery to serialize form

formchecks = $(form).serialize();

$.ajax({
    type : "POST",
        url: "process.php",
        data: formchecks,
        success: function(response) {

             if (response == "success") {
                 //actions if success    
             } else {
                //actions if doesn't success   
             }
        }
});

So should be the data stored

table_perfiles
*id   *nombre   *descripcion
1      NameOne    DescOne
2      NameTwo    DescTwo

table_perfiles_permisos
*id_perfil *area_permiso *buscar *crear *eliminar *modificar 
    1            1          0      1         1        1
    1            2          0      0         1        0
    2            1          1      1         1        1


table_areas_permisos
*id *nombre
1    usuarios
2    clientes
3    mps
4    poliza
5    servicio

eg if checkbox is checked, will store 1 else will be 0 for each checkbox in each area

I hope I have explained enough.

Rather than storing each permission type in a separate database column, you can make it a binary number and store entire permission sets as integers. This way you can always add new permission types without having to modify your DB.

For instance, if you define permission type constants as follows:

define('PERMISSION_CREATE', bindec('0001'));
define('PERMISSION_SEARCH', bindec('0010'));
define('PERMISSION_EDIT',   bindec('0100'));
define('PERMISSION_DELETE', bindec('1000'));

you can then combine them with bitwise OR operator:

$permissions_set = (PERMISSION_CREATE | PERMISSION_SEARCH);

this equals 0011 (binary) or 3, which is the number you can store in your DB.

To check if a specific permission is "on", use bitwise AND:

if( ($permissions_set & PERMISSION_CREATE) === true ) {
    // create is on
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM