Je veux créer une page que quelqu'un peut voir uniquement s'il est enregistré et que l'accès lui est accordé.
Pour accorder l'accès à un utilisateur, j'utilise une ligne de la table #__users nommée activated2
.
J'ai donc créé un fichier de vue dans un composant et mon view.html.php
fichier est comme ça:
class IpropertyViewVtourpaketa extends JView
{
function display($tpl = null)
{
$user = JFactory::getUser();
if (!$user) {
header('Location:index.php?msgvtour=You need to register and get activated');
}
else {
$db= JFactory::getDBO();
$query='SELECT activated2 from `#__users` where id='.$user->id;
$db->setQuery($query);
$pro=$db->loadResult();
if ($pro==0) {
header('Location: index.php?msgvtour=You need to get activated');
}else {
// Display the view
parent::display($tpl);
}
}
}
}
?>
Donc, ce que je fais, c'est: vérifiez s'il est enregistré, sinon redirigez-le. Ensuite, vérifiez s'il est activé, sinon, redirigez-le. Sinon rediriger vers la vue où il peut voir la page. Cela fonctionne vraiment bien, bien que ce que je voulais savoir soit:
Comment est-ce sécuritaire que j'utilise? Cela pourrait-il être facilement piraté ou contourné?
Il y a des choses que je changerais:
header()
par défaut de PHP. Utilisez plutôt le API Joomla pour la redirection#__users
_ table qui est une mauvaise idée, je vous conseillerais d'utiliser pleinement ACL Management de Joomla pour votre composant.J'espère que cela t'aides
Non, votre code n'est pas correct.
#__users
table, il n'y a pas d'identifiant utilisateur 0Par exemple, à partir des composants/com_users/views/profile/view.html.php:
/**
* Execute and display a template script.
*
* @param string $tpl The name of the template file to parse; automatically searches through the template paths.
*
* @return mixed A string if successful, otherwise a Error object.
*
* @since 1.6
*/
public function display($tpl = null)
{
....
// View also takes responsibility for checking if the user logged in with remember me.
$user = JFactory::getUser();
$cookieLogin = $user->get('cookieLogin');
if (!empty($cookieLogin))
{
// If so, the user must login to edit the password and other data.
// What should happen here? Should we force a logout which destroys the cookies?
$app = JFactory::getApplication();
$app->enqueueMessage(JText::_('JGLOBAL_REMEMBER_MUST_LOGIN'), 'message');
$app->redirect(JRoute::_('index.php?option=com_users&view=login', false));
return false;
}
....
return parent::display($tpl);
}