Restreindre l'acces à un dossier

emeric b Messages postés 7 Date d'inscription mardi 26 juillet 2005 Statut Membre Dernière intervention 17 septembre 2005 - 26 juil. 2005 à 14:16
crahier Messages postés 54 Date d'inscription dimanche 22 septembre 2002 Statut Membre Dernière intervention 22 avril 2011 - 22 sept. 2005 à 07:30
Salut,

Je rencontre un problème sur un site en cfm. Je souhaite restreindre l'accès à certains dossiers (un dossier restreint par membre).

En premier lieu je pensais utiliser la fameuse protection .htaccess mais l'hébergeur refuse.

Il semble que l'on puisse restreindre l'accès à un dossier à l'aide d'une appli ColdFusion. Mais j'ai rien trouver dans la rubrique Codes qui traite de cette fonctionnalité.

J'ai besoin d'un coup de pousse pour commencer...

Merci d'avance

Emeric B

8 réponses

cs_lfontaine Messages postés 203 Date d'inscription lundi 23 décembre 2002 Statut Membre Dernière intervention 11 mai 2006
29 juil. 2005 à 22:18
Salut,

Le plus simple serait de gerer un system de login lie avec une base de donnes, tu crees un form qui accepte un login et mot de passe. Ta page d'action verifie que ces infos sont dans ta table logins ou utilisateurs.
Si oui, tu cree une variable de session qui te permet de retrouver l'id de l'utilisateur logge. Si non, retour au form.

Pour proteger une page cfm, un dossier contenant des pages cfm, tu cree un application.cfm dans ce dossier avec dedans

cfparam session.userid = 0
if session.userid EQ 0
cflocation url="monurl/login.cfm" addtoken=no

Laurent
0
emeric b Messages postés 7 Date d'inscription mardi 26 juillet 2005 Statut Membre Dernière intervention 17 septembre 2005
2 août 2005 à 13:08
Slt Laurent,

D'abord merci pour le coup de pousse. Le problème c ke j'y arrive pas. Voila la situation :

Soit l'architecture suivante :

dossier_public/admin

dossier_public c la racine du site tout le monde peut consulter les pages
/admin c le dossier à protéger

Dans dossier_public j'ai une page login.cfm qui accepte un login et un mot de passe qui sont contenus dans une table de la base MS Access. Si le login et le pass sont OK l'utilisateur doit aller à /admin sinon retour à login.cfm

Voila la page login.cfm créée avec le "Connecter l'utilisateur" dans Dream MX :
::::::::::::::::::::::::::::::::::::::::::::::::::::::

<cfif IsDefined("FORM.login_tz")>
<cfset MM_redirectLoginSuccess="admin/">
<cfset MM_redirectLoginFailed="login.cfm">
<cfquery name="MM_rsUser" datasource="autodb">
SELECT login,pass FROM admin WHERE login='#FORM.login_tz#' AND pass='#FORM.pass_tz#'
</cfquery>
<cfif MM_rsUser.RecordCount NEQ 0>
<cftry>
<cflock scope="Session" timeout="30" type="Exclusive">
<cfset Session.MM_Username=FORM.login_tz>
<cfset Session.MM_UserAuthorization="">
</cflock>
<cfif IsDefined("URL.accessdenied") AND true>
<cfset MM_redirectLoginSuccess=URL.accessdenied>
</cfif>
<cflocation url="#MM_redirectLoginSuccess#" addtoken="no">
<cfcatch type="Lock"><!--- code for handling timeout of cflock --->
</cfcatch>
</cftry>
</cfif>
<cflocation url="#MM_redirectLoginFailed#" addtoken="no">
<cfelse>
<cfset MM_LoginAction=CGI.SCRIPT_NAME>
<cfif CGI.QUERY_STRING NEQ "">
<cfset MM_LoginAction=MM_LoginAction & "?" & XMLFormat(CGI.QUERY_STRING)>
</cfif>
</cfif>
<form name="form1" method="POST" action="<cfoutput>#MM_loginAction#</cfoutput>">
login,
,

----

pass,
,

----

&nbsp;,

</form>

::::::::::::::::::::::::::::::::::::::::::::::::::::::


