seedproject-web/api/public/models/login_model.php
Carlos Arias f41fa652ac fix: repair the fresh-clone flow — track api/public + app/public, fix installer schema
Three bugs found deploying a fresh clone to seedproject.com, each fatal
to the documented "spin up a new site" flow:

- .gitignore: the unanchored `public/` pattern (meant for the root build
  output) also ignored api/public/ (the framework's front controller,
  controllers, models, views) and app/public/ (theme static assets:
  fonts, avatar placeholder). Neither was ever committed, so every fresh
  clone 500'd on all /api routes and 404'd on theme assets. Anchor the
  pattern to /public/ and commit both directories.

- api/install/dump.sql: stray `CREATE DATABASE ochenta80_db123` (SQLyog
  export artifact) aborted `php console app:install` for any
  non-privileged DB user. The schema must import into whatever database
  the installer connects to.

- PluginManager::boot() queries sp_plugins on every request, but no
  shipped schema creates it — even a successful install 500'd on every
  endpoint. Add migration 002_create_sp_plugins.sql matching the columns
  PluginManager reads/writes.

Also empty api/system/errors.json, which shipped with stale error logs
from an unrelated project.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C3JqxTe7TKaR7xufcMr7Ds
2026-07-05 00:15:55 +00:00

74 lines
No EOL
2.2 KiB
PHP

<?php
class Login_Model extends Model
{
public function __construct()
{
parent::__construct();
}
/*
This is basic authentication level for log in. However we need to enhance this a bit.
If User Logged then redirect to User screen
if Admin Logged then redirect to Admin Screen
If Agency Logged then redirect to Agency screen.
*/
public function run()
{
$sth = $this->db->prepare("SELECT user_id, username, role_id FROM users WHERE
username = :username AND password = :password");
$sth->execute(array(
':username' => $_POST['username'],
':password' => Hash::create('sha256', $_POST['password'], HASH_PASSWORD_KEY)
));
$data = $sth->fetch();
$count = $sth->rowCount();
if ($count > 0) {
// login
Session::init();
Session::pSet('UserProfile', 'roleId', $data['role_id']);
Session::pSet('UserProfile', 'loggedIn', true);
Session::pSet('UserProfile', 'userId', $data['user_id']);
$sql = "SELECT t2.perm_controller,t2.perm_action FROM role_perm as t1
JOIN permissions as t2 ON t1.perm_id = t2.perm_id
WHERE t1.role_id = :role_id";
$permission = array();
$permission = $this->db->select($sql, array(':role_id' => $data['role_id']));
Session::set('permission', $permission);
// This is a bit annoying to have it hard coded but its good enough for now.
// This will set the specific redirects for the access levels Business, Client & User there's only 3 screens with sub levels of permissions.
switch($data['role_id']) {
# Business
case '1' : // Administrator
case '2' : // Marketing
header('location: /admin');
break;
# Client
case '4' : // Agency
header('location: /dashboard');
break;
#End User
case '6' : // Users
header('location: /dashboard');
break;
}
} else {
header('location: ../login');
}
}
}