mirror of
https://git.imnavajas.es/jjimenez/safekat.git
synced 2025-07-25 22:52:08 +00:00
Merge branch 'dev/user_roles' into 'main'
Dev/user roles See merge request jjimenez/safekat!1
This commit is contained in:
2014
backups_bbdd/04252023_sk_main.sql
Normal file
2014
backups_bbdd/04252023_sk_main.sql
Normal file
File diff suppressed because it is too large
Load Diff
138
ci4/.env
Normal file
138
ci4/.env
Normal file
@ -0,0 +1,138 @@
|
||||
#--------------------------------------------------------------------
|
||||
# Example Environment Configuration file
|
||||
#
|
||||
# This file can be used as a starting point for your own
|
||||
# custom .env files, and contains most of the possible settings
|
||||
# available in a default install.
|
||||
#
|
||||
# By default, all of the settings are commented out. If you want
|
||||
# to override the setting, you must un-comment it by removing the '#'
|
||||
# at the beginning of the line.
|
||||
#--------------------------------------------------------------------
|
||||
|
||||
#--------------------------------------------------------------------
|
||||
# ENVIRONMENT
|
||||
#--------------------------------------------------------------------
|
||||
|
||||
CI_ENVIRONMENT = development
|
||||
# CI_ENVIRONMENT = testing
|
||||
# CI_ENVIRONMENT = production
|
||||
|
||||
#--------------------------------------------------------------------
|
||||
# APP
|
||||
#--------------------------------------------------------------------
|
||||
|
||||
app.baseURL = 'http://safekat.test'
|
||||
# app.forceGlobalSecureRequests = false
|
||||
|
||||
# app.sessionDriver = 'CodeIgniter\Session\Handlers\FileHandler'
|
||||
# app.sessionCookieName = 'ci_session'
|
||||
# app.sessionExpiration = 7200
|
||||
# app.sessionSavePath = null
|
||||
# app.sessionMatchIP = false
|
||||
# app.sessionTimeToUpdate = 300
|
||||
# app.sessionRegenerateDestroy = false
|
||||
|
||||
# app.CSPEnabled = false
|
||||
|
||||
#--------------------------------------------------------------------
|
||||
# DATABASE
|
||||
#--------------------------------------------------------------------
|
||||
|
||||
database.default.hostname = localhost
|
||||
database.default.database = sk_main
|
||||
database.default.username = sk_main
|
||||
database.default.password = 61tv&G1Zf^XY
|
||||
database.default.DBDriver = MySQLi
|
||||
database.default.DBPrefix =
|
||||
database.default.dump =
|
||||
|
||||
# database.tests.hostname = localhost
|
||||
# database.tests.database = ci4
|
||||
# database.tests.username = root
|
||||
# database.tests.password = root
|
||||
# database.tests.DBDriver = MySQLi
|
||||
# database.tests.DBPrefix =
|
||||
|
||||
#--------------------------------------------------------------------
|
||||
# CONTENT SECURITY POLICY
|
||||
#--------------------------------------------------------------------
|
||||
|
||||
# contentsecuritypolicy.reportOnly = false
|
||||
# contentsecuritypolicy.defaultSrc = 'none'
|
||||
# contentsecuritypolicy.scriptSrc = 'self'
|
||||
# contentsecuritypolicy.styleSrc = 'self'
|
||||
# contentsecuritypolicy.imageSrc = 'self'
|
||||
# contentsecuritypolicy.base_uri = null
|
||||
# contentsecuritypolicy.childSrc = null
|
||||
# contentsecuritypolicy.connectSrc = 'self'
|
||||
# contentsecuritypolicy.fontSrc = null
|
||||
# contentsecuritypolicy.formAction = null
|
||||
# contentsecuritypolicy.frameAncestors = null
|
||||
# contentsecuritypolicy.frameSrc = null
|
||||
# contentsecuritypolicy.mediaSrc = null
|
||||
# contentsecuritypolicy.objectSrc = null
|
||||
# contentsecuritypolicy.pluginTypes = null
|
||||
# contentsecuritypolicy.reportURI = null
|
||||
# contentsecuritypolicy.sandbox = false
|
||||
# contentsecuritypolicy.upgradeInsecureRequests = false
|
||||
|
||||
#--------------------------------------------------------------------
|
||||
# COOKIE
|
||||
#--------------------------------------------------------------------
|
||||
|
||||
# cookie.prefix = ''
|
||||
# cookie.expires = 0
|
||||
# cookie.path = '/'
|
||||
# cookie.domain = ''
|
||||
# cookie.secure = false
|
||||
# cookie.httponly = false
|
||||
# cookie.samesite = 'Lax'
|
||||
# cookie.raw = false
|
||||
|
||||
#--------------------------------------------------------------------
|
||||
# ENCRYPTION
|
||||
#--------------------------------------------------------------------
|
||||
|
||||
# encryption.key =
|
||||
# encryption.driver = OpenSSL
|
||||
# encryption.blockSize = 16
|
||||
# encryption.digest = SHA512
|
||||
|
||||
#--------------------------------------------------------------------
|
||||
# HONEYPOT
|
||||
#--------------------------------------------------------------------
|
||||
|
||||
# honeypot.hidden = 'true'
|
||||
# honeypot.label = 'Fill This Field'
|
||||
# honeypot.name = 'honeypot'
|
||||
# honeypot.template = '<label>{label}</label><input type="text" name="{name}" value=""/>'
|
||||
# honeypot.container = '<div style="display:none">{template}</div>'
|
||||
|
||||
#--------------------------------------------------------------------
|
||||
# SECURITY
|
||||
#--------------------------------------------------------------------
|
||||
|
||||
security.tokenName = 'webguard_token'
|
||||
security.headerName = 'X-CSRF-TOKEN'
|
||||
security.cookieName = 'webguard_cookie'
|
||||
security.expires = 7200
|
||||
security.regenerate = true
|
||||
security.redirect = true
|
||||
security.samesite = 'Lax'
|
||||
|
||||
#--------------------------------------------------------------------
|
||||
# LOGGER
|
||||
#--------------------------------------------------------------------
|
||||
|
||||
# logger.threshold = 4
|
||||
|
||||
#--------------------------------------------------------------------
|
||||
# CUSTOMIZED
|
||||
#--------------------------------------------------------------------
|
||||
|
||||
theme.path = 'themes/backend/focus2/'
|
||||
themef.path = 'themes/frontend/tivo/'
|
||||
api.return = 'json'
|
||||
demo.mode = false
|
||||
purchase.code = '1234'
|
||||
2
ci4/.gitignore
vendored
2
ci4/.gitignore
vendored
@ -41,7 +41,7 @@ $RECYCLE.BIN/
|
||||
#-------------------------
|
||||
# These should never be under version control,
|
||||
# as it poses a security risk.
|
||||
.env
|
||||
#.env
|
||||
.vagrant
|
||||
Vagrantfile
|
||||
|
||||
|
||||
@ -56,24 +56,27 @@ class Ajax extends ResourceController
|
||||
|
||||
//Total number of records without filtering
|
||||
$totalRecords = $this->user_model->select('id_user')
|
||||
->join('auth_user_group','auth_user_group.token = auth_user.group')
|
||||
//->join('auth_user_group','auth_user_group.token = auth_user.group')
|
||||
->countAllResults();
|
||||
|
||||
//Total number of records with filtering
|
||||
$totalRecordwithFilter = $this->user_model->select('id_user')
|
||||
->join('auth_user_group','auth_user_group.token = auth_user.group')
|
||||
//->join('auth_user_group','auth_user_group.token = auth_user.group')
|
||||
->orLike('first_name', $searchValue)
|
||||
->orLike('email', $searchValue)
|
||||
->countAllResults();
|
||||
|
||||
//Fetch records
|
||||
$records = $this->user_model->select('auth_user.*,auth_user_group.title')
|
||||
->join('auth_user_group','auth_user_group.token = auth_user.group')
|
||||
//$records = $this->user_model->select('auth_user.*,auth_user_group.title')
|
||||
$records = $this->user_model->select('auth_user.*')
|
||||
//->join('auth_user_group','auth_user_group.token = auth_user.group')
|
||||
->orLike('first_name', $searchValue)
|
||||
->orLike('email', $searchValue)
|
||||
->orderBy($columnName,$columnSortOrder)
|
||||
->findAll($rowperpage, $start);
|
||||
|
||||
|
||||
|
||||
//Format records
|
||||
foreach ($records as $key => $value){
|
||||
if($records[$key]['email_confirmed'] == 1){
|
||||
@ -96,10 +99,26 @@ class Ajax extends ResourceController
|
||||
//Data records
|
||||
$data = array();
|
||||
foreach($records as $record ){
|
||||
|
||||
$groups_token = $this->group_user_model->select('token_group')
|
||||
->where('token_user',$record['token'])
|
||||
->findAll();
|
||||
|
||||
$groups_names = [];
|
||||
foreach($groups_token as $g_t){
|
||||
$title = $this->group_model->select('title')
|
||||
->where('token',$g_t)
|
||||
->first()['title'];
|
||||
array_push($groups_names, $title);
|
||||
|
||||
}
|
||||
|
||||
$data[] = array(
|
||||
"first_name"=>$record['first_name'],
|
||||
"email"=>$record['email'],
|
||||
"group"=>$record['title'],
|
||||
|
||||
"group"=>$groups_names,//JJO$record['title'],
|
||||
|
||||
"mobile"=>$record['mobile'],
|
||||
"last_access"=>$record['last_access'],
|
||||
"last_ip"=>$record['last_ip'],
|
||||
|
||||
@ -11,6 +11,7 @@ use App\Models\SettingsModel;
|
||||
use App\Models\TemplateModel;
|
||||
use App\Models\UserModel;
|
||||
use App\Models\UserGroupModel;
|
||||
use App\Models\GroupUserModel;
|
||||
|
||||
class login extends BaseController
|
||||
{
|
||||
@ -23,6 +24,7 @@ class login extends BaseController
|
||||
private $template_model;
|
||||
private $confirmation_model;
|
||||
private $integration;
|
||||
private $group_user_model;
|
||||
|
||||
function __construct()
|
||||
{
|
||||
@ -38,6 +40,8 @@ class login extends BaseController
|
||||
// Get Settings
|
||||
$loginAuthFilter = new \App\Filters\LoginAuthFilter();
|
||||
$loginAuthFilter->getSettings();
|
||||
|
||||
$this->group_user_model = new GroupUserModel();
|
||||
}
|
||||
|
||||
public function index()
|
||||
@ -184,17 +188,56 @@ class login extends BaseController
|
||||
}
|
||||
|
||||
// Get access rules
|
||||
$rules = $this->group_model->where('token', $login['group'])->first();
|
||||
#$rules = $this->group_model->where('token', $login['group'])->first();
|
||||
$groups = $this->group_user_model
|
||||
->select('token_group')
|
||||
->where('token_user',$login['token'])->findAll();
|
||||
|
||||
if (sizeof($groups)>1){
|
||||
|
||||
$rules = $this->group_model->select('rules')->where('token',$groups[0])->first()['rules'];
|
||||
$rules = json_decode(html_entity_decode($rules), true);
|
||||
for ($i=1; $i<sizeof($groups); $i++){
|
||||
$temp_rules = $this->group_model->select('rules')->where('token',$groups[$i])->first()['rules'];
|
||||
foreach ($rules as $key => $value){
|
||||
if (array_key_exists($key, json_decode(html_entity_decode($temp_rules), true))){
|
||||
$value2 = json_decode(html_entity_decode($temp_rules), true)[$key];
|
||||
$rules[$key] = array_unique(array_merge($value, $value2));
|
||||
}
|
||||
else{
|
||||
$rules[$key]= $value;
|
||||
}
|
||||
}
|
||||
foreach (json_decode(html_entity_decode($temp_rules), true) as $key2 => $value2){
|
||||
if (!array_key_exists($key2, $rules)){
|
||||
$rules[$key2] = $value2;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else{
|
||||
$rules = $this->group_model->select('rules')->where('token',$groups[0])->first();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
// Save data in session
|
||||
$session->set('id_user', $login['id_user']);
|
||||
$session->set('group', $login['group']);
|
||||
//$session->set('group', $login['group']);
|
||||
$session->set('first_name', $login['first_name']);
|
||||
$session->set('last_name', $login['last_name']);
|
||||
$session->set('email', $login['email']);
|
||||
$session->set('token', $login['token']);
|
||||
$session->set('dashboard', $rules['dashboard']);
|
||||
$session->set('rules', html_entity_decode($rules['rules']));
|
||||
// JJO
|
||||
$dashboard = 'user';
|
||||
foreach ($groups as $group){
|
||||
if($this->group_model->select('dashboard')->where('token',$group)->first()['dashboard'] == 'admin')
|
||||
$dashboard = 'admin';
|
||||
}
|
||||
$session->set('dashboard', $dashboard);
|
||||
|
||||
$session->set('rules', html_entity_decode(json_encode($rules)));
|
||||
$session->set('picture', $login['picture']);
|
||||
$session->set('tfa', $login['tfa']);
|
||||
$session->set('tfa_secret', $login['tfa_secret']);
|
||||
|
||||
@ -3,22 +3,84 @@
|
||||
namespace App\Controllers;
|
||||
|
||||
|
||||
use App\Models\UserModel;
|
||||
use App\Models\UserGroupModel;
|
||||
use App\Models\GroupUserModel;
|
||||
|
||||
class Test extends BaseController
|
||||
{
|
||||
|
||||
private $user_model;
|
||||
private $group_user_model;
|
||||
private $group_model;
|
||||
|
||||
function __construct()
|
||||
{
|
||||
$this->user_model = new UserModel();
|
||||
$this->group_user_model = new GroupUserModel();
|
||||
$this->group_model = new UserGroupModel();
|
||||
}
|
||||
|
||||
public function index()
|
||||
{
|
||||
["id_user"]=>
|
||||
string(1) "1"
|
||||
$test = [
|
||||
"115b5ad39b853084209caf6824224f6b",
|
||||
"fff26488a4249d76a8de5c0426acb8f7",
|
||||
"72f5e898a67bb2fb72b185d9138585b2"];
|
||||
|
||||
echo "Hola";
|
||||
/////////////////////////////////7
|
||||
// Join groups access rules
|
||||
/*$user_token = "a4a60f9f064218b09cf108418e585507";
|
||||
$groups = $this->group_user_model
|
||||
->select('token_group')
|
||||
->where('token_user', $user_token)->findAll();
|
||||
|
||||
if(sizeof($groups)>0){
|
||||
$rules = html_entity_decode($this->group_model->select('rules')->where('token',$groups[0]['token_group'])->first()['rules']);
|
||||
}
|
||||
for ($i = 1; $i<sizeof($groups); $i++) {
|
||||
echo var_dump($this->group_model->select('rules')->where('token',$groups[$i]['token_group'])->first()['rules']);
|
||||
$rules = json_encode(
|
||||
array_merge(
|
||||
json_decode($rules, true),
|
||||
json_decode($this->group_model->select('rules')->where('token',$groups[$i]['token_group'])->first()['rules'], true)
|
||||
)
|
||||
);
|
||||
} */
|
||||
|
||||
$user_token = 'c0bf18621f78cb2ffc4a67cf8d5173c7';
|
||||
$groups_token = $this->group_user_model->select('token_group')
|
||||
->where('token_user',$user_token)
|
||||
->findAll();
|
||||
|
||||
$groups_names = [];
|
||||
foreach($groups_token as $g_t){
|
||||
$title = $this->group_model->select('title')
|
||||
->where('token',$g_t)
|
||||
->first()['title'];
|
||||
array_push($groups_names, $title);
|
||||
|
||||
}
|
||||
|
||||
echo '<pre>';
|
||||
var_dump($groups_names);
|
||||
echo '</pre>';
|
||||
|
||||
dd();
|
||||
|
||||
|
||||
|
||||
//Total number of records without filtering
|
||||
$totalRecords = $this->user_model->select('id_user')
|
||||
->join('auth_user_group','auth_user_group.token = auth_user.group')
|
||||
->countAllResults();
|
||||
|
||||
//Total number of records with filtering
|
||||
$totalRecordwithFilter = $this->user_model->select('id_user')
|
||||
->join('auth_user_group','auth_user_group.token = auth_user.group')
|
||||
->orLike('first_name', $searchValue)
|
||||
->orLike('email', $searchValue)
|
||||
->countAllResults();
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -81,9 +81,12 @@ class User extends BaseController
|
||||
'icon' => 'fas fa-save'
|
||||
];
|
||||
|
||||
$data['group'] = $this->group_user_model->select('token,title')->findAll();
|
||||
|
||||
$data['selected_groups'] = [];
|
||||
|
||||
$data['group'] = $this->group_model->select('token,title')->findAll();
|
||||
$data['country'] = $this->countries_model->select('code,name')->where('data_lang',session()->get('lang')??'en')->findAll();
|
||||
|
||||
|
||||
echo view(getenv('theme.path').'main/header');
|
||||
echo view(getenv('theme.path').'form/user/form',$data);
|
||||
echo view(getenv('theme.path').'main/footer');
|
||||
@ -132,6 +135,7 @@ class User extends BaseController
|
||||
}
|
||||
|
||||
$data['selected_groups'] = $this->group_user_model->select('token_group')->where('token_user', $token)->findAll();
|
||||
|
||||
$data['group'] = $this->group_model->select('token,title')->findAll();
|
||||
$data['country'] = $this->countries_model->select('code,name')->where('data_lang',session()->get('lang')??'en')->findAll();
|
||||
|
||||
@ -156,7 +160,7 @@ class User extends BaseController
|
||||
$email = 'required|valid_email';
|
||||
|
||||
if(empty($this->request->getPost('id_user'))){
|
||||
$email = 'required|valid_email|is_unique[user.email]';
|
||||
$email = 'required|valid_email|is_unique[auth_user.email]';
|
||||
$password = 'required|min_length[8]';
|
||||
$confirm_password = 'matches[password]';
|
||||
}else{
|
||||
@ -200,7 +204,7 @@ class User extends BaseController
|
||||
$phpass = new PasswordHash(8, true);
|
||||
$this->user_model->save([
|
||||
'id_user' => null,
|
||||
'group' => $this->request->getPost('group'),
|
||||
//'group' => $this->request->getPost('group'),
|
||||
'first_name' => $this->request->getPost('first_name'),
|
||||
'last_name' => $this->request->getPost('last_name'),
|
||||
'date_birth' => $date_birth,
|
||||
@ -223,12 +227,6 @@ class User extends BaseController
|
||||
|
||||
}else{
|
||||
|
||||
echo "<pre>";
|
||||
var_dump($this->request->getPost());
|
||||
echo "</pre>" ;
|
||||
|
||||
dd();
|
||||
|
||||
$this->user_model->save([
|
||||
'id_user' => $this->request->getPost('id_user'),
|
||||
//'group' => $this->request->getPost('group'),
|
||||
@ -254,22 +252,19 @@ class User extends BaseController
|
||||
]);
|
||||
}
|
||||
|
||||
// Update group_user pivot table
|
||||
$user_token = $this->user_model
|
||||
->select('token')
|
||||
->where('id_user',$this->request->getPost('id_user'))->first();
|
||||
|
||||
|
||||
$this->group_user_model->delete(['user_token' => $user_token]);
|
||||
$groups = implode(",",$this->request->getPost('group')??[]);
|
||||
->where('id_user',$this->request->getPost('id_user'))->first()['token'];
|
||||
$this->group_user_model->where('token_user', $user_token)->delete();
|
||||
$groups = $this->request->getPost('group');
|
||||
foreach ($groups as $group){
|
||||
$group_user_data = [
|
||||
'token_user' => $this->request->getPost('id_user'),
|
||||
'token_user' => $user_token,
|
||||
'token_group' => $group
|
||||
];
|
||||
$this->group_user_model->insert($group_user_data);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -278,8 +273,40 @@ class User extends BaseController
|
||||
return redirect()->to('/user');
|
||||
}else{
|
||||
if($session->get('id_user') == $this->request->getPost('id_user')){
|
||||
$access_rules = $this->group_model->select('rules')->where('token',$this->request->getPost('group'))->first();
|
||||
$session->set('rules', html_entity_decode($access_rules['rules']));
|
||||
// Get groups tokens
|
||||
$user_token = $this->user_model
|
||||
->select('token')
|
||||
->where('id_user',$this->request->getPost('id_user'))->first()['token'];
|
||||
$groups = $this->group_user_model
|
||||
->select('token_group')
|
||||
->where('token_user',$user_token)->findAll();
|
||||
|
||||
if (sizeof($groups)>1){
|
||||
|
||||
$access_rules = $this->group_model->select('rules')->where('token',$groups[0])->first()['rules'];
|
||||
$access_rules = json_decode(html_entity_decode($access_rules), true);
|
||||
for ($i=1; $i<sizeof($groups); $i++){
|
||||
$temp_rules = $this->group_model->select('rules')->where('token',$groups[$i])->first()['rules'];
|
||||
foreach ($access_rules as $key => $value){
|
||||
if (array_key_exists($key, json_decode(html_entity_decode($temp_rules), true))){
|
||||
$value2 = json_decode(html_entity_decode($temp_rules), true)[$key];
|
||||
$access_rules[$key] = array_unique(array_merge($value, $value2));
|
||||
}
|
||||
else{
|
||||
$access_rules[$key]= $value;
|
||||
}
|
||||
}
|
||||
foreach (json_decode(html_entity_decode($temp_rules), true) as $key2 => $value2){
|
||||
if (!array_key_exists($key2, $access_rules)){
|
||||
$access_rules[$key2] = $value2;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else{
|
||||
$access_rules = $this->group_model->select('rules')->where('token',$groups)->first();
|
||||
}
|
||||
$session->set('rules', html_entity_decode(json_encode($access_rules)));
|
||||
}
|
||||
$session->setFlashdata('sweet', ['success',lang("App.user_alert_edit")]);
|
||||
return redirect()->to('/user');
|
||||
|
||||
@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
namespace App\Database\Migrations;
|
||||
|
||||
use CodeIgniter\Database\Migration;
|
||||
|
||||
class RemoveGroupFromUser extends Migration
|
||||
{
|
||||
public function up()
|
||||
{
|
||||
$this->forge->dropColumn('auth_user', ['group']);
|
||||
}
|
||||
|
||||
public function down()
|
||||
{
|
||||
$sql = "ALTER TABLE `auth_user` ADD `group` varchar(216) COLLATE latin1_general_ci;";
|
||||
$this->db->query($sql);
|
||||
}
|
||||
}
|
||||
@ -91,10 +91,14 @@
|
||||
<?php
|
||||
if ($id_select['token_group'] == $item['token']){
|
||||
$selItem = 'selected';
|
||||
break;
|
||||
}
|
||||
else{
|
||||
$selItem = '';
|
||||
}
|
||||
?>
|
||||
<?php endforeach; ?>
|
||||
<option value="<?=$item['token']??''?>" <?= (isset($selItem))?'selected':'' ?>> <?=$item['title']??''?></option>
|
||||
<option value="<?=$item['token']??''?>" <?= isset($selItem)?$selItem:"" ?>> <?=$item['title']??''?></option>
|
||||
<?php endforeach; ?>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user