我正在使用PHP和AngularJS开发一个Web应用程序。
我想将导航栏的一部分限制为具有特殊行的用户。 (就像管理员一样)
我在控制器中创建了angularJS函数,该函数在PHP控制器中调用了一个函数。 (我正在使用MVC,并且没有PHP框架)
问题是我在参数中传递了一个变量会话,该会话可以在数据库中标识我的用户,并且无法正常工作。
该功能不起作用。日志中没有错误,控制台中没有错误,什么都没有。如果我有权查看导航栏的“管理员”部分,则不会返回。
PHP函数
function verifierHabilitation ( $req, $api ){
if(droitsModificationAdmin( $_SESSION['nni'] ) == "administration") {
return 1;
}
}
我正在调用函数droitsModificationAdmin()来验证行,并且在参数中使用了变量会话。
导航栏中的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;
}
}
我在这里调用全局控制器中的函数。
全局控制器
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);
}
}
?>
答案 0 :(得分:0)
$ http服务不返回值,它返回一个需要从中提取值的promise:
$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;
});
};
您的代码还有其他问题,但这应该为您提供显示问题的控制台消息。
答案 1 :(得分:-1)
好的,因为您需要一些权限模块,所以可以执行以下操作: 创建一个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>
好像您正在从JAVASCRIPT调用PHP函数。 您不能这样做。 您必须发出HTTP请求(AJAX CALL)才能执行此操作。 如果您有任何疑问,请告诉我。