All pastes #610789 Raw Edit

class

public php v1 · immutable
·published 2007-07-09 17:14 UTC
rendered paste body
<?php/*********************************************************************************************************************************Copyright (C) 2003  Keith GangerThis program is free software; you can redistribute it and/ormodify it under the terms of the GNU General Public Licenseas published by the Free Software Foundation; either version 2of the License, or any later version.This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; without even the implied warranty ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See theGNU General Public License for more details.You should have received a copy of the GNU General Public Licensealong with this program; if not, write to the Free SoftwareFoundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.You can find more information about GPL licence at:http://www.gnu.org/licenses/gpl.html********************************************************************************************************************************//** *This class uses a bit mask to represent user permissions.   *This will allow you to store a singe integer representing a users permission set.  *You can then covert this integer back into an associative array with boolean  *values showing the users permission set. *@author      Keith Ganger <ganger2@adelphia.net> * @version     1.0 * @since       March 3 2004 */class permissions{    /**     * This array is used to represent the users permission in usable format.       *You can change remove or add valuesto suit your needs.       *Just ensure that each element defaults to false. Once you have started storing     *users permsisions a change to the order of this array will cause the      *permissions to be incorectly interpreted.       * @type Associtive array     */    private $permissions = array();    /**     *This function will use an integer bitmask(as created by toBitmask())     *to populate the class vaiable     *$this->permissions with the users permissions as boolean values.      *@param int $bitmask an integer representation of the users permisions.      *This integer is created by toBitmask();     *@return an associatve array with the users permissions.      */    public function getPermissions($bitMask = 0)    {        /*        *The following explains how this code works.         *        *This table shows how bitmasks will represent a particular permission.        *element bin number -- 2^i -- decimal equiv        *read	 00000001   -- 2^0 -- 1        *write   00000010   -- 2^1 -- 2        *delete  00000100   -- 2^2 -- 4        *        *        *        *The following code block loops through the permissions it uses a bitwise AND(&)        *along with the terinary operator to assign the permissions.        *You may want to visit the documentation at www.php.net on the pow function,         *the terinary operator, and the bitwise AND(&).         *When using the bitwise AND(&) all bits that are set in both $bitMask and the         *return value of pow(2($i) are set to 1.        *        *For this example refer to the above table          *A user with read and delete permissions would be represented as 00000101         *which would be an integer bitmask of 5        *when this code is executed the following would happen.         *The bitmask of 5 would be passed into the function         *so $bitmask is set to 5 or in binary(00000101).         *The first time through the loop the function pow(2,0) returns 1 (00000001)        *the bitwise AND(&) then compares        *(00000001) to (00000101) and returns 00000001 this is not equal to 0         *so the first element in the array "read" is set to true.         *        *The second time through the loop the function pow(2,1) returns 2 (00000010)         *the bitwise AND(&) then compares        *(00000010) to (00000101) and returns 00000000 this is equal to 0         *so the second element in the array "write" is set to false.        *        **The second time through the loop the function pow(2,2) returns 4 (00000100)        *the bitwise AND(&) then compares        *(00000100) to (00000101) and returns 00000100 this is 4 and is not equal to 0        *so the third element in the array "delete" is set to false.        *        *The code will loop through the remaining elements setting all of them to false.        */        $i = 0;        foreach ($this->permissions as $key => $value)        {            $this->permissions[$key] = (($bitMask & pow(2, $i)) != 0) ? true:false;            //uncomment the next line if you would like to see what is happening.            //echo $key . " i= ".strval($i)." power=" . strval(pow(2,$i)). "bitwise & = " . strval($bitMask & pow(2,$i))."<br>";            $i++;        }        return $this->permissions;    }    /**This function will create and return and integer bitmask based on the permission values set in    *the class variable $permissions. To use you would want to set the fields in $permissions to true for the permissions you want to grant.     *Then call toBitmask() and store the integer value.  Later you can pass that integer into getPermissions() to convert it back to an assoicative     *array.     *@return int an integer bitmask represeting the users permission set.     */    public function toBitMask()    {        $bitmask = 0;        $i = 0;        foreach ($this->permissions as $key => $value)        {            if ($value)            {                $bitmask += pow(2, $i);            }            $i++;        }        return $bitmask;    }}?>