setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); $pdo->exec("DROP TABLE IF EXISTS wevads_permissions CASCADE"); $pdo->exec("DROP TABLE IF EXISTS wevads_users CASCADE"); $pdo->exec("DROP TABLE IF EXISTS wevads_roles CASCADE"); $pdo->exec("DROP TABLE IF EXISTS wevads_menus CASCADE"); $pdo->exec("CREATE TABLE wevads_roles(id SERIAL PRIMARY KEY,role_name VARCHAR(100) UNIQUE,description TEXT,is_system BOOLEAN DEFAULT false)"); $pdo->exec("CREATE TABLE wevads_users(id SERIAL PRIMARY KEY,username VARCHAR(100) UNIQUE,password_hash VARCHAR(255),email VARCHAR(255),full_name VARCHAR(255),role VARCHAR(50) DEFAULT 'user',is_active BOOLEAN DEFAULT true,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP)"); $pdo->exec("CREATE TABLE wevads_menus(id SERIAL PRIMARY KEY,menu_key VARCHAR(100) UNIQUE,menu_name VARCHAR(255),menu_url VARCHAR(500),menu_order INT DEFAULT 0)"); $pdo->exec("CREATE TABLE wevads_permissions(id SERIAL PRIMARY KEY,role_id INT,menu_id INT,can_view BOOLEAN DEFAULT false,can_edit BOOLEAN DEFAULT false,can_delete BOOLEAN DEFAULT false,UNIQUE(role_id,menu_id))"); $pdo->exec("INSERT INTO wevads_roles(role_name,description,is_system) VALUES('CEO','Full access',true),('Admin','Administration',true),('Manager','Management',false),('Operator','Operations',false),('Viewer','View only',false)"); $msg=''; if($_POST){ $act=$_POST['action']??''; if($act=='add_user'){$pdo->prepare("INSERT INTO wevads_users(username,password_hash,email,full_name,role) VALUES(?,?,?,?,?)")->execute([$_POST['username'],password_hash($_POST['password'],PASSWORD_DEFAULT),$_POST['email'],$_POST['full_name'],$_POST['role']]);$msg='User created!';} if($act=='add_role'){$pdo->prepare("INSERT INTO wevads_roles(role_name,description,is_system) VALUES(?,?,false)")->execute([$_POST['role_name'],$_POST['description']]);$msg='Role created!';} if($act=='del_user'){$pdo->prepare("DELETE FROM wevads_users WHERE id=?")->execute([$_POST['id']]);$msg='User deleted!';} if($act=='save_perms'){$pdo->prepare("DELETE FROM wevads_permissions WHERE role_id=?")->execute([$_POST['role_id']]);foreach($_POST['perm']??[] as $mid=>$p){$pdo->prepare("INSERT INTO wevads_permissions(role_id,menu_id,can_view,can_edit,can_delete) VALUES(?,?,?,?,?)")->execute([$_POST['role_id'],$mid,isset($p['v']),isset($p['e']),isset($p['d'])]);} $msg='Permissions saved!';} } $roles=$pdo->query("SELECT * FROM wevads_roles ORDER BY is_system DESC,role_name")->fetchAll(PDO::FETCH_ASSOC); $users=$pdo->query("SELECT * FROM wevads_users ORDER BY id DESC")->fetchAll(PDO::FETCH_ASSOC); $menus=$pdo->query("SELECT * FROM wevads_menus ORDER BY menu_order")->fetchAll(PDO::FETCH_ASSOC); $sel=$_GET['role']??($roles[0]['id']??0); $perms=[];foreach($pdo->query("SELECT * FROM wevads_permissions WHERE role_id=$sel")->fetchAll(PDO::FETCH_ASSOC) as $p)$perms[$p['menu_id']]=$p; ?>Permissions

Admin Permissions

Roles

Menu Permissions

MenuViewEditDelete
>>>
No menus defined

New User

Users

UserEmailRoleActions

No users

New Role

Existing Roles

System