0

jquery.ajax()特定の領域でパーミッションを許可/禁止する単純なシステムを構築していますが、チェックボックスの値を送信して PHP 関数で処理し、テーブルに挿入する最良の方法を知りたいです。

table_perfiles_permisos問題はありません。各チェックボックスの変数を作成して挿入せずに、テーブルの各エリアから各チェックボックスの値を挿入する方法を知りたいだけです! foreachなどを使用した動的なもの。

チェックボックスのパーミッション

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 = $(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   
             }
        }
});

だから、保存されたデータであるべきです

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 が格納されます。

十分に説明できたことを願っています。

4

1 に答える 1

2

各権限タイプを個別のデータベース列に格納するのではなく、2進数にして、権限セット全体を整数として格納できます。このようにして、DBを変更することなく、いつでも新しいアクセス許可タイプを追加できます。

たとえば、パーミッションタイプ定数を次のように定義すると、次のようになります。

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

次に、それらをビット単位のOR演算子と組み合わせることができます。

$permissions_set = (PERMISSION_CREATE | PERMISSION_SEARCH);

これは、0011(バイナリ)または3に等しく、これはDBに格納できる数です。

特定の権限が「オン」であるかどうかを確認するには、ビット単位のANDを使用します。

if( ($permissions_set & PERMISSION_CREATE) === true ) {
    // create is on
}
于 2012-08-06T22:29:33.910 に答える