module authentification asp c#
Bonjour, priere de m'aider a reussir mon module de l'authentification :
j'ai crée 3 roles admin, service1, service 2
dans mon projet j'ai les dossier suivants :
Account (login, changer mot de passe) avec web config allow admin, service1, service 2
Administrateurs (register, utilisateurs) admin, service1, service 2
Service1(paage 1, 2) admin, service1,
Service2(page 3, page 4) admin, , service 2
Defaut et master page
webconfig <deny users="?" />
mais j'ai beacoup de probleme, ca ne marche pas comme je veux :
- quand j'affecte admin a un ustilisteurs ca ne marche pas, par contre je peux affecter les autres
- dans mon fichier login j'ai mis le code suivant :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
|
protected void Page_Load(object sender, EventArgs e)
{
string pageDestination = "Default.aspx";
string username = ((TextBox)this.LoginUser.FindControl("UserName")).Text;
if (username != "")
{
System.Data.SqlClient.SqlDataReader oDBDataReader;
String Query = "SELECT aspnet_Roles.RoleName FROM aspnet_Roles INNER JOIN aspnet_UsersInRoles ON aspnet_Roles.RoleId = aspnet_UsersInRoles.RoleId INNER JOIN " +
"aspnet_Users ON aspnet_UsersInRoles.UserId = aspnet_Users.UserId WHERE aspnet_Users.UserName='" + username + "'";
connection.Open();
DataTable dt = new DataTable();
SqlCommand cmdDatabase = new SqlCommand(Query, connection);
oDBDataReader = cmdDatabase.ExecuteReader();
dt.Load(oDBDataReader);
string[] rolesThisUser = dt.AsEnumerable().Select(row => row.Field<string>("RoleName")).ToArray();
oDBDataReader.Close();
connection.Close();
List<String> roles = rolesThisUser.ToList();
if (roles.Contains("Admin"))
{
pageDestination = "~/Default.aspx";
}
else if (roles.Contains("service1") && !roles.Contains("service2"))
{
pageDestination = "~/Default.aspx";
}
else if (!roles.Contains("service1") && roles.Contains("service2"))
{
pageDestination = "~/service2/Traitement_dossier.aspx";
}
else if (roles.Contains("service1") && roles.Contains("service2"))
{
pageDestination = "~/Default.aspx";
}
else
{
pageDestination = "Login.aspx";
}
}
LoginUser.DestinationPageUrl = pageDestination + "?ReturnUrl=" + HttpUtility.UrlEncode(Request.QueryString["ReturnUrl"]);
} |
cela veut dire si c'est le role admin ou service 1 qui sont connecté je les redirige vers default sinon si c'est service 2 c'est vers traitement
mais ca ne marche pas et parfois ca me donne improssible d'acceder a la ressource et il imbrique les dossiers Administrateurs/Service2/page ???
*- comment puis je afficher une page dans laquelle je met un message comme quoi cet utilisateur ne peut pas acceder a cette page si ce dernier n'a pas les droits suffisants
Merci pour votre aide :calim2: