根据数据库MVC5中的现有计数对实体(用户等)的创建进行门控



我有一个应用程序,其中管理员可以创建新用户。只有当现有用户数量小于管理员允许的数量(帐户表中数据库中设置的值)时,才能创建新用户

现在我可以很容易地创建一个动作过滤器检查现有的用户数量,并根据它,返回一个HttPStatusCodeResult的坏请求,或UnAuthorizedResult。

但是我想要的是"创建按钮"也应该被禁用。create按钮位于Index视图上。我还可以通过创建一个自定义html帮助器来实现这一点,该帮助器根据数据库中现有用户的数量将按钮呈现为禁用状态。

但是更进一步,我有其他实体创建需要根据数据库中现有实体的计数进行门控。

我想找出在整个应用程序中做到这一点的标准方法,而不是为每个需求创建一个单独的ActionLink helper和一个单独的ActionFilter。

请指教。

谢谢

您可以做的是为创建用户的能力设置一个角色,并在用户创建了太多用户时将其删除。每当他们创建用户时,检查他们是否满足阈值,如果满足,则从其帐户中删除此特权。代码应该是这样的…

[HttpPost]
[Authorize(Roles="CanCreateUsers")]
public ActionResult CreateUser(User u){
    var currentUser = GetCurrentUser(User.Identity.GetUserId());
    if(currentUser.UsersCreated >= 5){
        UserManager.RemoveFromRoleAsync(currentUser.UserID, "CanCreateUsers");
        //Probably want to refresh their cookies to refresh their roles too
    }
    UserManager.CreateAsync(u);
}

然后检查用户是否可以创建用户就像检查他们的角色一样简单

@if(User.IsInRole("CanCreateUsers"))
{
    <a>Create User</a>
}

最新更新