FAQ
Estoy realizando un sistema multipermisos, en el que se puede dar el caso de
que un Usuario, pueda tener hasta 40 opciones de permisos distintos.

Cual sería el mejor modo de manejar esto...

¿Mediante operaciones bitwise almacenando el número en la base de datos como
BigInt? (aunque tengo entendido que PHP sólo hace operaciones bitwise con
hasta 32 bits. En este caso serían 40 bits o más.

Creando un campo para cada opción con valores 1/0 ??

Luego claro está, necesito hacer comprobaciones rápidas para ver permisos,
etc.

Un saludo.
Edu

Search Discussions

  • Gabriel Sosa at Nov 25, 2008 at 1:37 pm
    no hay nada empezado que te sirva?
    por ejemplo [1]. O vos tenes que desarrollar el sistema de ACL ?
    lo unico que tengo hecho asi tiene has 8 bits, lo bueno es que lo
    guardo en mysql como int y hago la logica en el query mismo.
    por otro lado si todavia queres hacerlo asi
    porque no guardarlo con string en (por ejemplo) un campo varchar y
    luego la logica de permisos la haces con una iteracion (aclaro. esto
    me parece sucio y poco performante. pero es una opcion)

    saludos

    [1] http://tinyurl.com/5sta3g

    2008/11/25 EduT <vayafiestas@vayafiestas.com>:
    Estoy realizando un sistema multipermisos, en el que se puede dar el caso de
    que un Usuario, pueda tener hasta 40 opciones de permisos distintos.

    Cual sería el mejor modo de manejar esto...

    ¿Mediante operaciones bitwise almacenando el número en la base de datos como
    BigInt? (aunque tengo entendido que PHP sólo hace operaciones bitwise con
    hasta 32 bits. En este caso serían 40 bits o más.

    Creando un campo para cada opción con valores 1/0 ??

    Luego claro está, necesito hacer comprobaciones rápidas para ver permisos,
    etc.

    Un saludo.
    Edu



    --
    PHP Spanish Localization Talk Mailing List (http://www.php.net/)
    To unsubscribe, visit: http://www.php.net/unsub.php


    --
    Los sabios buscan la sabiduría; los necios creen haberla encontrado.
    Gabriel Sosa
  • EduT at Nov 25, 2008 at 2:00 pm
    Si, tengo que desarrollar yo el ACL.

    Había pensado varias opciones, pero al final también me veo limitado por los
    32 bits de las operaciones bitwise.

    Si no fuese por el límite de las operaciones de 32 bits, podría almacenar
    los permisos en 1 campo tipo BigInt que viene a ser 64 bits (sin signo) en
    MySQL:

    Nose, tiene que haber algún modo práctico de hacer esto.
    Seguro que no soy el 1º que le pasa algo así.

    Muchas gracias por tu sugerencia!!


    ""Gabriel Sosa"" <sosagabriel@gmail.com> escribió en el mensaje
    news:4498aded0811250537h1493a2aaode8a0ac7c28fb811@mail.gmail.com...
    no hay nada empezado que te sirva?
    por ejemplo [1]. O vos tenes que desarrollar el sistema de ACL ?
    lo unico que tengo hecho asi tiene has 8 bits, lo bueno es que lo
    guardo en mysql como int y hago la logica en el query mismo.
    por otro lado si todavia queres hacerlo asi
    porque no guardarlo con string en (por ejemplo) un campo varchar y
    luego la logica de permisos la haces con una iteracion (aclaro. esto
    me parece sucio y poco performante. pero es una opcion)

    saludos

    [1] http://tinyurl.com/5sta3g

    2008/11/25 EduT <vayafiestas@vayafiestas.com>:
    Estoy realizando un sistema multipermisos, en el que se puede dar el caso
    de
    que un Usuario, pueda tener hasta 40 opciones de permisos distintos.

    Cual sería el mejor modo de manejar esto...

    ¿Mediante operaciones bitwise almacenando el número en la base de datos
    como
    BigInt? (aunque tengo entendido que PHP sólo hace operaciones bitwise con
    hasta 32 bits. En este caso serían 40 bits o más.

    Creando un campo para cada opción con valores 1/0 ??

    Luego claro está, necesito hacer comprobaciones rápidas para ver permisos,
    etc.

    Un saludo.
    Edu



    --
    PHP Spanish Localization Talk Mailing List (http://www.php.net/)
    To unsubscribe, visit: http://www.php.net/unsub.php


    --
    Los sabios buscan la sabiduría; los necios creen haberla encontrado.
    Gabriel Sosa
  • Martin Scotta at Nov 25, 2008 at 3:16 pm
    PHP no maneja muy bien las operaciones de bits y cuesta mucho que no
    rompa el dato.
    En cuanto al limite de los 32 bits no es un problema, podes cortar el
    dato en 2 y guardarlo en un campo de 64 bits.

    La otra opcion (y la mejor creo) es procesar la info en el SQL. MySQL
    maneja muy bien campos de bits. Podrias hacer el select como 40 campos
    distintos con valores {0, 1} pero almacenarlos como 1 solo campo.

    Todo depende de la cantidad de registros que vas a manejar,
    varchar(40) es mucho?
    En lo particular utilizaria un string o algo similar y empequetaria
    los datos ahi adentro.

    $auth = '10101110110010101010111010010010101001100101';

    #si quiero conocer el estado del flag "n"
    var_dump( $auth{$n} == '1' );

    Espero te sirva.
    Despues contanos tu solucion.


    2008/11/25 EduT <vayafiestas@vayafiestas.com>:
    Si, tengo que desarrollar yo el ACL.

    Había pensado varias opciones, pero al final también me veo limitado por los
    32 bits de las operaciones bitwise.

    Si no fuese por el límite de las operaciones de 32 bits, podría almacenar
    los permisos en 1 campo tipo BigInt que viene a ser 64 bits (sin signo) en
    MySQL:

    Nose, tiene que haber algún modo práctico de hacer esto.
    Seguro que no soy el 1º que le pasa algo así.

    Muchas gracias por tu sugerencia!!


    ""Gabriel Sosa"" <sosagabriel@gmail.com> escribió en el mensaje
    news:4498aded0811250537h1493a2aaode8a0ac7c28fb811@mail.gmail.com...
    no hay nada empezado que te sirva?
    por ejemplo [1]. O vos tenes que desarrollar el sistema de ACL ?
    lo unico que tengo hecho asi tiene has 8 bits, lo bueno es que lo
    guardo en mysql como int y hago la logica en el query mismo.
    por otro lado si todavia queres hacerlo asi
    porque no guardarlo con string en (por ejemplo) un campo varchar y
    luego la logica de permisos la haces con una iteracion (aclaro. esto
    me parece sucio y poco performante. pero es una opcion)

    saludos

    [1] http://tinyurl.com/5sta3g

    2008/11/25 EduT <vayafiestas@vayafiestas.com>:
    Estoy realizando un sistema multipermisos, en el que se puede dar el caso
    de
    que un Usuario, pueda tener hasta 40 opciones de permisos distintos.

    Cual sería el mejor modo de manejar esto...

    ¿Mediante operaciones bitwise almacenando el número en la base de datos
    como
    BigInt? (aunque tengo entendido que PHP sólo hace operaciones bitwise con
    hasta 32 bits. En este caso serían 40 bits o más.

    Creando un campo para cada opción con valores 1/0 ??

    Luego claro está, necesito hacer comprobaciones rápidas para ver permisos,
    etc.

    Un saludo.
    Edu



    --
    PHP Spanish Localization Talk Mailing List (http://www.php.net/)
    To unsubscribe, visit: http://www.php.net/unsub.php


    --
    Los sabios buscan la sabiduría; los necios creen haberla encontrado.
    Gabriel Sosa



    --
    PHP Spanish Localization Talk Mailing List (http://www.php.net/)
    To unsubscribe, visit: http://www.php.net/unsub.php


    --
    Martin Scotta

    Preferis una copia trucha a un sistema operativo de codigo abierto,
    legal, gratis, documentado y con un potencial enorme, tan solo por que
    estas acostumbrado?
  • EduT at Nov 26, 2008 at 9:23 am
    Efectivamente al final antes de ver tu solución me decidí por la solución
    que comentas de varchar y almacenar los 'bits' que sean en dicho campo.

    Me he hecho alguna clase para hacer operaciones AND, XOR, OR con dichos
    campos de texto de n bits.

    Muchas gracias Gabriel y Martín por vuestras sugerencias, ambas útiles.

    Un saludo.
    Edu

    ""Martin Scotta"" <martinscotta@gmail.com> escribió en el mensaje
    news:6445d94e0811250716y62f0cbe4v590ff53796c93cf4@mail.gmail.com...
    PHP no maneja muy bien las operaciones de bits y cuesta mucho que no
    rompa el dato.
    En cuanto al limite de los 32 bits no es un problema, podes cortar el
    dato en 2 y guardarlo en un campo de 64 bits.

    La otra opcion (y la mejor creo) es procesar la info en el SQL. MySQL
    maneja muy bien campos de bits. Podrias hacer el select como 40 campos
    distintos con valores {0, 1} pero almacenarlos como 1 solo campo.

    Todo depende de la cantidad de registros que vas a manejar,
    varchar(40) es mucho?
    En lo particular utilizaria un string o algo similar y empequetaria
    los datos ahi adentro.

    $auth = '10101110110010101010111010010010101001100101';

    #si quiero conocer el estado del flag "n"
    var_dump( $auth{$n} == '1' );

    Espero te sirva.
    Despues contanos tu solucion.


    2008/11/25 EduT <vayafiestas@vayafiestas.com>:
    Si, tengo que desarrollar yo el ACL.

    Había pensado varias opciones, pero al final también me veo limitado por
    los
    32 bits de las operaciones bitwise.

    Si no fuese por el límite de las operaciones de 32 bits, podría almacenar
    los permisos en 1 campo tipo BigInt que viene a ser 64 bits (sin signo) en
    MySQL:

    Nose, tiene que haber algún modo práctico de hacer esto.
    Seguro que no soy el 1º que le pasa algo así.

    Muchas gracias por tu sugerencia!!


    ""Gabriel Sosa"" <sosagabriel@gmail.com> escribió en el mensaje
    news:4498aded0811250537h1493a2aaode8a0ac7c28fb811@mail.gmail.com...
    no hay nada empezado que te sirva?
    por ejemplo [1]. O vos tenes que desarrollar el sistema de ACL ?
    lo unico que tengo hecho asi tiene has 8 bits, lo bueno es que lo
    guardo en mysql como int y hago la logica en el query mismo.
    por otro lado si todavia queres hacerlo asi
    porque no guardarlo con string en (por ejemplo) un campo varchar y
    luego la logica de permisos la haces con una iteracion (aclaro. esto
    me parece sucio y poco performante. pero es una opcion)

    saludos

    [1] http://tinyurl.com/5sta3g

    2008/11/25 EduT <vayafiestas@vayafiestas.com>:
    Estoy realizando un sistema multipermisos, en el que se puede dar el caso
    de
    que un Usuario, pueda tener hasta 40 opciones de permisos distintos.

    Cual sería el mejor modo de manejar esto...

    ¿Mediante operaciones bitwise almacenando el número en la base de datos
    como
    BigInt? (aunque tengo entendido que PHP sólo hace operaciones bitwise con
    hasta 32 bits. En este caso serían 40 bits o más.

    Creando un campo para cada opción con valores 1/0 ??

    Luego claro está, necesito hacer comprobaciones rápidas para ver
    permisos,
    etc.

    Un saludo.
    Edu



    --
    PHP Spanish Localization Talk Mailing List (http://www.php.net/)
    To unsubscribe, visit: http://www.php.net/unsub.php


    --
    Los sabios buscan la sabiduría; los necios creen haberla encontrado.
    Gabriel Sosa



    --
    PHP Spanish Localization Talk Mailing List (http://www.php.net/)
    To unsubscribe, visit: http://www.php.net/unsub.php


    --
    Martin Scotta

    Preferis una copia trucha a un sistema operativo de codigo abierto,
    legal, gratis, documentado y con un potencial enorme, tan solo por que
    estas acostumbrado?
  • Jaime Jose Perera Merino at Nov 26, 2008 at 12:28 pm
    Puedes mirar cómo hace esto Moodle (http://www.moodle.org/).
    Jaime

    El día 26 de noviembre de 2008 10:22, EduT
    <vayafiestas@vayafiestas.com> escribió:
    Efectivamente al final antes de ver tu solución me decidí por la solución
    que comentas de varchar y almacenar los 'bits' que sean en dicho campo.

    Me he hecho alguna clase para hacer operaciones AND, XOR, OR con dichos
    campos de texto de n bits.

    Muchas gracias Gabriel y Martín por vuestras sugerencias, ambas útiles.

    Un saludo.
    Edu

    ""Martin Scotta"" <martinscotta@gmail.com> escribió en el mensaje
    news:6445d94e0811250716y62f0cbe4v590ff53796c93cf4@mail.gmail.com...
    PHP no maneja muy bien las operaciones de bits y cuesta mucho que no
    rompa el dato.
    En cuanto al limite de los 32 bits no es un problema, podes cortar el
    dato en 2 y guardarlo en un campo de 64 bits.

    La otra opcion (y la mejor creo) es procesar la info en el SQL. MySQL
    maneja muy bien campos de bits. Podrias hacer el select como 40 campos
    distintos con valores {0, 1} pero almacenarlos como 1 solo campo.

    Todo depende de la cantidad de registros que vas a manejar,
    varchar(40) es mucho?
    En lo particular utilizaria un string o algo similar y empequetaria
    los datos ahi adentro.

    $auth = '10101110110010101010111010010010101001100101';

    #si quiero conocer el estado del flag "n"
    var_dump( $auth{$n} == '1' );

    Espero te sirva.
    Despues contanos tu solucion.


    2008/11/25 EduT <vayafiestas@vayafiestas.com>:
    Si, tengo que desarrollar yo el ACL.

    Había pensado varias opciones, pero al final también me veo limitado por
    los
    32 bits de las operaciones bitwise.

    Si no fuese por el límite de las operaciones de 32 bits, podría almacenar
    los permisos en 1 campo tipo BigInt que viene a ser 64 bits (sin signo) en
    MySQL:

    Nose, tiene que haber algún modo práctico de hacer esto.
    Seguro que no soy el 1º que le pasa algo así.

    Muchas gracias por tu sugerencia!!


    ""Gabriel Sosa"" <sosagabriel@gmail.com> escribió en el mensaje
    news:4498aded0811250537h1493a2aaode8a0ac7c28fb811@mail.gmail.com...
    no hay nada empezado que te sirva?
    por ejemplo [1]. O vos tenes que desarrollar el sistema de ACL ?
    lo unico que tengo hecho asi tiene has 8 bits, lo bueno es que lo
    guardo en mysql como int y hago la logica en el query mismo.
    por otro lado si todavia queres hacerlo asi
    porque no guardarlo con string en (por ejemplo) un campo varchar y
    luego la logica de permisos la haces con una iteracion (aclaro. esto
    me parece sucio y poco performante. pero es una opcion)

    saludos

    [1] http://tinyurl.com/5sta3g

    2008/11/25 EduT <vayafiestas@vayafiestas.com>:
    Estoy realizando un sistema multipermisos, en el que se puede dar el caso
    de
    que un Usuario, pueda tener hasta 40 opciones de permisos distintos.

    Cual sería el mejor modo de manejar esto...

    ¿Mediante operaciones bitwise almacenando el número en la base de datos
    como
    BigInt? (aunque tengo entendido que PHP sólo hace operaciones bitwise con
    hasta 32 bits. En este caso serían 40 bits o más.

    Creando un campo para cada opción con valores 1/0 ??

    Luego claro está, necesito hacer comprobaciones rápidas para ver
    permisos,
    etc.

    Un saludo.
    Edu



    --
    PHP Spanish Localization Talk Mailing List (http://www.php.net/)
    To unsubscribe, visit: http://www.php.net/unsub.php


    --
    Los sabios buscan la sabiduría; los necios creen haberla encontrado.
    Gabriel Sosa



    --
    PHP Spanish Localization Talk Mailing List (http://www.php.net/)
    To unsubscribe, visit: http://www.php.net/unsub.php


    --
    Martin Scotta

    Preferis una copia trucha a un sistema operativo de codigo abierto,
    legal, gratis, documentado y con un potencial enorme, tan solo por que
    estas acostumbrado?



    --
    PHP Spanish Localization Talk Mailing List (http://www.php.net/)
    To unsubscribe, visit: http://www.php.net/unsub.php

Related Discussions

Discussion Navigation
viewthread | post
Discussion Overview
groupphp-general-es @
categoriesphp
postedNov 25, '08 at 12:51p
activeNov 26, '08 at 12:28p
posts6
users4
websitephp.net

People

Translate

site design / logo © 2022 Grokbase