180function restrictedArea(
User $user, $features,
$object = 0, $tableandshare =
'', $feature2 =
'', $dbt_keyfield =
'fk_soc', $dbt_select =
'rowid', $isdraft = 0, $mode = 0)
190 if ($objectid ==
"-1") {
194 $objectid = preg_replace(
'/[^0-9\.\,]/',
'', (
string) $objectid);
203 $parentfortableentity =
'';
207 $originalfeatures = $features;
208 if ($features ==
'agenda') {
209 $tableandshare =
'actioncomm&societe';
210 $feature2 =
'myactions|allactions';
212 } elseif ($features ==
'bank') {
213 $features =
'banque';
214 } elseif ($features ==
'facturerec') {
215 $features =
'facture';
216 } elseif ($features ==
'supplier_invoicerec') {
217 $features =
'fournisseur';
218 $feature2 =
'facture';
219 } elseif ($features ==
'mo') {
221 } elseif ($features ==
'member') {
222 $features =
'adherent';
223 } elseif ($features ==
'subscription') {
224 $features =
'adherent';
225 $feature2 =
'cotisation';
226 } elseif ($features ==
'website' && is_object(
$object) &&
$object->element ==
'websitepage') {
227 $parentfortableentity =
'fk_website@website';
228 } elseif ($features ==
'project') {
229 $features =
'projet';
230 } elseif ($features ==
'eventorganization' && is_object(
$object) &&
$object->element ==
'conferenceorbooth') {
237 if (!empty($user->socid) || empty(
$object->fk_project)) {
244 $features =
'projet';
245 $tableandshare =
'projet&project';
246 $objectid = (int)
$object->fk_project;
248 } elseif ($features ==
'product') {
249 $features =
'produit';
250 } elseif ($features ==
'productbatch') {
251 $features =
'produit';
252 } elseif ($features ==
'tax') {
253 $feature2 =
'charges';
254 } elseif ($features ==
'workstation') {
255 $feature2 =
'workstation';
256 } elseif ($features ==
'hrm' && is_object(
$object) && in_array(
$object->element, array(
'job',
'position',
'skill'))) {
258 } elseif ($features ==
'stocktransfer' && is_object(
$object) &&
$object->element ==
'stocktransfer') {
259 $feature2 =
'stocktransfer';
260 } elseif ($features ==
'fournisseur') {
261 if (is_object(
$object) &&
$object->element ==
'invoice_supplier') {
262 $feature2 =
'facture';
263 } elseif (is_object(
$object) &&
$object->element ==
'order_supplier') {
264 $feature2 =
'commande';
266 } elseif ($features ==
'payment_sc') {
267 $tableandshare =
'paiementcharge';
268 $parentfortableentity =
'fk_charge@chargesociales';
273 if (in_array($features, [
'commandedet',
'propaldet',
'facturedet',
'supplier_proposaldet',
'evaluationdet',
'skilldet',
'deliverydet',
'contratdet'])) {
274 $features = substr($features, 0, -3);
275 } elseif (in_array($features, [
'stocktransferline',
'inventoryline',
'bomline',
'expensereport_det',
'facture_fourn_det'])) {
276 $features = substr($features, 0, -4);
277 } elseif ($features ==
'commandefournisseurdispatch') {
278 $features =
'commandefournisseur';
279 } elseif ($features ==
'invoice_supplier_det_rec') {
280 $features =
'invoice_supplier_rec';
282 if ($features ==
'evaluation') {
284 $feature2 =
'evaluation';
292 if (is_object(
$object) && in_array(
$object->element, array(
'project_task',
'task'))
293 && (empty($features) || in_array($features, array(
'projet',
'project')))
294 && empty($feature2)) {
295 $features =
'projet';
296 $feature2 =
'project_task';
297 if (empty($tableandshare)) {
298 $tableandshare =
'projet_task';
306 'features' => $features,
307 'feature2' => $feature2,
308 'originalfeatures' => $originalfeatures,
309 'tableandshare' => $tableandshare,
311 'objectid' => $objectid,
312 'dbt_keyfield' => $dbt_keyfield,
313 'dbt_select' => $dbt_select,
314 'idtype' => $dbt_select,
315 'isdraft' => $isdraft,
318 if (!empty($hookmanager)) {
319 $reshook = $hookmanager->executeHooks(
'restrictedArea', $parameters);
321 if (isset($hookmanager->resArray[
'result'])) {
322 if ($hookmanager->resArray[
'result'] == 0) {
336 $featuresarray = array($features);
337 if (preg_match(
'/&/', $features)) {
338 $featuresarray = explode(
"&", $features);
339 } elseif (preg_match(
'/\|/', $features)) {
340 $featuresarray = explode(
"|", $features);
344 if (!empty($feature2)) {
345 $feature2 = explode(
"|", $feature2);
353 foreach ($featuresarray as $feature) {
354 $featureforlistofmodule = $feature;
355 if ($featureforlistofmodule ==
'produit') {
356 $featureforlistofmodule =
'product';
358 if ($featureforlistofmodule ==
'supplier_proposal') {
359 $featureforlistofmodule =
'supplierproposal';
361 if (!empty($user->socid) &&
getDolGlobalString(
'MAIN_MODULES_FOR_EXTERNAL') && !in_array($featureforlistofmodule, $listofmodules)) {
367 if ($feature ==
'societe' && (empty($feature2) || !in_array(
'contact', $feature2))) {
368 if (!$user->hasRight(
'societe',
'lire') && !$user->hasRight(
'fournisseur',
'lire')) {
372 } elseif (($feature ==
'societe' && (!empty($feature2) && in_array(
'contact', $feature2))) || $feature ==
'contact') {
373 if (!$user->hasRight(
'societe',
'contact',
'lire')) {
377 } elseif ($feature ==
'produit|service') {
378 if (!$user->hasRight(
'produit',
'lire') && !$user->hasRight(
'service',
'lire')) {
382 } elseif ($feature ==
'prelevement') {
383 if (!$user->hasRight(
'prelevement',
'bons',
'lire')) {
387 } elseif ($feature ==
'cheque') {
388 if (!$user->hasRight(
'banque',
'cheque')) {
392 } elseif ($feature ==
'projet') {
393 if (!$user->hasRight(
'projet',
'lire') && !$user->hasRight(
'projet',
'all',
'lire')) {
397 } elseif ($feature ==
'payment') {
398 if (!$user->hasRight(
'facture',
'lire')) {
402 } elseif ($feature ==
'payment_supplier') {
403 if (!$user->hasRight(
'fournisseur',
'facture',
'lire')) {
407 } elseif ($feature ==
'payment_sc') {
408 if (!$user->hasRight(
'tax',
'charges',
'lire')) {
412 } elseif ($feature ==
'webhook') {
413 if (empty($user->admin)) {
417 } elseif (!empty($feature2)) {
419 foreach ($feature2 as $subfeature) {
420 if ($subfeature ==
'user' && $user->id == $objectid) {
423 if ($subfeature ==
'fiscalyear' && $user->hasRight(
'accounting',
'fiscalyear',
'write')) {
428 if (!empty($subfeature) && !$user->hasRight($feature, $subfeature,
'lire') && !$user->hasRight($feature, $subfeature,
'read')) {
430 } elseif (empty($subfeature) && !$user->hasRight($feature,
'lire') && !$user->hasRight($feature,
'read')) {
441 } elseif (!empty($feature) && ($feature !=
'user' && $feature !=
'usergroup')) {
442 if (!$user->hasRight($feature,
'lire')
443 && !$user->hasRight($feature,
'read')
444 && !$user->hasRight($feature,
'run')) {
452 if (preg_match(
'/\|/', $features) && $nbko < count($featuresarray)) {
468 $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));
469 $wemustcheckpermissionfordeletedraft = ((
GETPOST(
"action",
"aZ09") ==
'confirm_delete' &&
GETPOST(
"confirm",
"aZ09") ==
'yes') ||
GETPOST(
"action",
"aZ09") ==
'delete');
471 if ($wemustcheckpermissionforcreate || $wemustcheckpermissionfordeletedraft) {
472 foreach ($featuresarray as $feature) {
473 if ($feature ==
'contact') {
474 if (!$user->hasRight(
'societe',
'contact',
'creer')) {
478 } elseif ($feature ==
'produit|service') {
479 if (!$user->hasRight(
'produit',
'creer') && !$user->hasRight(
'service',
'creer')) {
483 } elseif ($feature ==
'prelevement') {
484 if (!$user->hasRight(
'prelevement',
'bons',
'creer')) {
488 } elseif ($feature ==
'commande_fournisseur') {
489 if (!$user->hasRight(
'fournisseur',
'commande',
'creer') || !$user->hasRight(
'supplier_order',
'creer')) {
493 } elseif ($feature ==
'banque') {
494 if (!$user->hasRight(
'banque',
'modifier')) {
498 } elseif ($feature ==
'cheque') {
499 if (!$user->hasRight(
'banque',
'cheque')) {
503 } elseif ($feature ==
'import') {
504 if (!$user->hasRight(
'import',
'run')) {
508 } elseif ($feature ==
'ecm') {
509 if (!$user->hasRight(
'ecm',
'upload')) {
513 } elseif ($feature ==
'modulebuilder') {
514 if (!$user->hasRight(
'modulebuilder',
'run')) {
518 } elseif ($feature ==
'payment') {
519 if (!$user->hasRight(
'facture',
'paiement')) {
523 } elseif ($feature ==
'payment_supplier') {
524 if (!$user->hasRight(
'fournisseur',
'facture',
'creer')) {
528 } elseif ($feature ==
'webhook') {
529 if (empty($user->admin)) {
533 } elseif (!empty($feature2)) {
534 foreach ($feature2 as $subfeature) {
535 if ($subfeature ==
'user' && $user->id == $objectid && $user->hasRight(
'user',
'self',
'creer')) {
538 if ($subfeature ==
'user' && $user->id == $objectid && $user->hasRight(
'user',
'self',
'password')) {
541 if ($subfeature ==
'user' && $user->id != $objectid && $user->hasRight(
'user',
'user',
'password')) {
545 if (!$user->hasRight($feature, $subfeature,
'creer')
546 && !$user->hasRight($feature, $subfeature,
'write')
547 && !$user->hasRight($feature, $subfeature,
'create')) {
556 } elseif (!empty($feature)) {
558 if (!$user->hasRight($feature,
'creer')
559 && !$user->hasRight($feature,
'write')
560 && !$user->hasRight($feature,
'create')) {
568 if (preg_match(
'/\|/', $features) && $nbko < count($featuresarray)) {
572 if ($wemustcheckpermissionforcreate && !$createok) {
584 if (
GETPOST(
'action',
'aZ09') ==
'confirm_create_user' &&
GETPOST(
"confirm",
'aZ09') ==
'yes') {
585 if (!$user->hasRight(
'user',
'user',
'creer')) {
589 if (!$createuserok) {
602 if ((
GETPOST(
"action",
"aZ09") ==
'confirm_delete' &&
GETPOST(
"confirm",
"aZ09") ==
'yes') ||
GETPOST(
"action",
"aZ09") ==
'delete') {
603 foreach ($featuresarray as $feature) {
604 if ($feature ==
'bookmark') {
605 if (!$user->hasRight(
'bookmark',
'supprimer')) {
606 if ($user->id !=
$object->fk_user || !$user->hasRight(
'bookmark',
'creer')) {
610 } elseif ($feature ==
'contact') {
611 if (!$user->hasRight(
'societe',
'contact',
'supprimer')) {
614 } elseif ($feature ==
'produit|service') {
615 if (!$user->hasRight(
'produit',
'supprimer') && !$user->hasRight(
'service',
'supprimer')) {
618 } elseif ($feature ==
'commande_fournisseur') {
619 if (!$user->hasRight(
'fournisseur',
'commande',
'supprimer')) {
622 } elseif ($feature ==
'payment_supplier') {
623 if (!$user->hasRight(
'fournisseur',
'facture',
'creer')) {
626 } elseif ($feature ==
'payment') {
627 if (!$user->hasRight(
'facture',
'paiement')) {
630 } elseif ($feature ==
'payment_sc') {
631 if (!$user->hasRight(
'tax',
'charges',
'creer')) {
634 } elseif ($feature ==
'banque') {
635 if (!$user->hasRight(
'banque',
'modifier')) {
638 } elseif ($feature ==
'cheque') {
639 if (!$user->hasRight(
'banque',
'cheque')) {
642 } elseif ($feature ==
'ecm') {
643 if (!$user->hasRight(
'ecm',
'upload')) {
646 } elseif ($feature ==
'ftp') {
647 if (!$user->hasRight(
'ftp',
'write')) {
650 } elseif ($feature ==
'salaries') {
651 if (!$user->hasRight(
'salaries',
'delete')) {
654 } elseif ($feature ==
'adherent') {
655 if (!$user->hasRight(
'adherent',
'supprimer')) {
658 } elseif ($feature ==
'paymentbybanktransfer') {
659 if (!$user->hasRight(
'paymentbybanktransfer',
'create')) {
662 } elseif ($feature ==
'prelevement') {
663 if (!$user->hasRight(
'prelevement',
'bons',
'creer')) {
666 } elseif (!empty($feature2)) {
667 foreach ($feature2 as $subfeature) {
668 if (!$user->hasRight($feature, $subfeature,
'supprimer') && !$user->hasRight($feature, $subfeature,
'delete')) {
675 } elseif (!empty($feature)) {
677 if (!$user->hasRight($feature,
'supprimer')
678 && !$user->hasRight($feature,
'delete')
679 && !$user->hasRight($feature,
'run')) {
686 if (preg_match(
'/\|/', $features) && $nbko < count($featuresarray)) {
690 if (!$deleteok && !($isdraft && $createok)) {
702 if (!empty($objectid) && $objectid > 0) {
704 $params = array(
'objectid' => $objectid,
'features' => implode(
',', $featuresarray),
'features2' => $feature2);
735function checkUserAccessToObject($user, array $featuresarray,
$object = 0, $tableandshare =
'', $feature2 =
'', $dbt_keyfield =
'', $dbt_select =
'rowid', $parenttableforentity =
'')
744 $objectid = preg_replace(
'/[^0-9\.\,]/',
'', (
string) $objectid);
751 $params = explode(
'&', $tableandshare);
752 $dbtablename = (!empty($params[0]) ? $params[0] :
'');
753 $sharedelement = (!empty($params[1]) ? $params[1] : $dbtablename);
755 foreach ($featuresarray as $feature) {
761 if ($feature ==
'societe' && !empty($feature2) && is_array($feature2) && in_array(
'contact', $feature2)) {
762 $feature =
'contact';
765 if ($feature ==
'member') {
766 $feature =
'adherent';
768 if ($feature ==
'category') {
769 $feature =
'categorie';
771 if ($feature ==
'project') {
774 if ($feature ==
'projet' && !empty($feature2) && is_array($feature2) && !empty(array_intersect(array(
'project_task',
'projet_task'), $feature2))) {
775 $feature =
'project_task';
777 if ($feature ==
'task' || $feature ==
'projet_task') {
778 $feature =
'project_task';
779 $dbtablename =
'projet_task';
781 if ($feature ==
'eventorganization') {
783 $dbtablename =
'actioncomm';
785 if ($feature ==
'payment_sc' && empty($parenttableforentity)) {
787 $parenttableforentity =
'';
788 $dbtablename =
"chargesociales";
789 $feature =
"chargesociales";
793 $checkonentitydone = 0;
796 $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',
'stockmovement');
797 $checksoc = array(
'societe');
798 $checkparentsoc = array(
'agenda',
'contact',
'contrat');
799 $checkproject = array(
'projet',
'project');
800 $checktask = array(
'projet_task',
'project_task');
801 $checkhierarchy = array(
'expensereport',
'holiday',
'hrm');
802 $checkuser = array(
'bookmark');
803 $nocheck = array(
'barcode',
'webhook');
808 if (empty($dbtablename)) {
809 $dbtablename = $feature;
810 $sharedelement = (!empty($params[1]) ? $params[1] : $dbtablename);
818 if (!empty($objectid) && in_array($dbtablename, array(
'asset',
'paiement',
'paiementfourn',
'workstation_workstation',
'hrm_job',
'hrm_job_user',
'hrm_skill'))) {
822 if (!empty($user->socid)) {
825 if (in_array($dbtablename, array(
'hrm_job',
'hrm_job_user',
'hrm_skill'))) {
831 $nocheck[] = $feature;
839 if ($dbt_select !=
'rowid' && $dbt_select !=
'id') {
840 $objectid =
"'".$objectid.
"'";
844 if (in_array($feature, $check) && !empty($objectid)) {
845 $sql =
"SELECT COUNT(dbt.".$db->sanitize($dbt_select).
") as nb";
846 $sql .=
" FROM ".MAIN_DB_PREFIX.$db->sanitize($dbtablename).
" as dbt";
847 if (($feature ==
'user' || $feature ==
'usergroup') &&
isModEnabled(
'multicompany')) {
849 if (
$conf->entity == 1 && $user->admin && !$user->entity) {
850 $sql .=
" WHERE dbt.".$db->sanitize($dbt_select).
" IN (".
$db->sanitize($objectid, 1).
")";
851 $sql .=
" AND dbt.entity IS NOT NULL";
853 $sql .=
",".MAIN_DB_PREFIX.
"usergroup_user as ug";
854 $sql .=
" WHERE dbt.".$db->sanitize($dbt_select).
" IN (".
$db->sanitize($objectid, 1).
")";
855 $sql .=
" AND ((ug.fk_user = dbt.rowid";
856 $sql .=
" AND ug.entity IN (".getEntity(
'usergroup').
"))";
857 $sql .=
" OR dbt.entity = 0)";
860 $sql .=
" WHERE dbt.".$db->sanitize($dbt_select).
" IN (".
$db->sanitize($objectid, 1).
")";
861 $sql .=
" AND dbt.entity IN (".getEntity($sharedelement, 1).
")";
865 if ($parenttableforentity && preg_match(
'/(.*)@(.*)/', $parenttableforentity, $reg)) {
866 $sql .=
", ".MAIN_DB_PREFIX.$db->sanitize($reg[2]).
" as dbtp";
867 $sql .=
" WHERE dbt.".$db->sanitize($reg[1]).
" = dbtp.rowid AND dbt.".
$db->sanitize($dbt_select).
" IN (".
$db->sanitize($objectid, 1).
")";
868 $sql .=
" AND dbtp.entity IN (".getEntity($sharedelement, 1).
")";
870 $sql .=
" WHERE dbt.".$db->sanitize($dbt_select).
" IN (".
$db->sanitize($objectid, 1).
")";
871 $sql .=
" AND dbt.entity IN (".getEntity($sharedelement, 1).
")";
874 $checkonentitydone = 1;
877 if (in_array($feature, $checksoc) && !empty($objectid)) {
879 if ($user->socid > 0) {
880 if ((
string) $user->socid != $objectid) {
883 } elseif (
isModEnabled(
'societe') && !$user->hasRight(
'societe',
'lire') && !$user->hasRight(
'societe',
'client',
'voir')) {
884 dol_syslog(
"security.lib.php::checkUserAccessToObject Deny access due: (isModEnabled('societe') && !user->hasRight('societe', 'lire') && !user->hasRight('societe', 'client', 'voir'))", LOG_DEBUG);
886 } elseif (
isModEnabled(
"societe") && ($user->hasRight(
'societe',
'lire') && !$user->hasRight(
'societe',
'client',
'voir'))) {
888 $sql =
"SELECT COUNT(sc.fk_soc) as nb";
889 $sql .=
" FROM (".MAIN_DB_PREFIX.
"societe_commerciaux as sc";
890 $sql .=
", ".MAIN_DB_PREFIX.
"societe as s)";
891 $sql .=
" WHERE sc.fk_soc IN (".$db->sanitize($objectid, 1).
")";
892 $sql .=
" AND (sc.fk_user = ".((int) $user->id);
894 $userschilds = $user->getAllChildIds();
895 if (!empty($userschilds)) $sql .=
" OR sc.fk_user IN (".
$db->sanitize(implode(
',', $userschilds)).
")";
898 $sql .=
" AND sc.fk_soc = s.rowid";
899 $sql .=
" AND s.entity IN (".getEntity($sharedelement, 1).
")";
902 $sql =
"SELECT COUNT(s.rowid) as nb";
903 $sql .=
" FROM ".MAIN_DB_PREFIX.
"societe as s";
904 $sql .=
" WHERE s.rowid IN (".$db->sanitize($objectid, 1).
")";
905 $sql .=
" AND s.entity IN (".getEntity($sharedelement, 1).
")";
908 $checkonentitydone = 1;
910 if (in_array($feature, $checkparentsoc) && !empty($objectid)) {
912 if ($user->socid > 0) {
913 $sql =
"SELECT COUNT(dbt.".$db->sanitize($dbt_select).
") as nb";
914 $sql .=
" FROM ".MAIN_DB_PREFIX.$dbtablename.
" as dbt";
915 $sql .=
" WHERE dbt.".$db->sanitize($dbt_select).
" IN (".
$db->sanitize($objectid, 1).
")";
916 $sql .=
" AND dbt.fk_soc = ".((int) $user->socid);
917 } elseif (
isModEnabled(
"societe") && ($user->hasRight(
'societe',
'lire') && !$user->hasRight(
'societe',
'client',
'voir'))) {
919 $sql =
"SELECT COUNT(dbt.".$db->sanitize($dbt_select).
") as nb";
920 $sql .=
" FROM ".MAIN_DB_PREFIX.$dbtablename.
" as dbt";
921 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"societe_commerciaux as sc ON dbt.fk_soc = sc.fk_soc AND sc.fk_user = ".((int) $user->id);
922 $sql .=
" WHERE dbt.".$db->sanitize($dbt_select).
" IN (".
$db->sanitize($objectid, 1).
")";
923 $sql .=
" AND (dbt.fk_soc IS NULL OR sc.fk_soc IS NOT NULL)";
924 $sql .=
" AND dbt.entity IN (".getEntity($sharedelement, 1).
")";
927 $sql =
"SELECT COUNT(dbt.".$db->sanitize($dbt_select).
") as nb";
928 $sql .=
" FROM ".MAIN_DB_PREFIX.$dbtablename.
" as dbt";
929 $sql .=
" WHERE dbt.".$db->sanitize($dbt_select).
" IN (".
$db->sanitize($objectid, 1).
")";
930 $sql .=
" AND dbt.entity IN (".getEntity($sharedelement, 1).
")";
933 $checkonentitydone = 1;
935 if (in_array($feature, $checkproject) && !empty($objectid)) {
936 if (
isModEnabled(
'project') && !$user->hasRight(
'projet',
'all',
'lire')) {
937 $projectid = $objectid;
939 include_once DOL_DOCUMENT_ROOT.
'/projet/class/project.class.php';
941 $tmps = $projectstatic->getProjectsAuthorizedForUser($user, 0, 1, 0);
943 $tmparray = explode(
',', $tmps);
944 if (!in_array($projectid, $tmparray)) {
948 $sql =
"SELECT COUNT(dbt.".$db->sanitize($dbt_select).
") as nb";
949 $sql .=
" FROM ".MAIN_DB_PREFIX.$dbtablename.
" as dbt";
950 $sql .=
" WHERE dbt.".$db->sanitize($dbt_select).
" IN (".
$db->sanitize($objectid, 1).
")";
951 $sql .=
" AND dbt.entity IN (".getEntity($sharedelement, 1).
")";
953 $checkonentitydone = 1;
955 if (in_array($feature, $checktask) && !empty($objectid)) {
956 if (
isModEnabled(
'project') && !$user->hasRight(
'projet',
'all',
'lire')) {
957 if (preg_match(
'/,/', $objectid)) {
961 $task->fetch((
int) $objectid);
962 $projectid = $task->fk_project;
964 include_once DOL_DOCUMENT_ROOT.
'/projet/class/project.class.php';
966 $tmps = $projectstatic->getProjectsAuthorizedForUser($user, 0, 1, 0);
968 $tmparray = explode(
',', $tmps);
969 if (!in_array($projectid, $tmparray)) {
973 $sharedelement =
'project';
974 $sql =
"SELECT COUNT(dbt.".$db->sanitize($dbt_select).
") as nb";
975 $sql .=
" FROM ".MAIN_DB_PREFIX.$dbtablename.
" as dbt";
976 $sql .=
" WHERE dbt.".$db->sanitize($dbt_select).
" IN (".
$db->sanitize($objectid, 1).
")";
977 $sql .=
" AND dbt.entity IN (".getEntity($sharedelement, 1).
")";
980 $checkonentitydone = 1;
984 if (!$checkonentitydone && !in_array($feature, $nocheck) && !empty($objectid)) {
986 if ($user->socid > 0) {
987 if (empty($dbt_keyfield)) {
988 dol_print_error(
null,
'Param dbt_keyfield is required but not defined');
990 $sql =
"SELECT COUNT(dbt.".$db->sanitize($dbt_keyfield).
") as nb";
991 $sql .=
" FROM ".MAIN_DB_PREFIX.$dbtablename.
" as dbt";
992 $sql .=
" WHERE dbt.rowid IN (".$db->sanitize($objectid, 1).
")";
993 $sql .=
" AND dbt.".$db->sanitize($dbt_keyfield).
" = ".((int) $user->socid);
994 } elseif (
isModEnabled(
"societe") && !$user->hasRight(
'societe',
'client',
'voir')) {
996 if (empty($dbt_keyfield)) {
997 dol_print_error(
null,
'Param dbt_keyfield is required but not defined');
999 if ($feature !=
'ticket') {
1000 $sql =
"SELECT COUNT(sc.fk_soc) as nb";
1001 $sql .=
" FROM ".MAIN_DB_PREFIX.$db->sanitize($dbtablename).
" as dbt";
1002 $sql .=
", ".MAIN_DB_PREFIX.
"societe_commerciaux as sc";
1003 $sql .=
" WHERE dbt.".$db->sanitize($dbt_select).
" IN (".
$db->sanitize($objectid, 1).
")";
1004 $sql .=
" AND dbt.entity IN (".getEntity($sharedelement, 1).
")";
1005 $sql .=
" AND sc.fk_soc = dbt.".$db->sanitize($dbt_keyfield);
1006 $sql .=
" AND (sc.fk_user = ".((int) $user->id);
1008 $userschilds = $user->getAllChildIds();
1009 if (!empty($userschilds)) $sql .=
" OR sc.fk_user IN (".
$db->sanitize(implode(
',', $userschilds)).
")";
1014 $sql =
"SELECT COUNT(dbt.".$db->sanitize($dbt_select).
") as nb";
1015 $sql .=
" FROM ".MAIN_DB_PREFIX.$dbtablename.
" as dbt";
1016 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"societe_commerciaux as sc ON sc.fk_soc = dbt.".
$db->sanitize($dbt_keyfield).
" AND sc.fk_user = ".((int) $user->id);
1017 $sql .=
" WHERE dbt.".$db->sanitize($dbt_select).
" IN (".
$db->sanitize($objectid, 1).
")";
1018 $sql .=
" AND dbt.entity IN (".getEntity($sharedelement, 1).
")";
1019 $sql .=
" AND (sc.fk_user = ".((int) $user->id).
" OR dbt.".$dbt_keyfield.
" IS NULL OR dbt.".$dbt_keyfield.
" = 0)";
1021 } elseif (
isModEnabled(
'multicompany') && (!empty(
$object->ismultientitymanaged) || !isset(
$object->ismultientitymanaged))) {
1023 $sql =
"SELECT COUNT(dbt.".$db->sanitize($dbt_select).
") as nb";
1024 $sql .=
" FROM ".MAIN_DB_PREFIX.$db->sanitize($dbtablename).
" as dbt";
1025 $sql .=
" WHERE dbt.".$db->sanitize($dbt_select).
" IN (".
$db->sanitize($objectid, 1).
")";
1026 $sql .=
" AND dbt.entity IN (".getEntity($sharedelement, 1).
")";
1031 if ($feature ===
'agenda' && !empty($objectid)) {
1033 if (!$user->hasRight(
'agenda',
'allactions',
'read')) {
1034 if (preg_match(
'/,/', $objectid)) {
1038 require_once DOL_DOCUMENT_ROOT.
'/comm/action/class/actioncomm.class.php';
1040 $action->fetch((
int) $objectid);
1041 if ($action->authorid != $user->id && $action->userownerid != $user->id && !(array_key_exists($user->id, $action->userassigned))) {
1049 if (in_array($feature, $checkhierarchy) && is_object(
$object) && !empty($objectid)) {
1050 $childids = $user->getAllChildIds(1);
1052 if ($feature ==
'holiday') {
1053 $useridtocheck =
$object->fk_user;
1054 if (!$user->hasRight(
'holiday',
'readall') && !in_array($useridtocheck, $childids) && !in_array(
$object->fk_validator, $childids)) {
1058 if ($feature ==
'expensereport') {
1059 $useridtocheck =
$object->fk_user_author;
1060 if (!$user->hasRight(
'expensereport',
'readall')) {
1061 if (!in_array($useridtocheck, $childids)) {
1066 if ($feature ==
'hrm' && in_array(
'evaluation', $feature2)) {
1067 $useridtocheck =
$object->fk_user;
1069 if ($user->hasRight(
'hrm',
'evaluation',
'readall')) {
1073 if (!$user->hasRight(
'hrm',
'evaluation',
'read')) {
1078 return in_array($useridtocheck, $childids);
1084 if (in_array($feature, $checkuser) && is_object(
$object) && !empty($objectid)) {
1085 $useridtocheck =
$object->fk_user;
1086 if (!empty($useridtocheck) && $useridtocheck > 0 && $useridtocheck != $user->id && empty($user->admin)) {
1092 $resql =
$db->query($sql);
1094 $obj =
$db->fetch_object($resql);
1095 if (!$obj || $obj->nb < count(explode(
',', $objectid))) {
1099 dol_syslog(
"Bad forged sql in security.lib.php::checkUserAccessToObject", LOG_WARNING);
1105 dol_syslog(
"security.lib.php::checkUserAccessToObject::return True", LOG_DEBUG);