根据用户类型限制对页面的访问

时间:2016-06-16 16:12:33

标签: c# jquery ajax web-services login

您好我有一个登录C#webservice和ajax调用,它正在运行但是有问题,我有2个用户类型(管理员和用户)问题是当用户登录时他根据用户重定向到他的页面类型,但当他写一个他可以访问的管理员网址时,我的问题是如何验证用户类型和提供对页面的访问权限,我不知道我的代码是否会有所帮助但是就在这里。

jQuery(验证localStorage状态):

function verifySesion() {

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

}

jQuery for ajax call:

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#WebService

 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>

也许用户输入另一个函数(verificarType)和if(如果(localStorage.UsuTipe ==&#39; 1&#39; /&#34; Admin&#34;或其他)然后重定向)和其他(警告(&#34;你无法访问这个页面......&#34;)和重定向)

2 个答案:

答案 0 :(得分:0)

而不是实现自己的身份验证方案。我使用像ASP身份这样的东西。它将管理您的用户,创建会话等。然后您可以使用

装饰您的api电话
[Authorize(role="Admin")] 
public string ApiMethod() 
{
    ....
}

(例如,如果您有管理员角色)。

http://www.asp.net/identity

答案 1 :(得分:0)

您基本上要问的是如何为您的网络服务启用会话数据:我想您想要阅读:https://msdn.microsoft.com/en-us/library/aa480509.aspx

显然你必须在登录和管理员方法之前加上这个:

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

该站点提供了VB.NET语法,但我认为上面是正确的C#语法。

一旦您的登录方法被标记为您只需使用HttpContext.Current.Session访问会话对象,即可为刚刚登录的用户添加admin标志。然后在同一个admin-only方法中检查相同的标志方式。

或者您可以执行user1455010建议的内容。我没有意识到这一点。