Files
grocy/controllers/Users/User.php

129 lines
2.8 KiB
PHP
Raw Normal View History

<?php
namespace Grocy\Controllers\Users;
use Grocy\Services\DatabaseService;
use LessQL\Result;
class User
{
const PERMISSION_ADMIN = 'ADMIN';
2020-08-31 20:40:31 +02:00
const PERMISSION_BATTERIES = 'BATTERIES';
2021-07-03 17:46:47 +02:00
2020-08-31 20:40:31 +02:00
const PERMISSION_BATTERIES_TRACK_CHARGE_CYCLE = 'BATTERIES_TRACK_CHARGE_CYCLE';
2021-07-03 17:46:47 +02:00
2020-08-31 20:40:31 +02:00
const PERMISSION_BATTERIES_UNDO_CHARGE_CYCLE = 'BATTERIES_UNDO_CHARGE_CYCLE';
const PERMISSION_CALENDAR = 'CALENDAR';
const PERMISSION_CHORES = 'CHORES';
2021-07-03 17:46:47 +02:00
2020-08-31 20:40:31 +02:00
const PERMISSION_CHORE_TRACK_EXECUTION = 'CHORE_TRACK_EXECUTION';
2021-07-03 17:46:47 +02:00
2020-08-31 20:40:31 +02:00
const PERMISSION_CHORE_UNDO_EXECUTION = 'CHORE_UNDO_EXECUTION';
const PERMISSION_EQUIPMENT = 'EQUIPMENT';
const PERMISSION_MASTER_DATA_EDIT = 'MASTER_DATA_EDIT';
const PERMISSION_RECIPES = 'RECIPES';
2021-07-03 17:46:47 +02:00
const PERMISSION_RECIPES_MEALPLAN = 'RECIPES_MEALPLAN';
const PERMISSION_SHOPPINGLIST = 'SHOPPINGLIST';
2021-07-03 17:46:47 +02:00
const PERMISSION_SHOPPINGLIST_ITEMS_ADD = 'SHOPPINGLIST_ITEMS_ADD';
2021-07-03 17:46:47 +02:00
const PERMISSION_SHOPPINGLIST_ITEMS_DELETE = 'SHOPPINGLIST_ITEMS_DELETE';
2020-08-31 20:40:31 +02:00
const PERMISSION_STOCK = 'STOCK';
2021-07-03 17:46:47 +02:00
2020-08-31 20:40:31 +02:00
const PERMISSION_STOCK_CONSUME = 'STOCK_CONSUME';
2021-07-03 17:46:47 +02:00
2020-08-31 20:40:31 +02:00
const PERMISSION_STOCK_EDIT = 'STOCK_EDIT';
2021-07-03 17:46:47 +02:00
2020-08-31 20:40:31 +02:00
const PERMISSION_STOCK_INVENTORY = 'STOCK_INVENTORY';
2021-07-03 17:46:47 +02:00
2020-08-31 20:40:31 +02:00
const PERMISSION_STOCK_OPEN = 'STOCK_OPEN';
2021-07-03 17:46:47 +02:00
2020-08-31 20:40:31 +02:00
const PERMISSION_STOCK_PURCHASE = 'STOCK_PURCHASE';
2021-07-03 17:46:47 +02:00
2020-08-31 20:40:31 +02:00
const PERMISSION_STOCK_TRANSFER = 'STOCK_TRANSFER';
const PERMISSION_TASKS = 'TASKS';
2021-07-03 17:46:47 +02:00
const PERMISSION_TASKS_MARK_COMPLETED = 'TASKS_MARK_COMPLETED';
2021-07-03 17:46:47 +02:00
2020-08-31 20:40:31 +02:00
const PERMISSION_TASKS_UNDO_EXECUTION = 'TASKS_UNDO_EXECUTION';
2020-08-31 20:40:31 +02:00
const PERMISSION_USERS = 'USERS';
2021-07-03 17:46:47 +02:00
2020-08-31 20:40:31 +02:00
const PERMISSION_USERS_CREATE = 'USERS_CREATE';
2021-07-03 17:46:47 +02:00
2020-08-31 20:40:31 +02:00
const PERMISSION_USERS_EDIT = 'USERS_EDIT';
2021-07-03 17:46:47 +02:00
2020-08-31 20:40:31 +02:00
const PERMISSION_USERS_EDIT_SELF = 'USERS_EDIT_SELF';
2021-07-03 17:46:47 +02:00
2020-08-31 20:40:31 +02:00
const PERMISSION_USERS_READ = 'USERS_READ';
public function __construct()
{
$this->db = DatabaseService::getInstance()->GetDbConnection();
}
/**
* @var \LessQL\Database|null
*/
protected $db;
2020-08-31 20:40:31 +02:00
public static function PermissionList()
{
2020-08-31 20:40:31 +02:00
$user = new self();
return $user->getPermissionList();
}
2020-09-01 21:29:47 +02:00
public static function checkPermission($request, string ...$permissions): void
{
2020-08-31 20:40:31 +02:00
$user = new self();
foreach ($permissions as $permission)
{
if (!$user->hasPermission($permission))
{
throw new PermissionMissingException($request, $permission);
}
}
}
public function getPermissionList()
{
return $this->db->uihelper_user_permissions()->where('user_id', GROCY_USER_ID);
}
2020-08-31 20:40:31 +02:00
public function hasPermission(string $permission): bool
{
2020-08-31 20:40:31 +02:00
return $this->getPermissions()->where('permission_name', $permission)->fetch() !== null;
}
2020-09-01 21:29:47 +02:00
public static function hasPermissions(string ...$permissions)
2020-08-31 20:40:31 +02:00
{
$user = new self();
foreach ($permissions as $permission)
{
if (!$user->hasPermission($permission))
{
return false;
}
}
2020-08-31 20:40:31 +02:00
return true;
}
2020-08-31 20:40:31 +02:00
protected function getPermissions(): Result
{
2020-08-31 20:40:31 +02:00
return $this->db->user_permissions_resolved()->where('user_id', GROCY_USER_ID);
}
}