init
This commit is contained in:
@@ -0,0 +1,2 @@
|
|||||||
|
.env
|
||||||
|
mariadb_data
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
services:
|
||||||
|
mariadb:
|
||||||
|
image: docker.io/library/mariadb:latest
|
||||||
|
container_name: mariadb-db
|
||||||
|
restart: unless-stopped
|
||||||
|
ports:
|
||||||
|
- "3306:3306"
|
||||||
|
environment:
|
||||||
|
MARIADB_ROOT_PASSWORD: secure_root_password
|
||||||
|
MARIADB_DATABASE: my_database
|
||||||
|
MARIADB_USER: db_user
|
||||||
|
MARIADB_PASSWORD: secure_user_password
|
||||||
|
volumes:
|
||||||
|
- ./mariadb_data:/var/lib/mysql:Z
|
||||||
|
networks:
|
||||||
|
- db_network
|
||||||
|
|
||||||
|
phpmyadmin:
|
||||||
|
image: docker.io/library/phpmyadmin:latest
|
||||||
|
container_name: phpmyadmin-web
|
||||||
|
restart: unless-stopped
|
||||||
|
ports:
|
||||||
|
- "8080:80"
|
||||||
|
environment:
|
||||||
|
PMA_HOST: mariadb
|
||||||
|
PMA_PORT: 3306
|
||||||
|
UPLOAD_LIMIT: 64M
|
||||||
|
networks:
|
||||||
|
- db_network
|
||||||
|
depends_on:
|
||||||
|
- mariadb
|
||||||
|
|
||||||
|
networks:
|
||||||
|
db_network:
|
||||||
|
driver: bridge
|
||||||
|
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
include './connection.php';
|
||||||
|
include './user.php';
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
<?php
|
||||||
|
$servername = $_ENV['DB_SERVERNAME'];
|
||||||
|
$username = $_ENV['DB_USERNAME'];
|
||||||
|
$password = $_ENV['DB_PASS'];
|
||||||
|
$dbname = $_ENV['DB_NAME'];
|
||||||
|
|
||||||
|
try {
|
||||||
|
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
|
||||||
|
// set the PDO error mode to exception
|
||||||
|
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
|
||||||
|
$conn->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
|
||||||
|
$conn->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
|
||||||
|
} catch(PDOException $e) {
|
||||||
|
echo "Connection failed: " . $e->getMessage();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
<?php
|
||||||
|
include_once './connection.php';
|
||||||
|
|
||||||
|
|
||||||
|
function hasPermission(int $userId, string $resourceName, string $actionName): bool
|
||||||
|
{
|
||||||
|
global $conn;
|
||||||
|
$sql = "
|
||||||
|
SELECT COUNT(*) AS permission_count
|
||||||
|
FROM users u
|
||||||
|
JOIN group_permissions gp ON gp.group_id = u.group_id
|
||||||
|
JOIN resources r ON r.resource_id = gp.resource_id
|
||||||
|
JOIN actions a ON a.action_id = gp.action_id
|
||||||
|
WHERE u.user_id = :userId
|
||||||
|
AND r.name = :resourceName
|
||||||
|
AND a.name = :actionName
|
||||||
|
";
|
||||||
|
|
||||||
|
$stmt = $conn->prepare($sql);
|
||||||
|
$stmt->execute([
|
||||||
|
':userId' => $userId,
|
||||||
|
':resourceName' => $resourceName,
|
||||||
|
':actionName' => $actionName,
|
||||||
|
]);
|
||||||
|
|
||||||
|
$result = $stmt->fetch();
|
||||||
|
|
||||||
|
return ((int) $result['permission_count']) > 0;
|
||||||
|
}
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
-- Active: 1788811699247@@127.0.0.1@3306@my_database
|
||||||
|
-- 1. Groups (roles) — create first since users references it
|
||||||
|
CREATE TABLE groups (
|
||||||
|
group_id INT PRIMARY KEY AUTO_INCREMENT,
|
||||||
|
name VARCHAR(100) NOT NULL UNIQUE,
|
||||||
|
description VARCHAR(255)
|
||||||
|
);
|
||||||
|
|
||||||
|
-- 2. Users — now with a direct group_id column
|
||||||
|
CREATE TABLE users (
|
||||||
|
user_id INT PRIMARY KEY AUTO_INCREMENT,
|
||||||
|
username VARCHAR(100) NOT NULL UNIQUE,
|
||||||
|
email VARCHAR(255) NOT NULL UNIQUE,
|
||||||
|
group_id INT NULL, -- nullable if a user can exist with no group yet
|
||||||
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
FOREIGN KEY (group_id) REFERENCES groups(group_id) ON DELETE SET NULL
|
||||||
|
);
|
||||||
|
|
||||||
|
-- 3. Resources / modules
|
||||||
|
CREATE TABLE resources (
|
||||||
|
resource_id INT PRIMARY KEY AUTO_INCREMENT,
|
||||||
|
name VARCHAR(100) NOT NULL UNIQUE
|
||||||
|
);
|
||||||
|
|
||||||
|
-- 4. Actions
|
||||||
|
CREATE TABLE actions (
|
||||||
|
action_id INT PRIMARY KEY AUTO_INCREMENT,
|
||||||
|
name VARCHAR(50) NOT NULL UNIQUE
|
||||||
|
);
|
||||||
|
|
||||||
|
-- 5. Group permissions (unchanged)
|
||||||
|
CREATE TABLE group_permissions (
|
||||||
|
group_id INT NOT NULL,
|
||||||
|
resource_id INT NOT NULL,
|
||||||
|
action_id INT NOT NULL,
|
||||||
|
PRIMARY KEY (group_id, resource_id, action_id),
|
||||||
|
FOREIGN KEY (group_id) REFERENCES groups(group_id) ON DELETE CASCADE,
|
||||||
|
FOREIGN KEY (resource_id) REFERENCES resources(resource_id) ON DELETE CASCADE,
|
||||||
|
FOREIGN KEY (action_id) REFERENCES actions(action_id) ON DELETE CASCADE
|
||||||
|
);
|
||||||
Reference in New Issue
Block a user