Malheureusement ça marche pas ! Dans le dossier /admin j'ai mis la page application.cfm kom tu ma dis mé même en mettant un bon jeu login/mot de passe je retourne tjs sur login.cfm

T'as une idée ?
Merci d'avance
Emeric

PS : y'a quelques mois tu m'avais conseillé Autoresize de CFDev.com et franchement ça marche très bien. Merci !
0
cs_lfontaine Messages postés 203 Date d'inscription lundi 23 décembre 2002 Statut Membre Dernière intervention 11 mai 2006
3 août 2005 à 04:02
Salut,

humm interessant l'usine a gaz.
Tu as mis quoi dans ton fichier application.cfm ?

j'ai quelques idees a mon avis tu as une erreur qui est capturee par le cftry ce qui fait que tu ne la voie pas.

Mais je serais toi je simplifierait le tout du genre:

<cfparam name="FORM.login_tz" default="">
<cfif FORM.login_tz NEQ "">
<cfquery name="MM_rsUser" datasource="autodb">
SELECT login FROM admin WHERE login='#FORM.login_tz#' AND pass='#FORM.pass_tz#'
</cfquery>
<cfif MM_rsUser.RecordCount NEQ 0>
<cfset Session.MM_Username=FORM.login_tz>
<cflocation url="admin/index.cfm" addtoken="no">
</cfif>
</cfif>
<form name="form1" method="POST" action="#">
login,
#FORM.login_tz#</cfoutput>" id="login_tz">,

----

pass,
,

----

&nbsp;,

</form>

le fichier Application.cfm dans admin deviendrais donc

<cfparam name="session.MM_Username" default = 0>
<cfif session.MM_Username EQ 0 >
<cflocation url="/login.cfm" addtoken="no">
</cfif>

Penses a creer un fichier index.cfm dans le repertoire admin.

Laurent
0
emeric b Messages postés 7 Date d'inscription mardi 26 juillet 2005 Statut Membre Dernière intervention 17 septembre 2005
4 août 2005 à 14:41
Salut,


Désolé pour l'usine à gaz mais je dois avouer que ce probleme de restriction d'accès ça me dépasse.
Ton code fonctionne déjà mieux mais si je tape le bon login et mot de passe il me sort l'erreur suivante :


Erreurs signalées par le compilateur Java :


Found 1 semantic error compiling
"C:/CFusionMX/wwwroot/WEBINF/cfclasses/cfApplication2ecfm306801756.java":
1. public final class cfApplication2ecfm306801756 extends
coldfusion.runtime.CFPage{ <------------------------->
*** Error: Cannot write class file
"cfApplication2ecfm306801756.class" because that name
conflicts with the name of the class file
"cfapplication2ecfm306801756.class" in directory
"cfclasses". This is illegal because file names are case-insensitive in this system.


T'as une idée ?


Merci
Emeric
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_lfontaine Messages postés 203 Date d'inscription lundi 23 décembre 2002 Statut Membre Dernière intervention 11 mai 2006
5 août 2005 à 01:12
Salut,

Humm strange, n'aurais tu pas renomme ton fichier application.cfm en Application.cfm ?

Essayes de trouver le repertoire WEBINF, dans ce repertoire tu as un repertoire cfclasses, supprime le fichier cfapplication2ecfm306801756.class
Cela devrait supprimer l'erreur.

Laurent
0
crahier Messages postés 54 Date d'inscription dimanche 22 septembre 2002 Statut Membre Dernière intervention 22 avril 2011
21 sept. 2005 à 15:34
Bonjour,


Ne faudrait-il pas également tester si #session.MM_Username# = le nom du répertoire car une personne logguée pourrait très bien aller dans le répertoire d'une autre, non ?

Christophe
0
cs_lfontaine Messages postés 203 Date d'inscription lundi 23 décembre 2002 Statut Membre Dernière intervention 11 mai 2006
22 sept. 2005 à 00:46
Salut,

Je ne pense pas que le but soit d'avoir un repertoire par utilisateur. Juste s'assurer que la personne est identifiee avant d'acceder a un certain repertoire.

Laurent
0
crahier Messages postés 54 Date d'inscription dimanche 22 septembre 2002 Statut Membre Dernière intervention 22 avril 2011
22 sept. 2005 à 07:30
Possible ... :-) C'était juste au cas où ;-)
0