Asp.net mvc 如何有效地检查更新操作的用户权限
我开始写我自己的动作过滤器,我不得不说这个功能非常好。然而,我对一个设计问题感到困惑。当我们对超级市场中的产品进行CRUD操作时,操作方法如下所示:Asp.net mvc 如何有效地检查更新操作的用户权限,asp.net-mvc,action-filter,Asp.net Mvc,Action Filter,我开始写我自己的动作过滤器,我不得不说这个功能非常好。然而,我对一个设计问题感到困惑。当我们对超级市场中的产品进行CRUD操作时,操作方法如下所示: public ActionResult CreateProduct(int ShopID); // Users within specific role for that shop public ActionResult GetProduct(int ProductID); // Everybody can do public ActionResu
public ActionResult CreateProduct(int ShopID); // Users within specific role for that shop
public ActionResult GetProduct(int ProductID); // Everybody can do
public ActionResult UpdateProduct(int ProductID); // Users within specific role for that shop
public ActionResultat DeleteProduct(int ProductID); //Users within specific role for that shop
我的问题是,我在此应用程序中没有全局角色。这里的角色仅限于特定的上下文:在商店a中是管理员的用户可能不是商店B中的管理员。所以我的问题来了。在我的授权过滤器中,我可以轻松地检查当前用户对CreateProduct操作的权限,因为商店的ID是传入参数的
对于GetProduction操作,问题开始出现,但它是可以管理的,因为每个人都应该有权访问该操作。但是,对于更新和删除操作,我如何知道当前用户的权限,因为我不知道产品属于哪个商店
好的,关键是我的过滤器应用于在各种存储库上工作的操作,而不仅仅是产品,所以我不能说“如果操作名称包含单词Update,请在产品存储库中检索相应的商店”。到目前为止,我设想了两种解决方案
谢谢大家! 由于您需要从数据库访问特定的业务实体以检查此访问权限,我认为您不能有效地将其作为操作过滤器 您可能需要某种“
IsUserInRoleForShop(role,shop)
”方法,可以从需要检查它的方法中调用它(因为这些方法似乎只是从您的代码库中选择的)
您需要查询数据库以获取店铺ID(我想您可能需要这样做才能正确更新模型中的实体).传递店铺ID是一个坏主意,因为没有验证,你就可以让某人摆弄帖子来传递他们的店铺ID和其他人的产品ID。谢谢,实际上我误读了你的答案。我刚刚编辑了那条评论。因此无法将所有授权逻辑从控制器中移出?谢谢你的提示o关于在URL中传递店铺ID!!知道这一点非常重要,我没有想到。很难全部删除,特别是当您将根据要访问的内容拥有不同的授权规则时。如果运行身份验证的代码很常见,那么至少不会分散在您的应用程序中代码库。