2016-06-16 18 views
0

こんにちは私はC#webserviceとajaxコールでログインしていますが、問題はありますが、ユーザータイプが2つ(adminとuser)です。彼はユーザーの種類に応じて彼のページにリダイレクトされますが、彼がアクセスできる管理者のURLを書くとき、私の質問はどのようにユーザーの種類を検証し、ページへのアクセスを許可するのですか?はい、これ。ユーザータイプに応じてページへのアクセスを制限する

jQueryの(検証のlocalStorageステータス):

function verifySesion() { 

if (localStorage.UsuNombre == null) 
    document.location.href = "index.html"; 
else 
    $('#msj').html('Welcome: ' + localStorage.UsuNombre + '...'); 

}

jQueryのAJAX呼び出しのために:

function validarSesion() { 
var usu = $('#Usuario').val(); 
var pass = $('#Contraseña').val(); 

if (usu != "" && pass != "") { 
    $.ajax({ 
     type: 'POST', 

     url: urlServer + 'ws_alerts.asmx/ValidarSesion', 
     // Manda por post la variable us y pass 
     data: '{"usu":"' + usu + '","pass":"' + pass + '"}', 
     dataType: 'json', 
     contentType: 'application/json; charset=utf-8', 
     error: function (jqXHR, text_status, strError) { 
     }, 
     timeout: 600000, 
     success: function (data) { 
      //Se obtiene como resultado el numero 1, 2 o 0 
      //1: Aprobador 2: Usuario 0: No registrado 
      var resultado = data.d; 

      if (resultado == "1") { 

       localStorage.UsuNombre = usu; 
       document.location.href = "Alertas.html"; 
      } 
      else 
      { 
       if (resultado == "2") 
       { 
        localStorage.UsuNombre = usu; 
        document.location.href = "Alert.html"; 
       } 
       else 
       { 
        if (resultado == "0") 

         bootbox.alert("Try again."); 
        window.login.reset(); 
       } 
      } 
     } 

    }); 
} 
else 
    alert("Type User/Password please."); 

}

C#のWebサービス

public string ValidarSesion(string usu, string pass) 
{ 
    conn = new db_alerts(); 
    string resultado = "false"; 
    //1: Admin 2: User 
    int tipo = 1; 

    int respuesta = conn.ConsultarScalar("SELECT COUNT(Id) FROM tbl_usuarios WHERE Nombre='" + usu + "' AND Contraseña='" + pass + "' AND Tipo='" + tipo + "'"); 

    if (respuesta == 1) 
    { 
     resultado = "1"; 
    } 
    else 
    { 
     tipo = 2; 
     respuesta = conn.ConsultarScalar("SELECT COUNT(Id) FROM tbl_usuarios WHERE Nombre='" + usu + "' AND Contraseña='" + pass + "' AND Tipo='" + tipo + "'"); 
     if (respuesta == 1) 
     { 
      resultado = "2"; 
     } 
     else 
     { 
      //Variable que se enviara al JS 
      resultado = "0"; 
     } 
    } 
    return resultado; 
} 

私は多分それが理解するのが難しいだろうが、ログインが正常に動作することを知っている!私は、たとえば、ユーザーの種類を検証する方法を知りたい:私はこれをやってすべての私のページでのlocalStorageを検証:ユーザーのための

<script src="js/login.js"></script> 
<script>verifySesion();</script> 

そしておそらくのlocalStorageとし、(場合(その別の関数(verificarType)を入力します。 (このページにアクセスできません)

答えて

0

あなた自身の認証方式を実装するのではなく(つまり、UsuTipe == '1' /「Admin」など)、その後はリダイレクトします。 。私はASPアイデンティティのようなものを使用したいと思います。それは、あなたのユーザーを管理など、あなたのセッションを作成し、(あなたがたとえば、管理者の役割を持っている場合)、あなたは

[Authorize(role="Admin")] 
public string ApiMethod() 
{ 
    .... 
} 

であなたのAPI呼び出しを飾ることができます。

http://www.asp.net/identity

+0

私はそれについて何かを読んだけど、私は私の質問で言ったように、WebServiceとAJAXでこれを行う必要がある! –

+0

これを試してください:http://www.codeproject.com/Articles/802435/Authentication-and-Authorization-with-ASP-NET-Iden – user1455010

0

何が基本的に求めていることはあなたのWebサービスのためのセッションデータを有効にする方法である:https://msdn.microsoft.com/en-us/library/aa480509.aspx:私はあなたがこれを読んでもらいたいと思います。

はどうやら、あなたのログイン名と管理者のみのメソッドの前にこれを配置する必要があります:

[System.Web.Services.WebMethod(EnableSession=true)] 

サイトはVB.NETの構文を与えるが、私は上記の正しいC#構文だと思います。

ログインメソッドがタグ付けされたら、HttpContext.Current.Sessionを使用してセッションオブジェクトにアクセスして、ログインしたユーザーのadminフラグを追加します。次に、この同じフラグを管理者のみのメソッドで確認します。同じ方法。

または、あなたはuser1455010の示唆を行うことができます。私はそれを知らなかった。

+0

それは私の問題はこれはwebserviceのためのものです。例: 管理者が2ページ(page1、page2)を持っていて、ユーザーが2(page3、page4)を持っていると、誰もアクセスできず、次にログインしてページ3にリダイレクトされます。彼がアクセスできるURL!thats the problem –

+0

これらがASPXページの場合、パーミッションが正しくない場合は、page_loadイベントにリダイレクトを入れてください。これらがhtmlページの場合、特定のパターンに一致するすべてのファイルに対してカスタムHTTPハンドラを作成し、アカウントが間違っている場合は空白の応答を返す必要があります。 – Ian

関連する問題