【问题标题】:Determine if user can access database generated page?确定用户是否可以访问数据库生成的页面?
【发布时间】:2010-01-11 23:44:20
【问题描述】:

我为我的 .NET MVC 网站设置了 MembershipProfileRole 提供程序。我想说:这个Role 可以访问那个Page

如何将此代码“注入”到 RoleProvider?还是我必须以某种方式覆盖它?有线索吗?

(角色存储在默认的 ASP.NET SqlRoleProvider 中,页面存储在单独的 SQL 数据库中)。

【问题讨论】:

    标签: asp.net asp.net-mvc authorization roleprovider


    【解决方案1】:

    为什么要将它注入角色提供程序?为什么不直接装饰 ActionResult [Authorise(Roles="myrole")]

    我了解到您的页面在数据库中,但操作结果仍需要调用视图对吗?

    我想您可以编写自己的自定义属性,该属性可以检查并授予访问权限或拒绝访问。

    我认为角色提供者不是确定页面是否可以显示的正确位置。

    【讨论】:

    • 大声笑,我还有一个自定义 FilterAttribute 用于检查用户是否有权查看页面。我该如何管理这一切?是我猜的问题。 :)
    • 管理是指如何创建角色并将用户分配给它?对这里的含义有点困惑抱歉@ropstah
    • 不,我可以创建角色并分配用户。我需要以可管理的方式将页面“分配”给角色..
    • 啊好吧!!!我只是使用 .net 配置管理器来管理我的角色。然后我猜你需要一个表,其中包含你的角色/roleIds 和可访问的页面/pageId 作为查找表。绝对是自定义属性
    • 您显然需要一个允许您将页面分配给角色的页面。也许是网格类型的方法。那里有一些很棒的 jquery 网格。甚至是一个文件夹结构,允许您选择一个页面,然后为它们分配角色。
    【解决方案2】:

    看看asp.net下的usingsitemaps。它非常易于管理和extend

    我什至将它们用作菜单系统的数据源。

    进入页面后,您可以执行以下操作:

    User.IsInRole("RoleName")
    

    【讨论】:

    • 嗯,我目前有一个自定义 SiteMapProvider。我错过了什么……? :)
    • 在您的自定义站点地图提供程序代码中,覆盖 IsAccessibleToUser 方法并使用 context.User.IsInRole(role) - 然后在您的站点地图中,您可以添加角色属性 (roles="SysAdmin,Contributor")
    猜你喜欢
    • 1970-01-01
    • 2011-06-03
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-09
    • 2012-10-22
    相关资源
    最近更新 更多