<?php

function can($menu_url, $action = 'view')
{
    // Jika belum login
    if (!session()->has('role_id'))
        return false;

    $db = \Config\Database::connect();

    // Ambil menu
    $menu = $db->table('menus')
        ->where('url', $menu_url)
        ->where('is_active', 1)
        ->get()
        ->getRow();

    // Jika menu tidak ada
    if (!$menu)
        return false;

    // Ambil permission
    $perm = $db->table('menu_roles')
        ->where('role_id', session('role_id'))
        ->where('menu_id', $menu->id)
        ->get()
        ->getRow();

    // Jika belum di-set haknya
    if (!$perm)
        return false;

    $field = 'can_' . $action;

    // Jika field tidak ada
    if (!isset($perm->$field))
        return false;

    return (bool) $perm->$field;

    function can($permission)
    {
        $perms = session('permissions') ?? [];
        return in_array($permission, $perms);
    }
    function hasPermission($code)
    {
        return in_array($code, session('permissions') ?? []);
    }

}
