使用自定义筛选器MVC删除对用户的某些数据库记录的访问权限

时间:2014-06-09 19:57:11

标签: c# asp.net-mvc entity-framework

大家好我有这样的各种数据库模型

public class Trips
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public .... // and finally
public string Group_Of_user { get; set; }
}

我的身份资料就像这样

public class ApplicationUser : IdentityUser
{
    public string Group_Of_user { get; set; }
}

我最初设计的模型没有和Group_of_user。我的主要目的是从另一个Group_of_user记录中限制一个Group_of_user。所以现在每次User访问,编辑等时都要检查记录,并使用如下所示的if语句。

var manager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext()));
var user = manager.FindById(User.Identity.GetUserId());
if (entry.Group_Of_user !=  user.Group_Of_user)
{
return HttpNotfound();
}

有没有任何方法可以使用动作过滤器或Identity中的某些代码魔法,我可以通过它神奇地自动执行此操作而不会在我的控制器中插入太多Ifs

1 个答案:

答案 0 :(得分:0)

不确定。您只需创建自定义操作过滤器,然后通过App_Start\FilterConfig.cs将其应用于控制器,操作甚至全局。然而,这最好留给你作为一个练习,好像你不理解机制,你不会理解如何解决问题,如果它们出现。此外,MSDN documentation实际上非常好。

然而,在你走得太远之前,这实际上是限制访问的一种非常糟糕的方式,至少在可维护性方面。实际上,不是使用某些任意字符串值,而是为用户实体的实例或IndentityRole创建外键。或者,如果您不想做其中任何一个或那些,至少创建一个完整的Group对象并创建与之关联。