2012-08-06 79 views
0

我是一个建立一个简单的系统来允许/禁止在特定区域的权限,但我想知道什么是最好的方式来发送从jquery.ajax()复选框的值来处理一个PHP函数并插入表中:如何根据复选框的值在表中存储多个权限?

不存在问题,只是我想知道一种方法来插入每个区域的每个复选框的值在表table_perfiles_permisos没有为每个复选框和插入创建一个变量!一些动态使用foreach或其他东西。

checkboxes permissions

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序列化形式

formchecks = $(形式).serialize();

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

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

所以应当被存储的数据

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 

例如如果复选框被选中,则将每个区域中的每个复选框存储1个其他值为0

我希望我已经解释得够多了。

+0

对不起,有什么问题呢?看起来你已经有了这种排序,究竟哪些不起作用? – DaveRandom 2012-08-06 22:04:17

+0

不存在问题,只是我想知道一种方法来插入表中每个区域的每个复选框的值table_perfiles_permisos,而无需为每个checbox创建一个变量并插入!一些dinamyc使用foreach或其他东西! – SoldierCorp 2012-08-06 22:08:53

+0

哦,我明白你的意思了。那么我会在HTML表单中创建1个大的2d数组,因此您只需迭代1个可以动态更改的变量。所以你可以把它改成像''那么你所要做的就是循环'$ _POST ['perm']',然后您可以循环每个子项目以获取每个区域的权限。我不知道我解释得很好...... – DaveRandom 2012-08-06 22:13:09

回答

2

与其将每个权限类型存储在单独的数据库列中,您可以将其设置为二进制数并将整个权限集存储为整数。这样您就可以随时添加新的权限类型而无需修改数据库。

举例来说,如果你定义的权限类型常量,如下所示:

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

然后你可以用位或运算符将它们组合起来:

$permissions_set = (PERMISSION_CREATE | PERMISSION_SEARCH); 

这等于0011(二进制)或3,这是您可以存储在数据库中的数字。

要检查是否有特定的权限为“开”,使用按位:

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

这是设置权限的好方法,但是,我使用php会话,然后当用户登录时,他们的许可证将根据您所在的区域进行加载,允许或拒绝访问权限集...然后,示例适用于此? – SoldierCorp 2012-08-06 22:42:18

相关问题