如何在asp.net mvc3中创建自定义授权filter
我有一个问题,我在asp.net mvc3中建立一个网站,
其中我制作了我的几个控制器,所有这些都是授权的
因为我不希望未经授权的用户访问该控制器。
假设我有一个控制器和2个方法,如下所示
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace Com.health.Controllers { [Authorize] public class MyfirstController : Controller { public ActionResult Index() { return View(); } public ActionResult seeyourDetails(int id) { return View(); } } }
现在让我们假设我们的方法seeyourDetails
告诉任何用户他的帐户信息,但问题是,当用户访问此方法时,URL为https://www.exampple.com/Myfirst/seeyourDetails/10
,其中10
为当前我向他展示他的详细信息的用户ID,但我应该怎么做,如果有人登录我的网站并且他访问此URL并在URL中手动添加10
或任何其他号码,我的控制器将向他显示有关该用户的所有详细信息。
注意:我可以在一个地方或两个地方做这个,但我需要一些解决方案,我在一个地方实现,它在我的整个应用程序中有效。 谢谢
我看到的唯一方法是检查查询字符串中的用户ID是否与登录的用户ID相同。这更像是一个修补程序解决方案,正确的方法是更改应用程序的工作方式。 像这样的东西,你仍然需要修改一下。
[AttributeUsage(AttributeTargets.Method|AttributeTargets.Class, AllowMultiple = false)] public class MyAuthorizeAttribute : AuthorizeAttribute { public override void OnAuthorization(AuthorizationContext filterContext) { base.OnAuthorization(filterContext); var ctx = filterContext.HttpContext; var name = ctx.User.Identity.Name; //get user id from db where username= name var urlId = Int32.Parse(ctx.Request.Params["id"]); if (userId!=urlId) filterContext.Result = new HttpUnauthorizedResult(); } }
首先, Authorize
是非常强大和细化的。 您可以在类级别和方法级别使用它。 您还可以设置哪些角色可以访问它。
[Authorize] public class MyFirstController : Controller
您基本上是说任何已经过身份validation的用户,您也可以使用
[Authorize(Roles="Administrator")] public class MyFirstController : Controller
给你一个更好的控制。 在这里,您只说允许管理员角色的用户访问这些内容。 现在,对于SeeYourDetails
Action,您不应该真正发送用户ID。 如果用户当前已登录,您可以访问他/她的详细信息,如下所示:
var current = Membership.GetUser();
所以你所有的代码看起来都是这样的:
using System; using System.Web; using System.Web.Mvc; using System.Web.Security; using System.Collections.Generic; namespace TestArea.Controllers { [Authorize] public class MyFirstController : Controller { public ActionResult Index() { return View(); } public ActionResult SeeYourDetails() { //get the currently logged in user var current = Membership.GetUser(); //you can always do something else here return View(current); } }
有关Authorize属性的更多信息,请访问https://msdn.microsoft.com/en-us/library/system.web.mvc.authorizeattribute.aspx
最后但并非最不重要的。 如果你要用C#编程,你应该尊重它的符号:-)希望这会有所帮助
你不必从querystring参数获取用户id。 您必须设置为经过身份validation的用户信息的会话。 当您需要知道经过身份validation的用户时,从会话中获取它
您要说的是数据授权,用户在登录网站后只能看到他的详细信息。
您可以在授权filter中创建@MikeSW所述的自定义授权filter,检查登录用户的id是否与查询字符串中传递的id相同,并且您必须在会话中存储用户ID。
由于它是一个filter,您可以在操作级别或控制器级别或全局级别应用。
上述就是C#学习教程:如何在asp.net mvc3中创建自定义授权filter分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/985268.html