[geeklog-devel] Bitwise SQL for ACL checks

Trinity trinity93 at gmail.com
Tue May 20 22:30:25 EDT 2008


why not use unix style 3 digit number
chmod 666 etc etc

On Tue, May 20, 2008 at 5:46 PM, Tony Bibbs <tony at tonybibbs.com> wrote:
> DB2 and Oracle only support it with UDF's.  e.g. in ORACLE  you'd use the BITAND function.
>
> Hadn't thought about converting it to a string.  NonthelessI think we're OK.  Apparently I just need to post it so-as to make sure I'm not doing anything *really* stupid.
>
> --Tony
>
> ----- Original Message ----
> From: Joe Mucchiello <joe at ThrowingDice.com>
> To: Geeklog Development <geeklog-devel at lists.geeklog.net>
> Sent: Tuesday, May 20, 2008 5:22:22 PM
> Subject: Re: [geeklog-devel] Bitwise SQL for ACL checks
>
> I do believe Oracle and DB2 support bitwise ops. What databases does
> that leave?
>
> Worst case, you could convert ACLs to binary strings and then use
> substr to find the bits. So an ACL of 35 (32 | 2 | 1) would end up in
> the database as 00010011 (or 0000000000010011). The "rights & 1"
> where clause becomes "substring(rights, 7, 1) = 1"
>
> Or you can use letters:
>
> $db_rights = 'ABCDEFGHIJ';  <-- index this array using "log(2)
> targetright" So ACL 16 becomes 'D'
> So you create function that turn "10011" into EBA and store the
> string EBA in the rights column.
> Checking for access becomes "rights like '%A%' ".
>
> There's always another way to store the data. But since GL2 uses
> named queries, under the hood it can be as convoluted as necessary.
>
>   Joe
>
>
> At 05:51 PM 5/20/2008, Tony Bibbs wrote:
>>K, done some more homework and I guess I've answered my own
>>questions.  Right now MySQL, SQL Server and Postgres all support &
>>and | for bitwise math.  I'll use that for now in our named queries.
>>
>>Moving forward our named query implementation will need to include a
>>dbms="mysql" attribute in the XML and then you can tweak individual
>>named queries manually.  I can do this later...besides we have zero
>>support for Oracle, DB2, etc now anyway so adding later shouldn't be
>>a problem with this approach.
>>
>>Still chime in, though, if you have a question or suggestion.
>>
>>--Tony
>>
>>----- Original Message ----
>>From: Tony Bibbs <tony at tonybibbs.com>
>>To: geeklog-devel at lists.geeklog.net
>>Sent: Tuesday, May 20, 2008 4:36:08 PM
>>Subject: [geeklog-devel] Bitwise SQL for ACL checks
>>
>>Apparently Bitwise math is not part of the SQL92 standard.  Given we
>>are using bitwise operations for ACL's checks in GL2 this is a
>>problem because we store the ACL values in a table called
>>gl2_item_acl.  Even worse, we not only store the ACL but we also
>>allow for inverse ACL's which essentially implements both a
>>blacklist and whitelist for access to an item.
>>
>>My brain isn't equipped at the moment to deal with all the possible
>>solutions so I'm asking for help as this is one of the last things I
>>need to knock out for the first GL2 alpha.
>>
>>We have a few constants for ACL check so to illustrate:
>>
>>ACL_READ = 1
>>ACL_LIST = 2
>>
>>Thus a sample *mysql* query for matching the above ACL's would be:
>>
>>SELECT gl2_item.*
>>FROM gl2_item, gl2_item_acl
>>WHERE  gl2_item_acl.item_id = gl2_item.item_id
>>AND (rights & 1)
>>OR (rights & 2)
>>
>>Given the &,|, etc aren't SQL92 standard is there another way to
>>construct the SQL in a DBMS friendly manner?  For reference you may
>>want to read this first:
>>
>>http://wiki.geeklog.net/wiki/index.php/Using_ACLsG2
>>
>>--Tony
>>
>>
>>_______________________________________________
>>geeklog-devel mailing list
>>geeklog-devel at lists.geeklog.net
>>http://eight.pairlist.net/mailman/listinfo/geeklog-devel
>>
>>
>>
>>_______________________________________________
>>geeklog-devel mailing list
>>geeklog-devel at lists.geeklog.net
>>http://eight.pairlist.net/mailman/listinfo/geeklog-devel
>
> ----
> Joe Mucchiello
> Throwing Dice Games
> http://www.throwingdice.com
>
> _______________________________________________
> geeklog-devel mailing list
> geeklog-devel at lists.geeklog.net
> http://eight.pairlist.net/mailman/listinfo/geeklog-devel
>
>
>
> _______________________________________________
> geeklog-devel mailing list
> geeklog-devel at lists.geeklog.net
> http://eight.pairlist.net/mailman/listinfo/geeklog-devel
>



More information about the geeklog-devel mailing list