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

Posted

技术标签:

【中文标题】根据用户类型限制对页面的访问【英文标题】: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到这个页面...") 并重定向)

【问题讨论】:

【参考方案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 处理程序,并在帐户错误时发回空白响应。

以上是关于根据用户类型限制对页面的访问的主要内容,如果未能解决你的问题,请参考以下文章

如何根据用户限制对 mulesoft API 资源的访问?

如何根据 Graphene/Django 上的用户类型限制模型上的字段访问?

如何根据登录状态/角色限制/控制用户可以访问的导航路线?

应用弹簧安全 - 这种用法正确吗?

根据角色限制对登录symfony的访问

根据用户角色限制点击按钮