【问题标题】:Site Security/Access management for asp.net mvc applicationasp.net mvc 应用程序的站点安全/访问管理
【发布时间】:2010-03-25 01:13:52
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢,但它不能让我动态地访问/拒绝更低级别的权限,例如控制器内的操作。除非我理解不正确。
    【解决方案2】:

    您的技术很容易通过创建自己的 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);
        }
    }
    

    【讨论】:

    • 谢谢,我今天遇到了这个,确实认为它可以提供帮助。绝对是我会进一步探索的东西。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-04
    • 1970-01-01
    • 1970-01-01
    • 2010-09-22
    • 1970-01-01
    • 2015-08-27
    相关资源
    最近更新 更多