Skip to content

Instantly share code, notes, and snippets.

@eseyden
Last active August 29, 2015 14:00
Show Gist options
  • Save eseyden/11264316 to your computer and use it in GitHub Desktop.
Save eseyden/11264316 to your computer and use it in GitHub Desktop.
Permissions and Roles

#Permissions and Roles

<?php
class adminRole {
}
<?php
class basePermission {
protected $allowableRoles = array();
function __construct(){
$this->addRole(new adminRole());
$this->addRole(new publicRole());
$this->addRole(new userRole());
}
function addRole($role){
$found = false;
foreach($this->allowableRoles as $key => $allowableRole){
if(get_class($allowableRole) === get_class($role)){
$this->allowableRoles[$key] = $role;
$found = true;
}
}
if(!$found){
$this->allowableRoles[] = $role;
}
}
function checkAccess(User $user){
$has_access = false;
foreach($this->allowableRoles as $allowableRole){
if($allowableRole->memberOf($user)){
$has_access = true;
break;
}
}
return $has_access;
}
}
<?php
class baseRole{
function memberOf($user){
/*
determine membership somehow
*/
}
}
<?php
class editThingsPermission extends basePermission{
function __construct(){
$this->allowableRoles = array();
$this->addRole(new adminRole());
}
}
<?php
class publicRole extends baseRole{
function checkAccess($user){
return true;
}
}
<?php
/**
* Created by PhpStorm.
* User: eseyden
* Date: 4/24/14
* Time: 11:56 AM
*/
class User {
}
<?php
class userRole extends baseRole{
public function checkAccess(User $user){
foreach($user->adGroups as $adGroup){
if($adGroup == 'App Users') return true;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment