根据用户类型限制对页面的访问
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 处理程序,并在帐户错误时发回空白响应。以上是关于根据用户类型限制对页面的访问的主要内容,如果未能解决你的问题,请参考以下文章