183function restrictedArea(
User $user, $features,
$object = 0, $tableandshare =
'', $feature2 =
'', $dbt_keyfield =
'fk_soc', $dbt_select =
'rowid', $isdraft = 0, $nodie = 0, $mode =
'')
193 if ($objectid ==
"-1") {
197 $objectid = preg_replace(
'/[^0-9\.\,]/',
'', (
string) $objectid);
206 $parentfortableentity =
'';
208 $originalfeatures = $features;
211 if ($features ==
'agenda') {
212 $tableandshare =
'actioncomm&societe';
213 $feature2 =
'myactions|allactions';
215 } elseif ($features ==
'bank') {
216 $features =
'banque';
217 } elseif ($features ==
'remisecheque') {
218 $features =
'banque';
219 } elseif ($features ==
'facturerec') {
220 $features =
'facture';
221 } elseif ($features ==
'supplier_invoicerec') {
222 $features =
'fournisseur';
223 $feature2 =
'facture';
224 } elseif ($features ==
'company') {
225 $features =
'societe';
226 } elseif ($features ==
'mo') {
228 } elseif ($features ==
'member') {
229 $features =
'adherent';
230 } elseif ($features ==
'subscription') {
231 $features =
'adherent';
232 $feature2 =
'cotisation';
233 $tableandshare =
'subscription&adherent';
234 $parentfortableentity =
'fk_adherent@adherent';
235 } elseif ($features ==
'website' && is_object(
$object) &&
$object->element ==
'websitepage') {
236 $parentfortableentity =
'fk_website@website';
237 } elseif ($features ==
'project') {
238 $features =
'projet';
239 } elseif ($features ==
'project_task') {
240 $features =
'projet';
241 $objectid = (int)
$object->fk_project;
243 } elseif (is_object(
$object) && ($features ==
'conferenceorbooth@eventorganization' || ($features ==
'eventorganization' &&
$object->element ==
'conferenceorbooth'))) {
246 if (!empty($user->socid) || empty(
$object->fk_project)) {
253 $features =
'projet';
254 $tableandshare =
'projet&project';
255 $objectid = (int)
$object->fk_project;
257 } elseif ($features ==
'product') {
258 $features =
'produit';
259 } elseif ($features ==
'productbatch') {
260 $features =
'produit';
261 } elseif ($features ==
'tax') {
262 $feature2 =
'charges';
263 } elseif ($features ==
'workstation') {
264 $feature2 =
'workstation';
265 } elseif ($features ==
'hrm' && is_object(
$object) && in_array(
$object->element, array(
'job',
'position',
'skill'))) {
267 } elseif ($features ==
'recruitment' && is_object(
$object) && in_array(
$object->element, array(
'recruitmentjobposition',
'recruitmentcandidature'))) {
271 if (empty($feature2)) {
272 $feature2 =
'recruitmentjobposition';
274 if (empty($tableandshare)) {
275 $tableandshare =
$object->table_element;
277 } elseif ($features ==
'stocktransfer' && is_object(
$object) &&
$object->element ==
'stocktransfer') {
278 $feature2 =
'stocktransfer';
279 } elseif (in_array($features, array(
'fournisseur',
'commande_fournisseur',
'facture_fournisseur',
'order_supplier',
'invoice_supplier'))) {
280 $features =
'fournisseur';
281 if (is_object(
$object) &&
$object->element ==
'invoice_supplier') {
282 $feature2 =
'facture';
283 } elseif (is_object(
$object) &&
$object->element ==
'order_supplier') {
284 $feature2 =
'commande';
286 } elseif ($features ==
'payment_sc') {
287 $tableandshare =
'paiementcharge';
288 $parentfortableentity =
'fk_charge@chargesociales';
289 } elseif ($features ==
'payment_vat') {
290 $tableandshare =
'payment_vat';
291 $parentfortableentity =
'fk_tva@tva';
296 if (in_array($features, [
'commandedet',
'propaldet',
'facturedet',
'supplier_proposaldet',
'evaluationdet',
'skilldet',
'deliverydet',
'contratdet'])) {
297 $features = substr($features, 0, -3);
298 } elseif (in_array($features, [
'stocktransferline',
'inventoryline',
'bomline',
'expensereport_det',
'facture_fourn_det'])) {
299 $features = substr($features, 0, -4);
300 } elseif ($features ==
'commandefournisseurdispatch') {
301 $features =
'commandefournisseur';
302 } elseif ($features ==
'invoice_supplier_det_rec') {
303 $features =
'invoice_supplier_rec';
305 if ($features ==
'evaluation') {
307 $feature2 =
'evaluation';
315 if (is_object(
$object) && in_array(
$object->element, array(
'project_task',
'task'))
316 && (empty($features) || in_array($features, array(
'projet',
'project')))
317 && empty($feature2)) {
318 $features =
'projet';
319 $feature2 =
'project_task';
320 if (empty($tableandshare)) {
321 $tableandshare =
'projet_task';
329 if (empty($features) || trim((
string) $features) ===
'') {
330 dol_syslog(
'restrictedArea() called with an empty features parameter, we refuse the access', LOG_WARNING);
342 'features' => $features,
343 'feature2' => $feature2,
344 'originalfeatures' => $originalfeatures,
345 'tableandshare' => $tableandshare,
347 'objectid' => $objectid,
348 'dbt_keyfield' => $dbt_keyfield,
349 'dbt_select' => $dbt_select,
350 'idtype' => $dbt_select,
351 'isdraft' => $isdraft,
355 if (!empty($hookmanager)) {
356 $reshook = $hookmanager->executeHooks(
'restrictedArea', $parameters);
358 if (isset($hookmanager->resArray[
'result'])) {
359 if ($hookmanager->resArray[
'result'] == 0) {
373 $featuresarray = array($features);
374 if (preg_match(
'/&/', $features)) {
375 $featuresarray = explode(
"&", $features);
376 } elseif (preg_match(
'/\|/', $features)) {
377 $featuresarray = explode(
"|", $features);
381 if (!empty($feature2)) {
382 $feature2 = explode(
"|", $feature2);
392 foreach ($featuresarray as $feature) {
393 $featureforlistofmodule = $feature;
394 if ($featureforlistofmodule ==
'produit') {
395 $featureforlistofmodule =
'product';
397 if ($featureforlistofmodule ==
'supplier_proposal') {
398 $featureforlistofmodule =
'supplierproposal';
400 if (!empty($user->socid) &&
getDolGlobalString(
'MAIN_MODULES_FOR_EXTERNAL') && !in_array($featureforlistofmodule, $listofmodules)) {
406 if (in_array($feature, array(
'societe',
'company')) && (empty($feature2) || !in_array(
'contact', $feature2))) {
407 if (!$user->hasRight(
'societe',
'lire') && !$user->hasRight(
'fournisseur',
'lire')) {
411 } elseif ((in_array($feature, array(
'societe',
'company')) && (!empty($feature2) && in_array(
'contact', $feature2))) || $feature ==
'contact') {
412 if (!$user->hasRight(
'societe',
'contact',
'lire')) {
416 } elseif ($feature ==
'produit|service') {
417 if (!$user->hasRight(
'produit',
'lire') && !$user->hasRight(
'service',
'lire')) {
421 } elseif ($feature ==
'produit') {
427 if (!$user->hasRight(
'produit',
'lire') && !$user->hasRight(
'service',
'lire')) {
431 } elseif (
$object->type == 0 && !$user->hasRight(
'produit',
'lire')) {
434 } elseif (
$object->type == 1 && !$user->hasRight(
'service',
'lire')) {
438 } elseif ($feature ==
'prelevement') {
439 if (!$user->hasRight(
'prelevement',
'bons',
'lire')) {
443 } elseif ($feature ==
'cheque') {
444 if (!$user->hasRight(
'banque',
'cheque')) {
448 } elseif ($feature ==
'projet') {
449 if (!$user->hasRight(
'projet',
'lire') && !$user->hasRight(
'projet',
'all',
'lire')) {
453 } elseif ($feature ==
'payment') {
454 if (!$user->hasRight(
'facture',
'lire')) {
458 } elseif ($feature ==
'payment_supplier') {
459 if (!$user->hasRight(
'fournisseur',
'facture',
'lire')) {
463 } elseif ($feature ==
'payment_sc') {
464 if (!$user->hasRight(
'tax',
'charges',
'lire')) {
468 } elseif ($feature ==
'payment_vat') {
469 if (!$user->hasRight(
'tax',
'charges',
'lire')) {
473 } elseif ($feature ==
'webhook') {
474 if (empty($user->admin)) {
478 } elseif (!empty($feature2)) {
480 foreach ($feature2 as $subfeature) {
481 if ($subfeature ==
'user' && $user->id == $objectid) {
484 if ($subfeature ==
'fiscalyear' && $user->hasRight(
'accounting',
'fiscalyear',
'write')) {
489 if (!empty($subfeature) && !$user->hasRight($feature, $subfeature,
'lire') && !$user->hasRight($feature, $subfeature,
'read')) {
491 } elseif (empty($subfeature) && !$user->hasRight($feature,
'lire') && !$user->hasRight($feature,
'read')) {
502 } elseif (!empty($feature) && ($feature !=
'user' && $feature !=
'usergroup')) {
503 if (!$user->hasRight($feature,
'lire')
504 && !$user->hasRight($feature,
'read')
505 && !$user->hasRight($feature,
'run')) {
513 if (preg_match(
'/\|/', $features) && $nbko < count($featuresarray)) {
529 if ($mode ==
'read') {
530 $wemustcheckpermissionforcreate = 0;
531 $wemustcheckpermissionfordeletedraft = 0;
532 $wemustcheckpermissionfordelete = 0;
533 } elseif ($mode ==
'write') {
534 $wemustcheckpermissionforcreate = 1;
535 $wemustcheckpermissionfordeletedraft = 1;
536 $wemustcheckpermissionfordelete = 0;
537 } elseif ($mode ==
'delete') {
538 $wemustcheckpermissionforcreate = 0;
539 $wemustcheckpermissionfordeletedraft = 0;
540 $wemustcheckpermissionfordelete = 1;
543 $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));
544 $wemustcheckpermissionfordeletedraft = ((
GETPOST(
"action",
"aZ09") ==
'confirm_delete' &&
GETPOST(
"confirm",
"aZ09") ==
'yes') ||
GETPOST(
"action",
"aZ09") ==
'delete');
545 $wemustcheckpermissionfordelete = ((
GETPOST(
"action",
"aZ09") ==
'confirm_delete' &&
GETPOST(
"confirm",
"aZ09") ==
'yes') ||
GETPOST(
"action",
"aZ09") ==
'delete');
550 if ($wemustcheckpermissionforcreate || $wemustcheckpermissionfordeletedraft) {
551 foreach ($featuresarray as $feature) {
552 if ($feature ==
'contact') {
553 if (!$user->hasRight(
'societe',
'contact',
'creer')) {
557 } elseif ($feature ==
'produit|service') {
558 if (!$user->hasRight(
'produit',
'creer') && !$user->hasRight(
'service',
'creer')) {
562 } elseif ($feature ==
'prelevement') {
563 if (!$user->hasRight(
'prelevement',
'bons',
'creer')) {
567 } elseif ($feature ==
'commande_fournisseur') {
568 if (!$user->hasRight(
'fournisseur',
'commande',
'creer') || !$user->hasRight(
'supplier_order',
'creer')) {
572 } elseif ($feature ==
'banque') {
573 if (!$user->hasRight(
'banque',
'modifier')) {
577 } elseif ($feature ==
'cheque') {
578 if (!$user->hasRight(
'banque',
'cheque')) {
582 } elseif ($feature ==
'import') {
583 if (!$user->hasRight(
'import',
'run')) {
587 } elseif ($feature ==
'ecm') {
588 if (!$user->hasRight(
'ecm',
'upload')) {
592 } elseif ($feature ==
'modulebuilder') {
593 if (!$user->hasRight(
'modulebuilder',
'run')) {
597 } elseif ($feature ==
'payment') {
598 if (!$user->hasRight(
'facture',
'paiement')) {
602 } elseif ($feature ==
'payment_supplier') {
603 if (!$user->hasRight(
'fournisseur',
'facture',
'creer')) {
607 } elseif ($feature ==
'webhook') {
608 if (empty($user->admin)) {
612 } elseif (!empty($feature2)) {
613 foreach ($feature2 as $subfeature) {
614 if ($subfeature ==
'user' && $user->id == $objectid && $user->hasRight(
'user',
'self',
'creer')) {
617 if ($subfeature ==
'user' && $user->id == $objectid && $user->hasRight(
'user',
'self',
'password')) {
620 if ($subfeature ==
'user' && $user->id != $objectid && $user->hasRight(
'user',
'user',
'password')) {
624 if (!$user->hasRight($feature, $subfeature,
'creer')
625 && !$user->hasRight($feature, $subfeature,
'write')
626 && !$user->hasRight($feature, $subfeature,
'create')) {
635 } elseif (!empty($feature)) {
637 if (!$user->hasRight($feature,
'creer')
638 && !$user->hasRight($feature,
'write')
639 && !$user->hasRight($feature,
'create')) {
647 if (preg_match(
'/\|/', $features) && $nbko < count($featuresarray)) {
651 if ($wemustcheckpermissionforcreate && !$createok) {
663 if (
GETPOST(
'action',
'aZ09') ==
'confirm_create_user' &&
GETPOST(
"confirm",
'aZ09') ==
'yes') {
664 if (!$user->hasRight(
'user',
'user',
'creer')) {
668 if (!$createuserok) {
681 if ($wemustcheckpermissionfordelete) {
682 foreach ($featuresarray as $feature) {
683 if ($feature ==
'bookmark') {
684 if (!$user->hasRight(
'bookmark',
'supprimer')) {
685 if ($user->id !=
$object->fk_user || !$user->hasRight(
'bookmark',
'creer')) {
689 } elseif ($feature ==
'contact') {
690 if (!$user->hasRight(
'societe',
'contact',
'supprimer')) {
693 } elseif ($feature ==
'produit|service') {
694 if (!$user->hasRight(
'produit',
'supprimer') && !$user->hasRight(
'service',
'supprimer')) {
697 } elseif ($feature ==
'commande_fournisseur') {
698 if (!$user->hasRight(
'fournisseur',
'commande',
'supprimer')) {
701 } elseif ($feature ==
'payment_supplier') {
702 if (!$user->hasRight(
'fournisseur',
'facture',
'creer')) {
705 } elseif ($feature ==
'payment') {
706 if (!$user->hasRight(
'facture',
'paiement')) {
709 } elseif ($feature ==
'payment_sc') {
710 if (!$user->hasRight(
'tax',
'charges',
'creer')) {
713 } elseif ($feature ==
'banque') {
714 if (!$user->hasRight(
'banque',
'modifier')) {
717 } elseif ($feature ==
'cheque') {
718 if (!$user->hasRight(
'banque',
'cheque')) {
721 } elseif ($feature ==
'ecm') {
722 if (!$user->hasRight(
'ecm',
'upload')) {
725 } elseif ($feature ==
'ftp') {
726 if (!$user->hasRight(
'ftp',
'write')) {
729 } elseif ($feature ==
'salaries') {
730 if (!$user->hasRight(
'salaries',
'delete')) {
733 } elseif ($feature ==
'adherent') {
734 if (!$user->hasRight(
'adherent',
'supprimer')) {
737 } elseif ($feature ==
'paymentbybanktransfer') {
738 if (!$user->hasRight(
'paymentbybanktransfer',
'create')) {
741 } elseif ($feature ==
'prelevement') {
742 if (!$user->hasRight(
'prelevement',
'bons',
'creer')) {
745 } elseif (!empty($feature2)) {
746 foreach ($feature2 as $subfeature) {
747 if (!$user->hasRight($feature, $subfeature,
'supprimer') && !$user->hasRight($feature, $subfeature,
'delete')) {
754 } elseif (!empty($feature)) {
756 if (!$user->hasRight($feature,
'supprimer')
757 && !$user->hasRight($feature,
'delete')
758 && !$user->hasRight($feature,
'run')) {
765 if (preg_match(
'/\|/', $features) && $nbko < count($featuresarray)) {
769 if (!$deleteok && !($isdraft && $createok)) {
781 if (!empty($objectid) && $objectid > 0) {
783 $params = array(
'objectid' => $objectid,
'features' => implode(
',', $featuresarray),
'features2' => $feature2);
814function checkUserAccessToObject($user, array $featuresarray,
$object = 0, $tableandshare =
'', $feature2 =
'', $dbt_keyfield =
'', $dbt_select =
'rowid', $parenttableforentity =
'')
823 $objectid = preg_replace(
'/[^0-9\.\,]/',
'', (
string) $objectid);
830 $params = explode(
'&', $tableandshare);
831 $dbtablename = (!empty($params[0]) ? $params[0] :
'');
832 $sharedelement = (!empty($params[1]) ? $params[1] : $dbtablename);
834 foreach ($featuresarray as $feature) {
840 if ($feature ==
'bom') {
841 $feature =
'bom_bom';
843 if ($feature ==
'societe' && !empty($feature2) && is_array($feature2) && in_array(
'contact', $feature2)) {
844 $feature =
'contact';
847 if ($feature ==
'member') {
848 $feature =
'adherent';
850 if ($feature ==
'category') {
851 $feature =
'categorie';
853 if ($feature ==
'bank') {
856 if ($feature ==
'contract') {
857 $dbtablename =
'contrat';
859 if ($feature ==
'mrp') {
860 $dbtablename =
'mrp_mo';
862 if ($feature ==
'order_supplier' || ($feature ==
'fournisseur' && is_object(
$object) &&
$object->element ==
'order_supplier')) {
863 $dbtablename =
'commande_fournisseur';
865 if ($feature ==
'invoice_supplier' || ($feature ==
'fournisseur' && is_object(
$object) &&
$object->element ==
'invoice_supplier')) {
866 $dbtablename =
'facture_fourn';
868 if ($feature ==
'produit') {
869 $dbtablename =
'product';
871 if ($feature ==
'ficheinter') {
872 $dbtablename =
'fichinter';
874 if ($feature ==
'banque') {
876 $dbtablename =
'bank_account';
878 if ($feature ==
'project') {
881 if ($feature ==
'projet' && !empty($feature2) && is_array($feature2) && !empty(array_intersect(array(
'project_task',
'projet_task'), $feature2))) {
882 $feature =
'project_task';
884 if ($feature ==
'stock') {
885 $dbtablename =
'entrepot';
887 if ($feature ==
'task' || $feature ==
'projet_task') {
888 $feature =
'project_task';
889 $dbtablename =
'projet_task';
891 if ($feature ==
'eventorganization') {
893 $dbtablename =
'actioncomm';
895 if ($feature ==
'payment_sc' && empty($parenttableforentity)) {
897 $parenttableforentity =
'';
898 $dbtablename =
"chargesociales";
899 $feature =
"chargesociales";
900 $objectid = (string)
$object->fk_charge;
902 if ($feature ==
'workstation') {
903 $dbtablename =
'workstation_workstation';
906 $checkonentityready = 0;
910 $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',
'workstation');
912 $checksoc = array(
'societe');
914 $checkparentsoc = array(
'agenda',
'contact',
'contrat',
'ticket');
916 $checkproject = array(
'projet',
'project');
918 $checktask = array(
'projet_task',
'project_task');
920 $checkhierarchy = array(
'expensereport',
'holiday',
'hrm');
922 $checkuser = array(
'bookmark');
924 $nocheck = array(
'barcode',
'webhook');
929 if (empty($dbtablename)) {
930 $dbtablename = $feature;
931 $sharedelement = (!empty($params[1]) ? $params[1] : $dbtablename);
939 if (!empty($objectid) && in_array($dbtablename, array(
'asset',
'paiement',
'paiementfourn',
'workstation_workstation',
'hrm_job',
'hrm_job_user',
'hrm_skill'))) {
943 if (!empty($user->socid)) {
946 if (in_array($dbtablename, array(
'hrm_job',
'hrm_job_user',
'hrm_skill'))) {
952 $nocheck[] = $feature;
960 if ($dbt_select !=
'rowid' && $dbt_select !=
'id') {
961 $objectid =
"'".$objectid.
"'";
967 if (in_array($feature, $check) && !empty($objectid)) {
968 $sql =
"SELECT COUNT(dbt.".$db->sanitize($dbt_select).
") as nb";
969 $sql .=
" FROM ".MAIN_DB_PREFIX.$db->sanitize($dbtablename).
" as dbt";
970 if (($feature ==
'user' || $feature ==
'usergroup') &&
isModEnabled(
'multicompany')) {
972 if (
$conf->entity == 1 && $user->admin && !$user->entity) {
973 $sql .=
" WHERE dbt.".$db->sanitize($dbt_select).
" IN (".$db->sanitize($objectid, 1).
")";
974 $sql .=
" AND dbt.entity IS NOT NULL";
976 $sql .=
",".MAIN_DB_PREFIX.
"usergroup_user as ug";
977 $sql .=
" WHERE dbt.".$db->sanitize($dbt_select).
" IN (".$db->sanitize($objectid, 1).
")";
978 $sql .=
" AND ((ug.fk_user = dbt.rowid";
979 $sql .=
" AND ug.entity IN (".getEntity(
'usergroup').
"))";
980 $sql .=
" OR dbt.entity = 0)";
983 $sql .=
" WHERE dbt.".$db->sanitize($dbt_select).
" IN (".$db->sanitize($objectid, 1).
")";
984 $sql .=
" AND dbt.entity IN (".getEntity($sharedelement, 1).
")";
988 if ($parenttableforentity && preg_match(
'/(.*)@(.*)/', $parenttableforentity, $reg)) {
989 $sql .=
", ".MAIN_DB_PREFIX.$db->sanitize($reg[2]).
" as dbtp";
990 $sql .=
" WHERE dbt.".$db->sanitize($reg[1]).
" = dbtp.rowid AND dbt.".$db->sanitize($dbt_select).
" IN (".$db->sanitize($objectid, 1).
")";
991 $sql .=
" AND dbtp.entity IN (".getEntity($sharedelement, 1).
")";
993 $sql .=
" WHERE dbt.".$db->sanitize($dbt_select).
" IN (".$db->sanitize($objectid, 1).
")";
994 $sql .=
" AND dbt.entity IN (".getEntity($sharedelement, 1).
")";
997 $checkonentityready = 1;
1001 if (in_array($feature, $checksoc) && !empty($objectid)) {
1003 if ($user->socid > 0) {
1004 if ((
string) $user->socid != $objectid) {
1007 } elseif (
isModEnabled(
'societe') && !$user->hasRight(
'societe',
'lire') && !$user->hasRight(
'societe',
'client',
'voir')) {
1008 dol_syslog(
"security.lib.php::checkUserAccessToObject Deny access due: (isModEnabled('societe') && !user->hasRight('societe', 'lire') && !user->hasRight('societe', 'client', 'voir'))", LOG_DEBUG);
1010 } elseif (
isModEnabled(
"societe") && ($user->hasRight(
'societe',
'lire') && !$user->hasRight(
'societe',
'client',
'voir'))) {
1012 $sql =
"SELECT COUNT(sc.fk_soc) as nb";
1013 $sql .=
" FROM (".MAIN_DB_PREFIX.
"societe_commerciaux as sc";
1014 $sql .=
", ".MAIN_DB_PREFIX.
"societe as s)";
1015 $sql .=
" WHERE sc.fk_soc IN (".$db->sanitize($objectid, 1).
")";
1016 $sql .=
" AND (sc.fk_user = ".((int) $user->id);
1018 $userschilds = $user->getAllChildIds();
1019 if (!empty($userschilds)) {
1020 $sql .=
" OR sc.fk_user IN (".$db->sanitize(implode(
',', $userschilds)).
")";
1024 $sql .=
" AND sc.fk_soc = s.rowid";
1025 $sql .=
" AND s.entity IN (".getEntity($sharedelement, 1).
")";
1028 $sql =
"SELECT COUNT(s.rowid) as nb";
1029 $sql .=
" FROM ".MAIN_DB_PREFIX.
"societe as s";
1030 $sql .=
" WHERE s.rowid IN (".$db->sanitize($objectid, 1).
")";
1031 $sql .=
" AND s.entity IN (".getEntity($sharedelement, 1).
")";
1034 $checkonentityready = 1;
1037 if (in_array($feature, $checkparentsoc) && !empty($objectid)) {
1038 if ($user->socid > 0) {
1040 $sql =
"SELECT COUNT(dbt.".$db->sanitize($dbt_select).
") as nb";
1041 $sql .=
" FROM ".MAIN_DB_PREFIX.$dbtablename.
" as dbt";
1042 $sql .=
" WHERE dbt.".$db->sanitize($dbt_select).
" IN (".$db->sanitize($objectid, 1).
")";
1043 $sql .=
" AND dbt.entity IN (".getEntity($sharedelement, 1).
")";
1044 $sql .=
" AND dbt.fk_soc = ".((int) $user->socid);
1045 } elseif (
isModEnabled(
"societe") && ($user->hasRight(
'societe',
'lire') && !$user->hasRight(
'societe',
'client',
'voir'))) {
1047 $sql =
"SELECT COUNT(dbt.".$db->sanitize($dbt_select).
") as nb";
1048 $sql .=
" FROM ".MAIN_DB_PREFIX.$dbtablename.
" as dbt";
1049 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"societe_commerciaux as sc ON dbt.fk_soc = sc.fk_soc AND sc.fk_user = ".((int) $user->id);
1050 $sql .=
" WHERE dbt.".$db->sanitize($dbt_select).
" IN (".$db->sanitize($objectid, 1).
")";
1051 $sql .=
" AND (dbt.fk_soc IS NULL OR sc.fk_soc IS NOT NULL)";
1052 $sql .=
" AND dbt.entity IN (".getEntity($sharedelement, 1).
")";
1055 $sql =
"SELECT COUNT(dbt.".$db->sanitize($dbt_select).
") as nb";
1056 $sql .=
" FROM ".MAIN_DB_PREFIX.$dbtablename.
" as dbt";
1057 $sql .=
" WHERE dbt.".$db->sanitize($dbt_select).
" IN (".$db->sanitize($objectid, 1).
")";
1058 $sql .=
" AND dbt.entity IN (".getEntity($sharedelement, 1).
")";
1061 $checkonentityready = 1;
1064 if (in_array($feature, $checkproject) && !empty($objectid)) {
1065 if (
isModEnabled(
'project') && !$user->hasRight(
'projet',
'all',
'lire')) {
1066 $projectid = $objectid;
1068 include_once DOL_DOCUMENT_ROOT.
'/projet/class/project.class.php';
1069 $projectstatic =
new Project($db);
1070 $tmps = $projectstatic->getProjectsAuthorizedForUser($user, 0, 1, 0);
1072 $tmparray = explode(
',', $tmps);
1073 if (!in_array($projectid, $tmparray)) {
1077 $sql =
"SELECT COUNT(dbt.".$db->sanitize($dbt_select).
") as nb";
1078 $sql .=
" FROM ".MAIN_DB_PREFIX.$dbtablename.
" as dbt";
1079 $sql .=
" WHERE dbt.".$db->sanitize($dbt_select).
" IN (".$db->sanitize($objectid, 1).
")";
1080 $sql .=
" AND dbt.entity IN (".getEntity($sharedelement, 1).
")";
1082 $checkonentityready = 1;
1085 if (in_array($feature, $checktask) && !empty($objectid)) {
1086 if (
isModEnabled(
'project') && !$user->hasRight(
'projet',
'all',
'lire')) {
1087 if (preg_match(
'/,/', $objectid)) {
1090 $task =
new Task($db);
1091 $task->fetch((
int) $objectid);
1092 $projectid = $task->fk_project;
1094 include_once DOL_DOCUMENT_ROOT.
'/projet/class/project.class.php';
1095 $projectstatic =
new Project($db);
1096 $tmps = $projectstatic->getProjectsAuthorizedForUser($user, 0, 1, 0);
1098 $tmparray = explode(
',', $tmps);
1099 if (!in_array($projectid, $tmparray)) {
1103 $sharedelement =
'project';
1104 $sql =
"SELECT COUNT(dbt.".$db->sanitize($dbt_select).
") as nb";
1105 $sql .=
" FROM ".MAIN_DB_PREFIX.$dbtablename.
" as dbt";
1106 $sql .=
" WHERE dbt.".$db->sanitize($dbt_select).
" IN (".$db->sanitize($objectid, 1).
")";
1107 $sql .=
" AND dbt.entity IN (".getEntity($sharedelement, 1).
")";
1110 $checkonentityready = 1;
1114 if (!$checkonentityready && !in_array($feature, $nocheck) && !empty($objectid)) {
1116 if ($user->socid > 0) {
1117 if (empty($dbt_keyfield)) {
1118 dol_print_error(
null,
'Param dbt_keyfield is required but not defined');
1120 $sql =
"SELECT COUNT(dbt.".$db->sanitize($dbt_keyfield).
") as nb";
1121 $sql .=
" FROM ".MAIN_DB_PREFIX.$dbtablename.
" as dbt";
1122 $sql .=
" WHERE dbt.rowid IN (".$db->sanitize($objectid, 1).
")";
1123 $sql .=
" AND dbt.".$db->sanitize($dbt_keyfield).
" = ".((int) $user->socid);
1124 } elseif (
isModEnabled(
"societe") && !$user->hasRight(
'societe',
'client',
'voir')) {
1126 if (empty($dbt_keyfield)) {
1127 dol_print_error(
null,
'Param dbt_keyfield is required but not defined');
1129 if ($feature !=
'ticket') {
1130 $sql =
"SELECT COUNT(sc.fk_soc) as nb";
1131 $sql .=
" FROM ".MAIN_DB_PREFIX.$db->sanitize($dbtablename).
" as dbt";
1132 $sql .=
", ".MAIN_DB_PREFIX.
"societe_commerciaux as sc";
1133 $sql .=
" WHERE dbt.".$db->sanitize($dbt_select).
" IN (".$db->sanitize($objectid, 1).
")";
1134 $sql .=
" AND dbt.entity IN (".getEntity($sharedelement, 1).
")";
1135 $sql .=
" AND sc.fk_soc = dbt.".$db->sanitize($dbt_keyfield);
1136 $sql .=
" AND (sc.fk_user = ".((int) $user->id);
1138 $userschilds = $user->getAllChildIds();
1139 if (!empty($userschilds)) {
1140 $sql .=
" OR sc.fk_user IN (".$db->sanitize(implode(
',', $userschilds)).
")";
1146 $sql =
"SELECT COUNT(dbt.".$db->sanitize($dbt_select).
") as nb";
1147 $sql .=
" FROM ".MAIN_DB_PREFIX.$dbtablename.
" as dbt";
1148 $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);
1149 $sql .=
" WHERE dbt.".$db->sanitize($dbt_select).
" IN (".$db->sanitize($objectid, 1).
")";
1150 $sql .=
" AND dbt.entity IN (".getEntity($sharedelement, 1).
")";
1151 $sql .=
" AND (sc.fk_user = ".((int) $user->id).
" OR dbt.".$dbt_keyfield.
" IS NULL OR dbt.".$dbt_keyfield.
" = 0)";
1153 } elseif (
isModEnabled(
'multicompany') && (!empty(
$object->ismultientitymanaged) || !isset(
$object->ismultientitymanaged))) {
1155 $sql =
"SELECT COUNT(dbt.".$db->sanitize($dbt_select).
") as nb";
1156 $sql .=
" FROM ".MAIN_DB_PREFIX.$db->sanitize($dbtablename).
" as dbt";
1157 $sql .=
" WHERE dbt.".$db->sanitize($dbt_select).
" IN (".$db->sanitize($objectid, 1).
")";
1158 $sql .=
" AND dbt.entity IN (".getEntity($sharedelement, 1).
")";
1163 if ($feature ===
'agenda' && !empty($objectid)) {
1165 if (!$user->hasRight(
'agenda',
'allactions',
'read')) {
1166 if (preg_match(
'/,/', $objectid)) {
1170 require_once DOL_DOCUMENT_ROOT.
'/comm/action/class/actioncomm.class.php';
1172 $action->fetch((
int) $objectid);
1173 if ($action->authorid != $user->id && $action->userownerid != $user->id && !(array_key_exists($user->id, $action->userassigned))) {
1181 if (in_array($feature, $checkhierarchy) && is_object(
$object) && !empty($objectid)) {
1182 $childids = $user->getAllChildIds(1);
1184 if ($feature ==
'holiday') {
1185 $useridtocheck =
$object->fk_user;
1186 if (!$user->hasRight(
'holiday',
'readall') && !in_array($useridtocheck, $childids) && !in_array(
$object->fk_validator, $childids)) {
1190 if ($feature ==
'expensereport') {
1191 $useridtocheck =
$object->fk_user_author;
1192 if (!$user->hasRight(
'expensereport',
'readall')) {
1193 if (!in_array($useridtocheck, $childids)) {
1198 if ($feature ==
'hrm' && in_array(
'evaluation', $feature2)) {
1199 $useridtocheck =
$object->fk_user;
1201 if ($user->hasRight(
'hrm',
'evaluation',
'readall')) {
1205 if (!$user->hasRight(
'hrm',
'evaluation',
'read')) {
1210 return in_array($useridtocheck, $childids);
1216 if (in_array($feature, $checkuser) && is_object(
$object) && !empty($objectid)) {
1217 $useridtocheck =
$object->fk_user;
1218 if (!empty($useridtocheck) && $useridtocheck > 0 && $useridtocheck != $user->id && empty($user->admin)) {
1224 $resql = $db->query($sql);
1226 $obj = $db->fetch_object($resql);
1227 if (!$obj || $obj->nb < count(explode(
',', $objectid))) {
1231 dol_syslog(
"Bad forged sql in security.lib.php::checkUserAccessToObject", LOG_WARNING);
1237 dol_syslog(
"security.lib.php::checkUserAccessToObject::return True", LOG_DEBUG);