【问题标题】:MVC 3 Action / Controller Attributes / PermissionsMVC 3 动作/控制器属性/权限
【发布时间】:2012-10-11 22:02:10
【问题描述】:

为了简单起见,我的站点有两个控制器,UsersController 和 VenuesController,它们都有自己关联的“管理员权限”。

因此用户可以拥有“用户”管理员权限和/或“场地”管理员权限(这些是我数据库中用户表上的布尔字段)

用户登录,我在会话中拥有他/她的权限。

我想用自定义属性装饰我的控制器,以检查用户是否具有使用控制器的正确权限。我不想创建 UserPermissionAttribute 和 VenuePermissionAttribute,理想情况下我想要一个属性,它接受一个 bool 属性并检查它是否为真,所以类似于;

[CheckPermissionAttribute(_userSession.AdminPermissions.Users)]
public class UsersController : Controller
{

}

[CheckPermissionAttribute(_userSession.AdminPermissions.Venues)]
public class VenuesController : Controller
{

}

这是否可能实现,或者我应该查看 PostSharp 或其他东西以获得相同的结果?

【问题讨论】:

  • 为什么不直接使用内置的角色管理功能呢?您只需将 VenuesAdmin 和 UsersAdmin 角色分配给您希望拥有这些权限的用户,然后使用标准 Authorize 属性添加检查?
  • 是的,这是一个选项,可能是最好的选项,因为它的应用程序不使用会员提供程序,所以我正在探索实现相同目标的其他方法?
  • 那你怎么知道用户是谁?

标签: c# asp.net-mvc


【解决方案1】:

您可以使用参数创建属性。动作过滤器参数是动作过滤器的属性。

但最好使用AuthorizeAttribute 创建用户角色并使用标准方法

【讨论】:

  • 该应用程序不使用 ASP.NET 成员资格,我有一个自定义用户表,我在其中存储每个用户拥有的权限。在应用程序中,我在会话中拥有这些权限。我想在控制器上有一个属性,我可以从会话中传递一个特定的值,即如果它是用户控制器,那么我想传递 Session[HasUsersPermission],它是 bool 字段(所以要么为真,要么为假)。在我的属性中,我想检查传入的值是否为真,如果是,那么他们可以访问。这意味着在场地控制器上我通过 Session[HasVenuePermission]
  • 我意识到属性参数需要是常量值,所以我正在寻找其他可以帮助我实现这一目标的东西!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-25
  • 2012-03-01
  • 2017-03-20
  • 2014-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多