1. Go to this page and download the library: Download n0nag0n/fatfree-permissions library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
n0nag0n / fatfree-permissions example snippets
// bootstrap code
$f3 = Base::instance();
// some code
// then you probably have something that tells you who the current role is of the person
// likely you have something like $f3->get('SESSION.user.role'); which defines this
// after someone logs in, otherwise they will have a 'guest' or 'public' role.
$current_role = 'admin';
// setup permissions
$Permissions = \n0nag0n\Permissions::instance($current_role);
$Permissions->defineRule('logged_in', function(Base $f3, $current_role) {
return $current_role !== 'guest';
});
// You'll likely want to attach to this the hive
$f3->set('Permissions', $Permissions);
// or you can just call it on it's own cause it extends itself
// \n0nag0n\Permissions::instance()->can('somePermission');
$f3->run();
public function getOrder(Base $f3, array $args = []) {
// check if the user is logged in
if (!$f3->get('Permissions')->is('logged_in')) {
// if not, redirect them to the login page
$f3->reroute('/login');
}
// otherwise, show them the order page
// ...
}
// bootstrap code
$f3 = Base::instance();
$current_role = 'manager';
// setup permissions in a CRUD like context
$Permissions = \n0nag0n\Permissions::instance($current_role);
// additionally you can inject additional dependencies into the closure/class->method
$Permissions->defineRule('order', function(Base $f3, $current_role, My_Dependency $My_Dependency = null) {
$allowed_permissions = [ 'read' ]; // everyone can view an order
if($current_role === 'manager' && $My_Dependency->something === 'something') {
$allowed_permissions[] = 'create'; // managers can create orders
}
$some_special_toggle_from_db = $f3->get('DB')->exec('SELECT some_special_toggle FROM settings WHERE id = ?', [ $f3->get('SESSION.user_id') ])[0]['some_special_toggle'];
if($some_special_toggle_from_db) {
$allowed_permissions[] = 'update'; // if the user has a special toggle, they can update orders
}
if($current_role === 'admin') {
$allowed_permissions[] = 'delete'; // admins can delete orders
}
return $allowed_permissions;
});
// You'll likely want to attach to this the hive
$f3->set('Permissions', $Permissions);
$f3->run();
public function deleteOrder(Base $f3, array $args = []) {
$My_Dependency = new My_Dependency('something');
// check if the user can delete an order
// notice where you inject the dependency
if (!$f3->get('Permissions')->can('order.delete', $My_Dependency)) {
// if not, redirect them to the orders page gracefully
$f3->reroute('/orders');
}
// otherwise, delete the order page
// ...
}
namespace MyApp;
class Permissions {
public function order(Base $f3, string $current_role, My_Dependency $My_Dependency = null) {
// ... code
}
}
// bootstrap code
$Permissions = \n0nag0n\Permissions::instance($current_role);
$Permissions->defineRule('order', 'MyApp\Permissions->order');
// myapp/Permissions.php
namespace MyApp;
class Permissions {
public function order(Base $f3, string $current_role) {
$allowed_permissions = [ 'read' ]; // everyone can view an order
if($current_role === 'manager') {
$allowed_permissions[] = 'create'; // managers can create orders
}
$some_special_toggle_from_db = $f3->get('DB')->exec('SELECT some_special_toggle FROM settings WHERE id = ?', [ $f3->get('SESSION.user_id') ])[0]['some_special_toggle'];
if($some_special_toggle_from_db) {
$allowed_permissions[] = 'update'; // if the user has a special toggle, they can update orders
}
if($current_role === 'admin') {
$allowed_permissions[] = 'delete'; // admins can delete orders
}
return $allowed_permissions;
}
}
$Permissions = \n0nag0n\Permissions::instance($current_role);
$Permissions->defineRulesFromClassMethods(MyApp\Permissions::class, 3600); // 3600 is how many seconds to cache this for. Leave this off to not use caching
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.