Skip to content

Instantly share code, notes, and snippets.

@GregoireHebert
Created May 13, 2015 14:35
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save GregoireHebert/1d0048268db06aee378f to your computer and use it in GitHub Desktop.
Save GregoireHebert/1d0048268db06aee378f to your computer and use it in GitHub Desktop.
<?php
// Security permissions:
$writePost = 1;
$readPost = 2;
$deletePost = 4;
$addUser = 8;
$deleteUser = 16;
// User groups:
$administrator = $writePost | $readPost | $deletePost | $addUser | $deleteUser;
$moderator = $readPost | $deletePost | $deleteUser;
$writer = $writePost | $readPost;
$guest = $readPost;
function checkPermission($user, $permission) {
if($user & $permission) {
return true;
} else {
return false;
}
}
function hasPermission($user, $permission) {
return (($user & $permission) == $permission);
}
if(checkPermission($administrator, $deleteUser)) {
var_dump('administrator can delete user');
} else {
var_dump('administrator cannot delete user');
}
if(checkPermission($guest, $deleteUser)) {
var_dump('guest can delete user');
} else {
var_dump('guest cannot delete user');
}
if(checkPermission($writer, $guest)) {
var_dump('writer has similarity with guest');
}
if(checkPermission($guest, $writer)) {
var_dump('guest has similarity with writer');
}
if(hasPermission($writer, $guest)) {
var_dump('writer is guest');
}
if(hasPermission($guest, $writer)) {
var_dump('guest is writer');
}
if(checkPermission($administrator, $moderator)) {
var_dump('administrator has similarity with moderator');
}
if(checkPermission($moderator, $administrator)) {
var_dump('moderator has similarity with administrator');
}
if(hasPermission($administrator, $moderator)) {
var_dump('administrator is moderator');
}
if(hasPermission($moderator, $administrator)) {
var_dump('moderator is administrator');
}
// display :
// string 'administrator can delete user' (length=29)
// string 'guest cannot delete user' (length=24)
// string 'writer has similarity with guest' (length=32)
// string 'guest has similarity with writer' (length=32)
// string 'writer is guest' (length=15)
// string 'administrator has similarity with moderator' (length=43)
// string 'moderator has similarity with administrator' (length=43)
// string 'administrator is moderator' (length=26)
?>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment