Функция для проверки строки в базе данных с переменной сеанса не работает - PullRequest
0 голосов
/ 31 мая 2019

Я работаю над веб-приложением на PHP и AngularJS.

Я хочу ограничить часть моей панели навигации для пользователей, у которых есть специальная строка.(Как администраторы)

Я сделал функцию angularJS в моем контроллере, которая вызывает функцию в моем контроллере PHP.(Я работаю с MVC и без PHP-фреймворка)

Проблема в том, что я передаю переменную сессию в параметре, которую я могу идентифицировать, используя моего пользователя в моей базе данных, и она не работает.

Функция не работает.Нет ошибок в логах, нет ошибок в консоли, ничего.Часть «Admin» моей панели навигации не вернется, если я получу право на ее просмотр.

PHP-функция

function verifierHabilitation ( $req, $api ){
    if(droitsModificationAdmin( $_SESSION['nni'] ) == "administration") {
        return 1;
    }
}

Я вызываю свою функцию droitsModificationAdmin () дляпроверьте строку, и я использую переменную session в параметре.

AngularJS Вызов функции в моей панели навигации

<li class="nav-item" ng-if="droitsAdmin() == 1" >
    <h2 ng-class="{ 'grdf-ss-title' : isActive('/admin') }" >
       <a class="nav-link" href="#/admin">Admin</a>
    </h2>
</li>

Здесь я использую ng-if для проверки возврата моегопредыдущая функция.

Я не знаю, в чем проблема.У вас есть идеи?

РЕДАКТИРОВАТЬ:

Вот весь код, который я использовал:

AJS: В моем controller.js

$scope.droitsAdmin = function() { factoryDossier.verifierHabilitation(); };

В моем factory.js

verifierHabilitation : function(){

    return $http({
        url: 'controleurs/Controleur-Admin.php'
        ,method: "POST"
        ,data: $.param({
            fonction : 'verifierHabilitation'
        })
        ,headers: {'Content-Type': 'application/x-www-form-urlencoded'}
    });
},

PHP: Controller.php

function verifierHabilitation ( $req, $api ){
    if(droitsModificationAdmin( $_SESSION['nni'] ) == "administration") {
        echo "ceci est un test";
        return 1;
    }
}

Здесь я вызываю функцию, которая находится в глобальном контроллере.

Global Controller

function droitsModificationAdmin( $nni ){
    $bdd = new Model_Habilitation( PDO_bdd_app() );
    $utilisateur = $bdd->habilitation( $nni );
    return ( $utilisateur[0]['h_habilitation'] );
}

Model.php

public function habilitation( $nni ){
        $sql = $this->grea_ouest->prepare('SELECT h_habilitation FROM '.$this->table_habilitation.' h WHERE h.h_nni = :nni');
        $sql->execute( array( ':nni' => $nni ) );
        return $sql->fetchAll(PDO::FETCH_ASSOC);
    }

Controleur-Configuration.php

(извините, код на французском)

<?php

require_once('Controleur-Configuration.php');
require_once('api_rest.php');
require_once(dirname(__FILE__).'/../class/ClassAdmin.php');
require_once(model_url('Model_Admin'));
require_once('Helpers.php');

#############################################################
gestion_session();//Gestion à partir du fichier configuration
#############################################################

$api = new Rest;

try {
    $req = $api->get_request();
    if( function_exists( $req['fonction'] ) ){ $req['fonction']( $req, $api ); } else { throw new Exception('Fonction inexistante'); }
} catch(Exception $e){
    $api->response(array(), 501);
}

/**
 * Retourne les informations d'un admin
 * @param $req array : les données passées en parametres
 * @param $api Rest : l'objet Rest permettant l'interaction avec le client.
 * @return array : les informations du dossier.
 */
function getAdmins( $req, $api ){
    $bdd = new Model_Admin( PDO_bdd_app() );
    try{
        $Admins = $bdd->getAdmins();
        foreach($Admins as $key=>$Admin){ $Admins[$key] = $Admin->json_encode(); }
        $api->response( $Admins, 200);
    } catch(Exception $e){ error_log( $e ); $api->response( "", 500); }
}

/**
 * Retourne les habilitations
 * @param $req array : les données passées en parametres
 * @param $api Rest : l'objet Rest permettant l'interaction avec le client.
 * @return array : les informations du dossier.
 */
function getHabilitations( $req, $api ){
    $bdd = new Model_Admin( PDO_bdd_app() );
    try{
        $Habilitations = $bdd->getHabilitations();
        foreach($Habilitations as $key=>$Habilitation){ $Habilitations[$key] = $Habilitation->json_encode(); }
        $api->response( $Habilitations, 200);
    } catch(Exception $e){ error_log( $e ); $api->response( "", 500); }
}

/**
* Met a jour un habilité
* @param $req array : les données passées en parametres
* @param $api Rest : l'objet Rest permettant l'interaction avec le client.
* @return array : les informations du CA.
* @throws Exception : retourne une erreur 500.
*/
function updateAdmin( $req, $api ){
    $bdd = new Model_Admin( PDO_bdd_app() );
    try {
        if( isset($req['NewAdmin']) ){
            $admin = cast( $req['NewAdmin'], 'Admin' );
        } else { $api->response( array( "erreur" => array(array("Aucunes informations saisies"))), 409); }

            try
            {
                $bdd = new Model_Admin( PDO_bdd_app() );
                $newAdmin = $bdd->updateAdmin( $admin );
                $api->response( array( "dev"=>$newAdmin->json_encode(), "info"=>array("Le développeur a été modifié")), 200);
    } catch( Exception $e ){ error_log( $e ); $api->response( "", 500); }
    } catch( Exception $e ){ error_log( $e ); $api->response( "", 500); }
}

/**
* Change l'habilitation d'un utilisateur
* @param $req array : les données passées en parametres
* @param $api Rest : l'objet Rest permettant l'interaction avec le client.
* @return array : les informations du CA.
* @throws Exception : retourne une erreur 500.
*/
function changerHabilitation ($req, $api){
    $bdd = new Model_Admin( PDO_bdd_app() );
    try{
        $habilitation = $bdd->changerHabilitation( $req['nni'], $req['habilitation'] );
    } catch(Exception $e){
        error_log( $e );
        $api->response( $e, 500);
    }
}

function verifierHabilitation ( $req, $api ){
    if(droitsModificationAdmin( $_SESSION['nni'] ) == "administration") {
        echo "ceci est un test";
        return 1;
    }
}

/**
* Approuve un utilisateur
* @param $req array : les données passées en parametres
* @param $api Rest : l'objet Rest permettant l'interaction avec le client.
* @return array : les informations du CA.
* @throws Exception : retourne une erreur 500.
*/
function approuverUtilisateur ($req, $api){
    $bdd = new Model_Admin( PDO_bdd_app() );
    try{
        $utilisateur = $bdd->approuverUtilisateur( $req['nni'] );
    } catch(Exception $e){
        error_log( $e );
        $api->response( $e, 500);
    }
}

/**
* Refuse un utilisateur
* @param $req array : les données passées en parametres
* @param $api Rest : l'objet Rest permettant l'interaction avec le client.
* @return array : les informations du CA.
* @throws Exception : retourne une erreur 500.
*/
function refuserUtilisateur ($req, $api){
    $bdd = new Model_Admin( PDO_bdd_app() );
    try{
        $utilisateur = $bdd->refuserUtilisateur( $req['nni'] );
    } catch(Exception $e){
        error_log( $e );
        $api->response( $e, 500);
    }
}

?>

Ответы [ 2 ]

0 голосов
/ 31 мая 2019

Служба $ http не возвращает значение, она возвращает обещание, из которого необходимо извлечь значение:

$scope.droitsAdmin = function() {
    var promise = factoryDossier.verifierHabilitation();
    return promise.then(function (response) {
        var data = response.data;
        $scope.droitsAdminData = data;
        console.log(data);
        return data;
    }).catch(function(error) {
        console.log(error);
        throw error;
    });
};

Есть другие проблемы с вашим кодом, но это должно дать вам консольные сообщенияэто покажет проблемы.

0 голосов
/ 31 мая 2019

Хорошо, так как вам нужен какой-то модуль разрешений, вы можете сделать что-то вроде этого: создать службу Angularjs для хранения всех значений разрешений, чтобы вам не приходилось снова и снова обращаться к вашей базе данных, сохраняйте значения разрешений в этом сервисево время входа в систему.Используйте свой код следующим образом:

<div ng-if="permission == 'user'">
    Some content which you want to show to **USER** only.
</div>
<div ng-if="permission == 'user' || permission == 'admin'">
    Some content which you want to show to **USER and ADMIN** both.
</div>
<div ng-if="permission == 'admin'">
    Some content which you want to show to **ADMIN** only.
</div>

Похоже, вы вызываете свою функцию PHP из JAVASCRIPT. Вы не можете сделать это. Вы должны сделать HTTP-запрос (AJAX CALL), чтобы выполнить эту операцию. Сообщите мне, если у вас есть какие-либо сомнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...