0

次のような3つのユーザーアクセスレベルを作成する必要があるasp.netにログインページを作成する必要があります

そこで電子メールと更新を表示できるユーザー 電子メールと更新を表示し、一部のユーザーを削除できるスーパーユーザー スーパーユーザーもすべて表示して削除できる管理者。

私のログインページには、ユーザー名パスワードとログインボタンがあります

ユーザー/管理者/スーパーユーザーがボタンをクリックすると、ユーザーレベルに応じて自動的にリダイレクトされます。

ユーザー名、パスワード、ユーザーID、ユーザーアクセスタイプ、電子メールのデータベースがあります。ここでの問題は、データベースの切断されたアーキテクチャで、またストアド プロシージャを使用せずに、useraccesstype に基づいて if コマンドを記述する方法がわからないことです。

 String Uid = TextBox1.Text;
 String Pwd = TextBox2.Text;

 SqlConnection con = new SqlConnection(@"Data Source=Sun-PC\SQLEXPRESS;Initial Catalog=dts;Persist Security Info=True;User ID=sa;Password=********;");
 SqlDataAdapter da;
 da = new SqlDataAdapter("Select userid,password,useraccesstype from Table2 WHERE userid = " + Uid + " and password ='" + Pwd + "'", con);
 DataSet ds = new DataSet("Table2");
 da.Fill(ds, "Table2");

 if (Uid == "userid" && Pwd == "password")
 {
     if (uzrtype3 = "componentadmin")
     {
         Response.Redirect("userpage.aspx");
     }
     if (uzrtype = "user")
     {
         Response.Redirect("register.aspx");
     }
 }
 else
 {
     Label123.Text = "Sorry, user not recognized - please try again";
 }
4

1 に答える 1

1

行間を読んで、「ユーザーアクセスタイプを取得する方法」を尋ねていると思いますか? もしそうなら、現在のコードで、おそらく:

if(ds.Tables[0].Rows.Count == 1) {
    // match
    var accessType = ({appropriate cast here})ds.Tables[0].Rows[0]["useraccesstype"];
} else {
    // no match
}

でも!さまざまなパラメーターの問題を解決し、より安全にするために、別の方法でそれを行います-便宜上「dapper-dot-net」を使用します(google it):

string userid = ....
string password = ...
var row = con.Query(
   "Select useraccesstype from Table2 WHERE userid = @userid and password = @password",
   new { userid, password }).FirstOrDefault();
if(row == null) {
    // no match
} else {
    var accessType = ({some cast here})row.useraccesstype;
}

パスワードのソルトハッシュも検討する必要があります。

userid/password を返す意味はありません。すでにそれらを知っています。ExecuteScalar を使用することもできますが、その場合はパラメーターを自分で処理する必要があります。

于 2012-05-12T10:24:36.290 に答える