asp.net mvc应用程序的站点安全/访问管理

时间:2010-03-25 01:13:53

标签: asp.net asp.net-mvc asp.net-mvc-routing mvcsitemapprovider

我正在尝试找到一个用于用户访问验证的好模式。

基本上在webforms应用程序中,我有一个框架,它使用用户角色来定义访问权限,即用户被分配到角色,“页面”被授予对页面的访问权限。我在数据库中有一个表,其中列出了所有页面。页面可以包含从父级继承的子页面。

在定义访问权限时,我为角色分配了对页面的访问权限。然后,该角色的用户可以访问这些页面。管理起来也相当简单。我实现它的方式是在每个页面继承的基类上。在pageload / init上,我会检查页面网址并验证访问权限并采取相应的行动。

但是我现在正在开发一个MVC应用程序并且需要实现类似的东西,但是我找不到一个让我以前的解决方案工作的好方法。纯粹是因为我没有静态页面作为url路径。此外,我不确定如何最好地处理这个,因为我现在有控制器而不是aspx页面。

我已经查看了MVCSitemapprovider,但这不适用于数据库,它需要一个站点地图文件。我需要控制即时更改用户持久性。

任何想法/建议/指示都将不胜感激。

2 个答案:

答案 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);
    }
}