PDA

View Full Version : مشکل در احراز هویت و مدیریت نقش ها در Asp



omid yeganeh
یک شنبه 04 مهر 1395, 15:39 عصر
سلام خدمت اساتید محترمhttp://barnamenevisan.org/ckeditor/plugins/smiley/images/heart.gif
یه فولدر توی پروژم ساختم به اسم Administrator و صفحات مدیریت داخلش هست
دوتا جدول دیتا بیس به نام های Users , Roles دارم و در جدول
دوتا نقش توی جدول Roles تعریف کردم به نام های Admin , Customer
میخوام فقط اون یوزر هایی که نقش ادمین بهشون میدم به محض لاگین کردن هدایت بشن به صفحه مدیریت و یوزر های معمولی که Customer هستن به محض لاگین کردن برن به صفحه پروفایل. الان من اینطوری نوشتم کد ها رو این خطا ها رو میده لطفا راهنمایی کنید یا اگه روش ساده تری دارین بگید ممنون.
این متود چک لاگین صفحه لاگین



protected bool CheckLogin(string UserName, string Password)
{
string c = WebConfigurationManager.ConnectionStrings["DataBaseConnectionString"].ConnectionString;
SqlConnection cn = new SqlConnection(c);
string str = "select * from Users where UserName=@u and Password=@p";
SqlCommand cmd = new SqlCommand(str, cn);
cmd.Parameters.AddWithValue("@u", txtUserName.Text);
cmd.Parameters.AddWithValue("@p", txtPassword.Text);
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
da.Fill(dt);

if (dt.Rows.Count==1)
{
return true;
}
return false;
}


اینم کد رخداد کلیک دکمه لاگین



protected void btnLogin_Click(object sender, EventArgs e)
{
if (Page.IsValid)
{

FormsAuthentication.SetAuthCookie(txtUserName.Text , chbRememberMe.Checked);
if (Roles.GetRolesForUser(txtUserName.Text)[0]=="Admin")
{
Response.Redirect("~/Administrator/Manager.aspx");
}
if (Roles.GetRolesForUser(txtUserName.Text)[0] == "Customer")
{
Response.Redirect("~/Default.aspx");
}

}

}


اینم کدی که توی وب کانفیگ فولدر ادمین گداشتم


<?xml version="1.0"?>
<configuration>
<system.web>
<authorization>
<allow roles="Admin"/>
<deny users="*"/>
</authorization>
</system.web>
</configuration>


یه کلاس به اسم MyProv ساختم در متود GetRolesForUser کد زیر رو نوشتم



public override string[] GetRolesForUser(string username)
{
SqlDataReader reader;
SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrin gs["DataBase"].ToString());
connection.Open();
string MyQuery = "SELECT RoleName FROM Users INNER JOIN Roles ON" +
" Users.UserName=@UserName AND Users.RoleId_FK=Roles.RoleId";
SqlCommand cmd = new SqlCommand(MyQuery, connection);
cmd.Parameters.AddWithValue("Username", username);
reader = cmd.ExecuteReader();
reader.Read();
string[] result = new string[1];
result[0] = reader["RoleName"].ToString();
return result;
}


حالا اگه یوزر پسورد اشتباه وارد کنم که خطای نادرست بودن پسورد میده ولی اگه درست وارد کنم این خطا رو میده

142763

بعد در قسمت وب کانفیگ این کد رو اضافه کردم


<roleManager enabled="true" defaultProvider="MyProv">
<providers>
<clear/>
<add name="MyProv" type="MyProv"/>
</providers>
</roleManager>


حالا وقتی اجرا میکنم این خطا رو میده

142764
اینم کل کد کلاس MyProvider من

using System;using System.Collections.Generic;
using System.Configuration;
using System.Data.SqlClient;
using System.Linq;
using System.Web;
using System.Web.Security;

/// <summary>
/// Summary description for MyProv
/// </summary>
///

public class MyProv : RoleProvider
{
public MyProv()
{
//
// TODO: Add constructor logic here
//
}

public override string ApplicationName
{
get
{
throw new NotImplementedException();
}

set
{
throw new NotImplementedException();
}
}

public override void AddUsersToRoles(string[] usernames, string[] roleNames)
{
throw new NotImplementedException();
}

public override void CreateRole(string roleName)
{
throw new NotImplementedException();
}

public override bool DeleteRole(string roleName, bool throwOnPopulatedRole)
{
throw new NotImplementedException();
}

public override string[] FindUsersInRole(string roleName, string usernameToMatch)
{
throw new NotImplementedException();
}

public override string[] GetAllRoles()
{
throw new NotImplementedException();
}

public override string[] GetRolesForUser(string username)
{
SqlDataReader reader;
SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrin gs["DataBase"].ToString());
connection.Open();
string MyQuery = "SELECT RoleName FROM Users INNER JOIN Roles ON" +
" Users.UserName=@UserName AND Users.RoleId_FK=Roles.RoleId";
SqlCommand cmd = new SqlCommand(MyQuery, connection);
cmd.Parameters.AddWithValue("Username", username);
reader = cmd.ExecuteReader();
reader.Read();
string[] result = new string[1];
result[0] = reader["RoleName"].ToString();
return result;
}

public override string[] GetUsersInRole(string roleName)
{
throw new NotImplementedException();
}

public override bool IsUserInRole(string username, string roleName)
{
throw new NotImplementedException();
}

public override void RemoveUsersFromRoles(string[] usernames, string[] roleNames)
{
throw new NotImplementedException();
}

public override bool RoleExists(string roleName)
{
throw new NotImplementedException();
}
}

از اساتید محترم خواهش میکنم راهنمایی کنن یا اگه راه ساده تری سراغ دارن بگن از اون راه بریم جلو من دارم از دیتا ست استفاده میکنم
ممنون

فکر کنم توی وب کانفیگ قسمت

<roleManager enabled="true" defaultProvider="MyProv">
<providers>
<clear/>
<add name="MyProv" type="MyProv"/>
</providers>
</roleManager>

type این قسمت رو
<add name="MyProv" type="MyProv"/>

دارم اشتباه وارد میکنم و هرطور دیگه هم واردش میکنم بازم همین خطا رو میده لطفا راهنمایی کنید



<roleManager enabled="true" defaultProvider="MyProv">
<providers>
<clear/>
<add name="MyProv" type="MyProv"/>
</providers>
</roleManager>

omid yeganeh
دوشنبه 05 مهر 1395, 10:18 صبح
یعنی از اساتید کسی نمیتونه مشکل مارو حل کنه؟؟؟؟

Hco_Company
سه شنبه 19 بهمن 1395, 15:47 عصر
http://substantialmotion.ir/ShowNew.aspx?NID=28