448function restrictedArea(
User $user, $features,
$object = 0, $tableandshare =
'', $feature2 =
'', $dbt_keyfield =
'fk_soc', $dbt_select =
'rowid', $isdraft = 0, $mode = 0)
458 if ($objectid ==
"-1") {
462 $objectid = preg_replace(
'/[^0-9\.\,]/',
'', (
string) $objectid);
471 $parentfortableentity =
'';
475 $originalfeatures = $features;
476 if ($features ==
'agenda') {
477 $tableandshare =
'actioncomm&societe';
478 $feature2 =
'myactions|allactions';
481 if ($features ==
'bank') {
482 $features =
'banque';
484 if ($features ==
'facturerec') {
485 $features =
'facture';
487 if ($features ==
'supplier_invoicerec') {
488 $features =
'fournisseur';
489 $feature2 =
'facture';
491 if ($features ==
'mo') {
494 if ($features ==
'member') {
495 $features =
'adherent';
497 if ($features ==
'subscription') {
498 $features =
'adherent';
499 $feature2 =
'cotisation';
500 $tableandshare =
'subscription&adherent';
501 $parentfortableentity =
'fk_adherent@adherent';
503 if ($features ==
'website' && is_object(
$object) &&
$object->element ==
'websitepage') {
504 $parentfortableentity =
'fk_website@website';
506 if ($features ==
'project') {
507 $features =
'projet';
509 if ($features ==
'product') {
510 $features =
'produit';
512 if ($features ==
'productbatch') {
513 $features =
'produit';
515 if ($features ==
'tax') {
516 $feature2 =
'charges';
518 if ($features ==
'workstation') {
519 $feature2 =
'workstation';
521 if ($features ==
'fournisseur') {
522 $features =
'fournisseur';
523 if (is_object(
$object) &&
$object->element ==
'invoice_supplier') {
524 $feature2 =
'facture';
525 } elseif (is_object(
$object) &&
$object->element ==
'order_supplier') {
526 $feature2 =
'commande';
529 if ($features ==
'payment_sc') {
530 $tableandshare =
'paiementcharge';
531 $parentfortableentity =
'fk_charge@chargesociales';
536 if (in_array($features, [
'commandedet',
'propaldet',
'facturedet',
'supplier_proposaldet',
'evaluationdet',
'skilldet',
'deliverydet',
'contratdet'])) {
537 $features = substr($features, 0, -3);
538 } elseif (in_array($features, [
'stocktransferline',
'inventoryline',
'bomline',
'expensereport_det',
'facture_fourn_det'])) {
539 $features = substr($features, 0, -4);
540 } elseif ($features ==
'commandefournisseurdispatch') {
541 $features =
'commandefournisseur';
542 } elseif ($features ==
'invoice_supplier_det_rec') {
543 $features =
'invoice_supplier_rec';
545 if ($features ==
'evaluation') {
547 $feature2 =
'evaluation';
562 'features' => $features,
563 'feature2' => $feature2,
564 'originalfeatures' => $originalfeatures,
565 'tableandshare' => $tableandshare,
567 'objectid' => $objectid,
568 'dbt_keyfield' => $dbt_keyfield,
569 'dbt_select' => $dbt_select,
570 'idtype' => $dbt_select,
571 'isdraft' => $isdraft,
574 if (!empty($hookmanager)) {
575 $reshook = $hookmanager->executeHooks(
'restrictedArea', $parameters);
577 if (isset($hookmanager->resArray[
'result'])) {
578 if ($hookmanager->resArray[
'result'] == 0) {
592 $featuresarray = array($features);
593 if (preg_match(
'/&/', $features)) {
594 $featuresarray = explode(
"&", $features);
595 } elseif (preg_match(
'/\|/', $features)) {
596 $featuresarray = explode(
"|", $features);
600 if (!empty($feature2)) {
601 $feature2 = explode(
"|", $feature2);
609 foreach ($featuresarray as $feature) {
610 $featureforlistofmodule = $feature;
611 if ($featureforlistofmodule ==
'produit') {
612 $featureforlistofmodule =
'product';
614 if ($featureforlistofmodule ==
'supplier_proposal') {
615 $featureforlistofmodule =
'supplierproposal';
617 if (!empty($user->socid) &&
getDolGlobalString(
'MAIN_MODULES_FOR_EXTERNAL') && !in_array($featureforlistofmodule, $listofmodules)) {
623 if ($feature ==
'societe' && (empty($feature2) || !in_array(
'contact', $feature2))) {
624 if (!$user->hasRight(
'societe',
'lire') && !$user->hasRight(
'fournisseur',
'lire')) {
628 } elseif (($feature ==
'societe' && (!empty($feature2) && in_array(
'contact', $feature2))) || $feature ==
'contact') {
629 if (!$user->hasRight(
'societe',
'contact',
'lire')) {
633 } elseif ($feature ==
'produit|service') {
634 if (!$user->hasRight(
'produit',
'lire') && !$user->hasRight(
'service',
'lire')) {
638 } elseif ($feature ==
'prelevement') {
639 if (!$user->hasRight(
'prelevement',
'bons',
'lire')) {
643 } elseif ($feature ==
'cheque') {
644 if (!$user->hasRight(
'banque',
'cheque')) {
648 } elseif ($feature ==
'projet') {
649 if (!$user->hasRight(
'projet',
'lire') && !$user->hasRight(
'projet',
'all',
'lire')) {
653 } elseif ($feature ==
'payment') {
654 if (!$user->hasRight(
'facture',
'lire')) {
658 } elseif ($feature ==
'payment_supplier') {
659 if (!$user->hasRight(
'fournisseur',
'facture',
'lire')) {
663 } elseif ($feature ==
'payment_sc') {
664 if (!$user->hasRight(
'tax',
'charges',
'lire')) {
668 } elseif ($feature ==
'webhook') {
669 if (empty($user->admin)) {
673 } elseif (!empty($feature2)) {
675 foreach ($feature2 as $subfeature) {
676 if ($subfeature ==
'user' && $user->id == $objectid) {
679 if ($subfeature ==
'fiscalyear' && $user->hasRight(
'accounting',
'fiscalyear',
'write')) {
684 if (!empty($subfeature) && !$user->hasRight($feature, $subfeature,
'lire') && !$user->hasRight($feature, $subfeature,
'read')) {
686 } elseif (empty($subfeature) && !$user->hasRight($feature,
'lire') && !$user->hasRight($feature,
'read')) {
697 } elseif (!empty($feature) && ($feature !=
'user' && $feature !=
'usergroup')) {
698 if (!$user->hasRight($feature,
'lire')
699 && !$user->hasRight($feature,
'read')
700 && !$user->hasRight($feature,
'run')) {
708 if (preg_match(
'/\|/', $features) && $nbko < count($featuresarray)) {
724 $wemustcheckpermissionforcreate = (
GETPOST(
'sendit',
'alpha') ||
GETPOST(
'linkit',
'alpha') || in_array(
GETPOST(
'action',
'aZ09'), array(
'create',
'update',
'set',
'upload',
'add_element_resource',
'confirm_deletebank',
'confirm_delete_linked_resource')) ||
GETPOST(
'roworder',
'alpha', 2));
725 $wemustcheckpermissionfordeletedraft = ((
GETPOST(
"action",
"aZ09") ==
'confirm_delete' &&
GETPOST(
"confirm",
"aZ09") ==
'yes') ||
GETPOST(
"action",
"aZ09") ==
'delete');
727 if ($wemustcheckpermissionforcreate || $wemustcheckpermissionfordeletedraft) {
728 foreach ($featuresarray as $feature) {
729 if ($feature ==
'contact') {
730 if (!$user->hasRight(
'societe',
'contact',
'creer')) {
734 } elseif ($feature ==
'produit|service') {
735 if (!$user->hasRight(
'produit',
'creer') && !$user->hasRight(
'service',
'creer')) {
739 } elseif ($feature ==
'prelevement') {
740 if (!$user->hasRight(
'prelevement',
'bons',
'creer')) {
744 } elseif ($feature ==
'commande_fournisseur') {
745 if (!$user->hasRight(
'fournisseur',
'commande',
'creer') || !$user->hasRight(
'supplier_order',
'creer')) {
749 } elseif ($feature ==
'banque') {
750 if (!$user->hasRight(
'banque',
'modifier')) {
754 } elseif ($feature ==
'cheque') {
755 if (!$user->hasRight(
'banque',
'cheque')) {
759 } elseif ($feature ==
'import') {
760 if (!$user->hasRight(
'import',
'run')) {
764 } elseif ($feature ==
'ecm') {
765 if (!$user->hasRight(
'ecm',
'upload')) {
769 } elseif ($feature ==
'modulebuilder') {
770 if (!$user->hasRight(
'modulebuilder',
'run')) {
774 } elseif ($feature ==
'webhook') {
775 if (empty($user->admin)) {
779 } elseif (!empty($feature2)) {
780 foreach ($feature2 as $subfeature) {
781 if ($subfeature ==
'user' && $user->id == $objectid && $user->hasRight(
'user',
'self',
'creer')) {
784 if ($subfeature ==
'user' && $user->id == $objectid && $user->hasRight(
'user',
'self',
'password')) {
787 if ($subfeature ==
'user' && $user->id != $objectid && $user->hasRight(
'user',
'user',
'password')) {
791 if (!$user->hasRight($feature, $subfeature,
'creer')
792 && !$user->hasRight($feature, $subfeature,
'write')
793 && !$user->hasRight($feature, $subfeature,
'create')) {
802 } elseif (!empty($feature)) {
804 if (!$user->hasRight($feature,
'creer')
805 && !$user->hasRight($feature,
'write')
806 && !$user->hasRight($feature,
'create')) {
814 if (preg_match(
'/\|/', $features) && $nbko < count($featuresarray)) {
818 if ($wemustcheckpermissionforcreate && !$createok) {
830 if (
GETPOST(
'action',
'aZ09') ==
'confirm_create_user' &&
GETPOST(
"confirm",
'aZ09') ==
'yes') {
831 if (!$user->hasRight(
'user',
'user',
'creer')) {
835 if (!$createuserok) {
848 if ((
GETPOST(
"action",
"aZ09") ==
'confirm_delete' &&
GETPOST(
"confirm",
"aZ09") ==
'yes') ||
GETPOST(
"action",
"aZ09") ==
'delete') {
849 foreach ($featuresarray as $feature) {
850 if ($feature ==
'bookmark') {
851 if (!$user->hasRight(
'bookmark',
'supprimer')) {
852 if ($user->id !=
$object->fk_user || !$user->hasRight(
'bookmark',
'creer')) {
856 } elseif ($feature ==
'contact') {
857 if (!$user->hasRight(
'societe',
'contact',
'supprimer')) {
860 } elseif ($feature ==
'produit|service') {
861 if (!$user->hasRight(
'produit',
'supprimer') && !$user->hasRight(
'service',
'supprimer')) {
864 } elseif ($feature ==
'commande_fournisseur') {
865 if (!$user->hasRight(
'fournisseur',
'commande',
'supprimer')) {
868 } elseif ($feature ==
'payment_supplier') {
869 if (!$user->hasRight(
'fournisseur',
'facture',
'creer')) {
872 } elseif ($feature ==
'payment') {
873 if (!$user->hasRight(
'facture',
'paiement')) {
876 } elseif ($feature ==
'payment_sc') {
877 if (!$user->hasRight(
'tax',
'charges',
'creer')) {
880 } elseif ($feature ==
'banque') {
881 if (!$user->hasRight(
'banque',
'modifier')) {
884 } elseif ($feature ==
'cheque') {
885 if (!$user->hasRight(
'banque',
'cheque')) {
888 } elseif ($feature ==
'ecm') {
889 if (!$user->hasRight(
'ecm',
'upload')) {
892 } elseif ($feature ==
'ftp') {
893 if (!$user->hasRight(
'ftp',
'write')) {
896 } elseif ($feature ==
'salaries') {
897 if (!$user->hasRight(
'salaries',
'delete')) {
900 } elseif ($feature ==
'adherent') {
901 if (!$user->hasRight(
'adherent',
'supprimer')) {
904 } elseif ($feature ==
'paymentbybanktransfer') {
905 if (!$user->hasRight(
'paymentbybanktransfer',
'create')) {
908 } elseif ($feature ==
'prelevement') {
909 if (!$user->hasRight(
'prelevement',
'bons',
'creer')) {
912 } elseif (!empty($feature2)) {
913 foreach ($feature2 as $subfeature) {
914 if (!$user->hasRight($feature, $subfeature,
'supprimer') && !$user->hasRight($feature, $subfeature,
'delete')) {
921 } elseif (!empty($feature)) {
923 if (!$user->hasRight($feature,
'supprimer')
924 && !$user->hasRight($feature,
'delete')
925 && !$user->hasRight($feature,
'run')) {
932 if (preg_match(
'/\|/', $features) && $nbko < count($featuresarray)) {
936 if (!$deleteok && !($isdraft && $createok)) {
948 if (!empty($objectid) && $objectid > 0) {
950 $params = array(
'objectid' => $objectid,
'features' => implode(
',', $featuresarray),
'features2' => $feature2);
981function checkUserAccessToObject($user, array $featuresarray,
$object = 0, $tableandshare =
'', $feature2 =
'', $dbt_keyfield =
'', $dbt_select =
'rowid', $parenttableforentity =
'')
990 $objectid = preg_replace(
'/[^0-9\.\,]/',
'', $objectid);
997 $params = explode(
'&', $tableandshare);
998 $dbtablename = (!empty($params[0]) ? $params[0] :
'');
999 $sharedelement = (!empty($params[1]) ? $params[1] : $dbtablename);
1001 foreach ($featuresarray as $feature) {
1007 if ($feature ==
'societe' && !empty($feature2) && is_array($feature2) && in_array(
'contact', $feature2)) {
1008 $feature =
'contact';
1011 if ($feature ==
'member') {
1012 $feature =
'adherent';
1014 if ($feature ==
'category') {
1015 $feature =
'categorie';
1017 if ($feature ==
'project') {
1018 $feature =
'projet';
1020 if ($feature ==
'projet' && !empty($feature2) && is_array($feature2) && !empty(array_intersect(array(
'project_task',
'projet_task'), $feature2))) {
1021 $feature =
'project_task';
1023 if ($feature ==
'task' || $feature ==
'projet_task') {
1024 $feature =
'project_task';
1025 $dbtablename =
'projet_task';
1027 if ($feature ==
'eventorganization') {
1028 $feature =
'agenda';
1029 $dbtablename =
'actioncomm';
1031 if ($feature ==
'payment_sc' && empty($parenttableforentity)) {
1033 $parenttableforentity =
'';
1034 $dbtablename =
"chargesociales";
1035 $feature =
"chargesociales";
1036 $objectid =
$object->fk_charge;
1039 $checkonentitydone = 0;
1042 $check = array(
'adherent',
'banque',
'bom',
'don',
'mrp',
'user',
'usergroup',
'payment',
'payment_supplier',
'payment_sc',
'product',
'produit',
'service',
'produit|service',
'categorie',
'resource',
'expensereport',
'holiday',
'salaries',
'website',
'recruitment',
'chargesociales',
'knowledgemanagement',
'stock');
1043 $checksoc = array(
'societe');
1044 $checkparentsoc = array(
'agenda',
'contact',
'contrat');
1045 $checkproject = array(
'projet',
'project');
1046 $checktask = array(
'projet_task',
'project_task');
1047 $checkhierarchy = array(
'expensereport',
'holiday',
'hrm');
1048 $checkuser = array(
'bookmark');
1049 $nocheck = array(
'barcode',
'webhook');
1054 if (empty($dbtablename)) {
1055 $dbtablename = $feature;
1056 $sharedelement = (!empty($params[1]) ? $params[1] : $dbtablename);
1060 if ($dbt_select !=
'rowid' && $dbt_select !=
'id') {
1061 $objectid =
"'".$objectid.
"'";
1064 if (in_array($feature, $check) && $objectid > 0) {
1065 $sql =
"SELECT COUNT(dbt.".$dbt_select.
") as nb";
1066 $sql .=
" FROM ".MAIN_DB_PREFIX.$dbtablename.
" as dbt";
1067 if (($feature ==
'user' || $feature ==
'usergroup') &&
isModEnabled(
'multicompany')) {
1069 if ($conf->entity == 1 && $user->admin && !$user->entity) {
1070 $sql .=
" WHERE dbt.".$dbt_select.
" IN (".$db->sanitize($objectid, 1).
")";
1071 $sql .=
" AND dbt.entity IS NOT NULL";
1073 $sql .=
",".MAIN_DB_PREFIX.
"usergroup_user as ug";
1074 $sql .=
" WHERE dbt.".$dbt_select.
" IN (".$db->sanitize($objectid, 1).
")";
1075 $sql .=
" AND ((ug.fk_user = dbt.rowid";
1076 $sql .=
" AND ug.entity IN (".getEntity(
'usergroup').
"))";
1077 $sql .=
" OR dbt.entity = 0)";
1080 $sql .=
" WHERE dbt.".$dbt_select.
" IN (".$db->sanitize($objectid, 1).
")";
1081 $sql .=
" AND dbt.entity IN (".getEntity($sharedelement, 1).
")";
1085 if ($parenttableforentity && preg_match(
'/(.*)@(.*)/', $parenttableforentity, $reg)) {
1086 $sql .=
", ".MAIN_DB_PREFIX.$reg[2].
" as dbtp";
1087 $sql .=
" WHERE dbt.".$reg[1].
" = dbtp.rowid AND dbt.".$dbt_select.
" IN (".$db->sanitize($objectid, 1).
")";
1088 $sql .=
" AND dbtp.entity IN (".getEntity($sharedelement, 1).
")";
1090 $sql .=
" WHERE dbt.".$dbt_select.
" IN (".$db->sanitize($objectid, 1).
")";
1091 $sql .=
" AND dbt.entity IN (".getEntity($sharedelement, 1).
")";
1094 $checkonentitydone = 1;
1096 if (in_array($feature, $checksoc) && $objectid > 0) {
1098 if ($user->socid > 0) {
1099 if ($user->socid != $objectid) {
1102 } elseif (
isModEnabled(
'societe') && !$user->hasRight(
'societe',
'lire') && !$user->hasRight(
'societe',
'client',
'voir')) {
1103 dol_syslog(
"security.lib.php::checkUserAccessToObject Deny access due: (isModEnabled('societe') && !user->hasRight('societe', 'lire') && !user->hasRight('societe', 'client', 'voir'))", LOG_DEBUG);
1105 } elseif (
isModEnabled(
"societe") && ($user->hasRight(
'societe',
'lire') && !$user->hasRight(
'societe',
'client',
'voir'))) {
1107 $sql =
"SELECT COUNT(sc.fk_soc) as nb";
1108 $sql .=
" FROM (".MAIN_DB_PREFIX.
"societe_commerciaux as sc";
1109 $sql .=
", ".MAIN_DB_PREFIX.
"societe as s)";
1110 $sql .=
" WHERE sc.fk_soc IN (".$db->sanitize($objectid, 1).
")";
1111 $sql .=
" AND (sc.fk_user = ".((int) $user->id);
1113 $userschilds = $user->getAllChildIds();
1114 if (!empty($userschilds)) $sql .=
" OR sc.fk_user IN (".$db->sanitize(implode(
',', $userschilds)).
")";
1117 $sql .=
" AND sc.fk_soc = s.rowid";
1118 $sql .=
" AND s.entity IN (".getEntity($sharedelement, 1).
")";
1121 $sql =
"SELECT COUNT(s.rowid) as nb";
1122 $sql .=
" FROM ".MAIN_DB_PREFIX.
"societe as s";
1123 $sql .=
" WHERE s.rowid IN (".$db->sanitize($objectid, 1).
")";
1124 $sql .=
" AND s.entity IN (".getEntity($sharedelement, 1).
")";
1127 $checkonentitydone = 1;
1129 if (in_array($feature, $checkparentsoc) && $objectid > 0) {
1131 if ($user->socid > 0) {
1132 $sql =
"SELECT COUNT(dbt.".$dbt_select.
") as nb";
1133 $sql .=
" FROM ".MAIN_DB_PREFIX.$dbtablename.
" as dbt";
1134 $sql .=
" WHERE dbt.".$dbt_select.
" IN (".$db->sanitize($objectid, 1).
")";
1135 $sql .=
" AND dbt.fk_soc = ".((int) $user->socid);
1136 } elseif (
isModEnabled(
"societe") && ($user->hasRight(
'societe',
'lire') && !$user->hasRight(
'societe',
'client',
'voir'))) {
1138 $sql =
"SELECT COUNT(dbt.".$dbt_select.
") as nb";
1139 $sql .=
" FROM ".MAIN_DB_PREFIX.$dbtablename.
" as dbt";
1140 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"societe_commerciaux as sc ON dbt.fk_soc = sc.fk_soc AND sc.fk_user = ".((int) $user->id);
1141 $sql .=
" WHERE dbt.".$dbt_select.
" IN (".$db->sanitize($objectid, 1).
")";
1142 $sql .=
" AND (dbt.fk_soc IS NULL OR sc.fk_soc IS NOT NULL)";
1143 $sql .=
" AND dbt.entity IN (".getEntity($sharedelement, 1).
")";
1146 $sql =
"SELECT COUNT(dbt.".$dbt_select.
") as nb";
1147 $sql .=
" FROM ".MAIN_DB_PREFIX.$dbtablename.
" as dbt";
1148 $sql .=
" WHERE dbt.".$dbt_select.
" IN (".$db->sanitize($objectid, 1).
")";
1149 $sql .=
" AND dbt.entity IN (".getEntity($sharedelement, 1).
")";
1152 $checkonentitydone = 1;
1154 if (in_array($feature, $checkproject) && $objectid > 0) {
1155 if (
isModEnabled(
'project') && !$user->hasRight(
'projet',
'all',
'lire')) {
1156 $projectid = $objectid;
1158 include_once DOL_DOCUMENT_ROOT.
'/projet/class/project.class.php';
1159 $projectstatic =
new Project($db);
1160 $tmps = $projectstatic->getProjectsAuthorizedForUser($user, 0, 1, 0);
1162 $tmparray = explode(
',', $tmps);
1163 if (!in_array($projectid, $tmparray)) {
1167 $sql =
"SELECT COUNT(dbt.".$dbt_select.
") as nb";
1168 $sql .=
" FROM ".MAIN_DB_PREFIX.$dbtablename.
" as dbt";
1169 $sql .=
" WHERE dbt.".$dbt_select.
" IN (".$db->sanitize($objectid, 1).
")";
1170 $sql .=
" AND dbt.entity IN (".getEntity($sharedelement, 1).
")";
1172 $checkonentitydone = 1;
1174 if (in_array($feature, $checktask) && (
int) $objectid > 0) {
1175 if (
isModEnabled(
'project') && !$user->hasRight(
'projet',
'all',
'lire')) {
1176 $task =
new Task($db);
1177 $task->fetch((
int) $objectid);
1178 $projectid = $task->fk_project;
1180 include_once DOL_DOCUMENT_ROOT.
'/projet/class/project.class.php';
1181 $projectstatic =
new Project($db);
1182 $tmps = $projectstatic->getProjectsAuthorizedForUser($user, 0, 1, 0);
1184 $tmparray = explode(
',', $tmps);
1185 if (!in_array($projectid, $tmparray)) {
1189 $sharedelement =
'project';
1190 $sql =
"SELECT COUNT(dbt.".$dbt_select.
") as nb";
1191 $sql .=
" FROM ".MAIN_DB_PREFIX.$dbtablename.
" as dbt";
1192 $sql .=
" WHERE dbt.".$dbt_select.
" IN (".$db->sanitize($objectid, 1).
")";
1193 $sql .=
" AND dbt.entity IN (".getEntity($sharedelement, 1).
")";
1196 $checkonentitydone = 1;
1200 if (!$checkonentitydone && !in_array($feature, $nocheck) && $objectid > 0) {
1202 if ($user->socid > 0) {
1203 if (empty($dbt_keyfield)) {
1204 dol_print_error(
null,
'Param dbt_keyfield is required but not defined');
1206 $sql =
"SELECT COUNT(dbt.".$dbt_keyfield.
") as nb";
1207 $sql .=
" FROM ".MAIN_DB_PREFIX.$dbtablename.
" as dbt";
1208 $sql .=
" WHERE dbt.rowid IN (".$db->sanitize($objectid, 1).
")";
1209 $sql .=
" AND dbt.".$dbt_keyfield.
" = ".((int) $user->socid);
1210 } elseif (
isModEnabled(
"societe") && !$user->hasRight(
'societe',
'client',
'voir')) {
1212 if (empty($dbt_keyfield)) {
1213 dol_print_error(
null,
'Param dbt_keyfield is required but not defined');
1215 if ($feature !=
'ticket') {
1216 $sql =
"SELECT COUNT(sc.fk_soc) as nb";
1217 $sql .=
" FROM ".MAIN_DB_PREFIX.$dbtablename.
" as dbt";
1218 $sql .=
", ".MAIN_DB_PREFIX.
"societe_commerciaux as sc";
1219 $sql .=
" WHERE dbt.".$dbt_select.
" IN (".$db->sanitize($objectid, 1).
")";
1220 $sql .=
" AND dbt.entity IN (".getEntity($sharedelement, 1).
")";
1221 $sql .=
" AND sc.fk_soc = dbt.".$dbt_keyfield;
1222 $sql .=
" AND (sc.fk_user = ".((int) $user->id);
1224 $userschilds = $user->getAllChildIds();
1225 if (!empty($userschilds)) $sql .=
" OR sc.fk_user IN (".$db->sanitize(implode(
',', $userschilds)).
")";
1230 $sql =
"SELECT COUNT(dbt.".$dbt_select.
") as nb";
1231 $sql .=
" FROM ".MAIN_DB_PREFIX.$dbtablename.
" as dbt";
1232 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"societe_commerciaux as sc ON sc.fk_soc = dbt.".$dbt_keyfield.
" AND sc.fk_user = ".((int) $user->id);
1233 $sql .=
" WHERE dbt.".$dbt_select.
" IN (".$db->sanitize($objectid, 1).
")";
1234 $sql .=
" AND dbt.entity IN (".getEntity($sharedelement, 1).
")";
1235 $sql .=
" AND (sc.fk_user = ".((int) $user->id).
" OR dbt.".$dbt_keyfield.
" IS NULL OR dbt.".$dbt_keyfield.
" = 0)";
1237 } elseif (
isModEnabled(
'multicompany') && (!empty(
$object->ismultientitymanaged) || !isset(
$object->ismultientitymanaged))) {
1239 $sql =
"SELECT COUNT(dbt.".$dbt_select.
") as nb";
1240 $sql .=
" FROM ".MAIN_DB_PREFIX.$dbtablename.
" as dbt";
1241 $sql .=
" WHERE dbt.".$dbt_select.
" IN (".$db->sanitize($objectid, 1).
")";
1242 $sql .=
" AND dbt.entity IN (".getEntity($sharedelement, 1).
")";
1247 if ($feature ===
'agenda' && ((
int) $objectid) > 0) {
1249 if ( !$user->hasRight(
'agenda',
'allactions',
'read')) {
1250 require_once DOL_DOCUMENT_ROOT.
'/comm/action/class/actioncomm.class.php';
1252 $action->fetch((
int) $objectid);
1253 if ($action->authorid != $user->id && $action->userownerid != $user->id && !(array_key_exists($user->id, $action->userassigned))) {
1261 if (in_array($feature, $checkhierarchy) && is_object(
$object) && $objectid > 0) {
1262 $childids = $user->getAllChildIds(1);
1264 if ($feature ==
'holiday') {
1265 $useridtocheck =
$object->fk_user;
1266 if (!$user->hasRight(
'holiday',
'readall') && !in_array($useridtocheck, $childids) && !in_array(
$object->fk_validator, $childids)) {
1270 if ($feature ==
'expensereport') {
1271 $useridtocheck =
$object->fk_user_author;
1272 if (!$user->hasRight(
'expensereport',
'readall')) {
1273 if (!in_array($useridtocheck, $childids)) {
1278 if ($feature ==
'hrm' && in_array(
'evaluation', $feature2)) {
1279 $useridtocheck =
$object->fk_user;
1281 if ($user->hasRight(
'hrm',
'evaluation',
'readall')) {
1285 if (!$user->hasRight(
'hrm',
'evaluation',
'read')) {
1290 return in_array($useridtocheck, $childids);
1296 if (in_array($feature, $checkuser) && is_object(
$object) && $objectid > 0) {
1297 $useridtocheck =
$object->fk_user;
1298 if (!empty($useridtocheck) && $useridtocheck > 0 && $useridtocheck != $user->id && empty($user->admin)) {
1304 if ($feature ==
'contact' && in_array($dbtablename, array(
'socpeople',
'contact')) && !empty($objectid)) {
1305 $sqlpriv =
"SELECT COUNT(dbt.rowid) as nb";
1306 $sqlpriv .=
" FROM ".MAIN_DB_PREFIX.
"socpeople as dbt";
1307 $sqlpriv .=
" WHERE dbt.rowid IN (".$db->sanitize($objectid, 1).
")";
1308 $sqlpriv .=
" AND dbt.priv = 1 AND (dbt.fk_user_creat IS NULL OR dbt.fk_user_creat <> ".((int) $user->id).
")";
1309 $resqlpriv = $db->query($sqlpriv);
1313 $objpriv = $db->fetch_object($resqlpriv);
1314 if ($objpriv && $objpriv->nb > 0) {
1320 $resql = $db->query($sql);
1322 $obj = $db->fetch_object($resql);
1323 if (!$obj || $obj->nb < count(explode(
',', $objectid))) {
1327 dol_syslog(
"Bad forged sql in security.lib.php::checkUserAccessToObject", LOG_WARNING);
1333 dol_syslog(
"security.lib.php::checkUserAccessToObject::return True", LOG_DEBUG);
if(!defined( 'NOREQUIREMENU')) if(!empty(GETPOST('seteventmessages', 'alpha'))) if(!function_exists("llxHeader")) top_httphead($contenttype='text/html', $forcenocache=0)
Show HTTP header.