我正在尝试找到一个用于用户访问验证的好模式。
基本上在webforms应用程序中,我有一个框架,它使用用户角色来定义访问权限,即用户被分配到角色,“页面”被授予对页面的访问权限。我在数据库中有一个表,其中列出了所有页面。页面可以包含从父级继承的子页面。
在定义访问权限时,我为角色分配了对页面的访问权限。然后,该角色的用户可以访问这些页面。管理起来也相当简单。我实现它的方式是在每个页面继承的基类上。在pageload / init上,我会检查页面网址并验证访问权限并采取相应的行动。
但是我现在正在开发一个MVC应用程序并且需要实现类似的东西,但是我找不到一个让我以前的解决方案工作的好方法。纯粹是因为我没有静态页面作为url路径。此外,我不确定如何最好地处理这个,因为我现在有控制器而不是aspx页面。
我已经查看了MVCSitemapprovider,但这不适用于数据库,它需要一个站点地图文件。我需要控制即时更改用户持久性。
任何想法/建议/指示都将不胜感激。
答案 0 :(得分:1)
当您创建MVC应用程序而不是空白网站时,包含一个基本的ASP.NET成员资格提供程序。这将完成你正在寻找的一切,几乎没有编码。
以下是MSDN:http://msdn.microsoft.com/en-us/library/yh26yfzy.aspx
这是一个CodePlex项目,它扩展了功能,而不是内置的内容:http://mvcmembership.codeplex.com/
答案 1 :(得分:0)
通过创建自己的ActionFilter可以轻松完成您的技术: http://msdn.microsoft.com/en-us/library/dd410056.aspx
然后,您可以将此属性应用于控制器或操作方法,并轻松推送自己的页面安全性。
public class MinmalSecurity : ActionFilterAttribute
{
private string _roles;
public MinmalSecurity(string roles)
{
_roles = roles;
}
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
//go to database,find permissions, redirect or proceed as nescessary
base.OnActionExecuting(filterContext);
}
}