【问题标题】:Restrict access to a page according of user type根据用户类型限制对页面的访问
【发布时间】:2016-10-18 06:38:20
【问题描述】:

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

jQuery(验证本地存储状态):

function verifySesion() {

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

}

用于ajax调用的jQuery:

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# 网络服务

 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) 使用 and if (If (localStorage.UsuTipe == '1'/"Admin" 或其他) 然后重定向) 和 else (alert("You can't access到这个页面...") 并重定向)

【问题讨论】:

    标签: c# jquery ajax web-services login


    【解决方案1】:

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

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

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

    http://www.asp.net/identity

    【讨论】:

    • 是的,我读到了一些相关的内容,但就像我在问题中所说的那样,我需要使用 WebService 和 AJAX 来做到这一点!
    • 试试这个:codeproject.com/Articles/802435/… 大约在页面的一半。
    【解决方案2】:

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

    显然,您必须将其放在登录和仅限管理员的方法之前:

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

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

    一旦您的登录方法被标记为这样,您只需使用 HttpContext.Current.Session 访问会话对象,为刚刚登录的用户添加管理标志。然后在相同的仅管理方法中检查相同的标志方式。

    或者你可以按照 user1455010 的建议去做。我没有意识到这一点。

    【讨论】:

    • 不,那是网络服务我的问题是这个。示例:管理员有 2pages(page1, page2) 和用户有 2(page3, page4) 如果他们没有登录没有人可以访问,然后用户登录并且他被重定向到 page3,但是如果他在 url 中写入 page1 或 page2 他可以访问!这就是问题
    • 如果这些是 ASPX 页面,那么如果权限不正确,只需在 page_load 事件中放置一个重定向。如果这些是 html 页面,那么您将必须为所有匹配特定模式的文件编写自定义 HTTP 处理程序,并在帐户错误时发回空白响应。
    猜你喜欢
    • 2012-09-17
    • 2018-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-08
    • 2012-09-14
    • 1970-01-01
    • 2012-05-16
    相关资源
    最近更新 更多