【问题标题】:Adding Roles to an existing Asp.net mvc website将角色添加到现有的 Asp.net mvc 网站
【发布时间】:2015-02-12 21:36:08
【问题描述】:

大家好, 我在正在编写的博客应用程序中实现了自己的注册和登录系统。我使用数据库优先方法并创建了一些表(dbo.UserProfiles - 包含用户信息)和其他表,我使用这些表从中生成了实体数据模型。但是,我到了需要创建管理面板的阶段,然后我意识到我需要一种方法将每个用户与特定角色(主持人、管理员、访客)相关联,并根据这些角色限制对某些页面的访问。 我的问题是,我如何为现有数据库实现角色提供程序,因为我没有使用 asp.net mvc 的默认会员系统,而且我可以使用角色来允许或限制对我网站中某些页面的访问。

【问题讨论】:

  • 您是否有另一个角色表和第三个表来定义用户角色?
  • @mGouda 是的,我创建了一个名为 dbo.roles 的表,其中包含 roleId 和 roleName 列,还创建了一个名为 dbo.UsersInRoles 的表,其中包含列 roleId 和 UserId,并指定了外键关系。之后,我点击了 edmx 设计器并更新了我现有的模型以包含新添加的表格。然后我创建了一个名为 adminController 的新控制器,我添加了一个 [Authorize(Role="Admin")] 属性。导航到此页面后,我收到一条错误消息,提示“建立与 sql server 的连接时发生网络相关或特定于实例的错误。
  • 你这里说的错误和原问题没有关系,这个错误说明你不能连接sql server数据库,仔细检查connectionstring和相关的东西
  • ok @mGouda 什么是解决我提出的问题的最佳方法,即向已经拥有会员系统的现有网站添加角色(不实施 asp.net mvc 的默认会员系统) .

标签: c# asp.net-mvc


【解决方案1】:

您可以创建自己的自定义主体和身份。实现 IsInRole 方法。在 global.asax Application_AuthenticateRequest 方法中验证您的请求。然后只需将[Authorize(Roles = "Admin")] 属性添加到您指定的操作。

这是一个很好的exampleansver

【讨论】:

  • 我认为是这样,唯一的问题是我是这项技术的新手,我不知道如何去做。你能帮忙写一些代码吗?
【解决方案2】:

您可以通过从 MembershipProvider 类继承来创建自己的成员资格提供程序。 MSDN 有一个很好的示例来说明如何做到这一点。

http://msdn.microsoft.com/en-us/library/44w5aswa(v=vs.100).aspx

您还需要实现一个角色提供者。

http://msdn.microsoft.com/en-us/library/tksy7hd7(v=vs.100).aspx

【讨论】:

  • 我已经创建了一个会员系统,并且我已经使用了我无法丢弃我的会员系统并开始实施 asp.net mvc 提供的默认系统的应用程序。我需要一种将角色提供者添加到现有数据库并将其与我创建的现有自定义会员系统同步的方法。
  • 如果您按照我在 MSDN 上找到的示例进行操作,您可以创建一个自定义会员提供程序来满足您的需求。
【解决方案3】:

以下示例显示了如何指定控制器仅对具有管理员角色的用户可用。

[Authorize(Roles="Administrators")]
public class AdminController : Controller
{
    . . .
}

以下示例展示了如何将控制器内的操作的访问权限限制为仅指定的角色列表。

[Authorize(Roles="Moderators,Administrator")]
public List<myObject> GetRestrictedData()
{
    . . .
}

以下示例显示了如何将控制器的访问权限限制为仅指定用户。

[Authorize(Users="Jhon,Games")]
public class RestrictedContentController : Controller
{
    . . .
}

Reference

【讨论】:

  • 我使用了上面的第一种方法,但我收到一条错误消息,提示“发生网络相关或特定于实例的错误”。我很困惑,因为这只是在我添加这两个表并更新我的模型之后才开始发生。因为应用程序中需要连接到数据库的其他页面工作正常,没有任何问题。只有我添加的页面 [Authorize(Roles="Admin")] 导致此错误。
  • 抱歉,我不知道,但我建议您查看在添加新表(角色、用户角色)后执行的步骤,例如创建 edmk 和相关的控制器和视图等,检查this SO question跨度>
猜你喜欢
  • 1970-01-01
  • 2011-11-03
  • 2016-04-06
  • 1970-01-01
  • 1970-01-01
  • 2012-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多