2010-03-25 110 views
0

我想找到一个好的模式用于用户访问验证。asp.net mvc应用程序的网站安全/访问管理

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

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

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

我已经看了MVCSitemapprovider,但是这不起作用的数据库,它需要一个站点地图文件。我需要控制更改用户执行时间。

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

回答

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); 
    } 
} 
+0

谢谢,我今天遇到了这个,并确实认为它可以提供帮助。绝对是我会进一步探索的。 – minalg 2010-03-26 08:58:53

1

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

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

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

+0

谢谢,但它不能让我动态访问/拒绝更低级别的权限,如控制器内的操作。除非我没有正确理解它。 – minalg 2010-03-26 09:00:04