0

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

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

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

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

我查看了 MVCSitemapprovider,但这在数据库中不起作用,它需要一个站点地图文件。我需要控制动态更改用户权限。

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

4

2 回答 2

1

当您创建 MVC 应用程序而不是空白网站时,其中包含一个基本的 ASP.NET 成员资格提供程序。这将完成您正在寻找的一切,几乎不需要编码。

这是 MSDN:http: //msdn.microsoft.com/en-us/library/yh26yfzy.aspx

这是一个 CodePlex 项目,它扩展了比内置功能更多的功能:http: //mvcmembership.codeplex.com/

于 2010-03-25T01:15:49.703 回答
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);
    }
}
于 2010-03-25T02:35:31.780 回答