首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有不同角色的多个组织中的用户

具有不同角色的多个组织中的用户
EN

Stack Overflow用户
提问于 2015-02-12 15:39:05
回答 2查看 1.3K关注 0票数 4

我刚开始为网站设置安全性,并且在为.NET MVC环境中所需的身份验证/授权类型找到正确的体系结构/设计/模式/最佳实践时遇到了困难。我甚至不知道怎么称呼它来做更多的研究。下面是我需要实现的一个例子。这叫什么?(我不认为这是多特南特。)

Joe在Grocery连锁店中为几家商店做库存工作。Joe是A商店的库存管理器(可以编辑项目),但只是B商店的库存管理员(只查看物品),无法访问商店C。

因此,如果乔试图编辑存储库A,他应该能够访问InventoryController中的InventoryController,但是如果他试图编辑存储库B或C,则不应该能够访问相同的ActionResult Edit

对于这种情况,直截了当的身份或基于声明的授权是不够的(我不认为),但我不知道我需要做进一步研究的设计的“名称”。这个设计叫什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-12 16:57:39

它被称为对象级授权(也称为对象级安全性,也称为细粒度授权,等等)。基本上,权限是基于对象的“所有权”,或者更好地放在这个场景中,由对象拥有。您需要在商店和员工之间建立一个多到多的关系,其中包含一个角色/授予的有效负载。例如:

代码语言:javascript
复制
public class StoreEmployee
{
    [Key, Column(Order = 1)]
    [ForeignKey("Store")]
    public int StoreId { get; set; }
    public virtual Store Store { get; set; }

    [Key, Column(Order = 2)]
    [ForeignKey("Employee")]
    public int EmployeeId { get; set; }
    public virtual Employee Employee { get; set; }

    public string Role { get; set; }
}

public class Store
{
    ...
    public virtual ICollection<StoreEmployee> Employees { get; set; }
}

public class Employee
{
    ...
    public virtual ICollection<StoreEmployee> Stores { get; set; }
}

这样,您就可以在操作中使用这种关系来验证用户是否具有访问权限:

代码语言:javascript
复制
if (!joe.Stores.Any(m => m.Store == storeA && m.Role == "Manager"))
{
    return new HttpUnauthorizedResult();
}

在这里,我通过将Role变成一个字符串来保持简单。您可以使用枚举,甚至使用也将持久化在数据库中的实际类。或者,您可以绑定到现有的用户角色中。由你决定。您也可能更愿意将其转换为自定义动作过滤器

票数 3
EN

Stack Overflow用户

发布于 2015-02-12 16:21:37

您可以将其设置为多租户系统。如果每个商店都是有自己用户目录的租户,那么Joe需要登录到存储A的不同目录,然后再登录存储B,并得到另一个指定的角色。

Joe将无法登录以存储C,因为他在该目录中没有帐户。

如果希望用户通过联邦系统进行身份验证,则需要在每个存储区设置一个角色,并分配用户来自哪个IdP的角色。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28481568

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档