1

我有一个网站,我们的客户可以登录以查看他们自己的数据。每个客户只能看到他们自己的数据(当然),不同的用户可以访问一个客户的不同页面。此外 - 编辑必须查看所有数据。

我想根据角色设置访问权限,以确定用户是哪个客户的成员,以及用户可以访问哪些页面。

团体:

  • 客户1角色
  • 客户2角色
  • TicketViewer 角色
  • 变更请求角色

用户:

  • Cust1_LowLevelUser。角色Customer1Role、TicketViewerRole
  • Cust1_HighLevelUser角色Customer1Role、TicketViewRole、ChangeRequestRole
  • Cust2_LowLevelUser。角色Customer2Role、TicketViewerRole
  • Cust2_HighLevelUser角色Customer2Role、TicketViewRole、ChangeRequestRole

页面结构

我们创建了一个页面树,每个客户都有自己的“根页面”,只能访问他们各自的角色。在该节点下方,我们创建数据特定页面的实例,这些页面具有基于用户角色和客户角色的访问权限。

Customer1 (Customer1Role)
  |--TicketsForCust1 (Customer1Role, TicketViewerRole)
  |--ChangeRequestsForCust1 (Customer1Role, ChangeRequestRole)
Customer2 (Customer2Role)
  |--TicketsForCust2 (Customer2Role, TicketViewerRole)
  |--ChangeRequestsForCust2 (Customer2Role, ChangeRequestRole)

燃烧的问题:

我们如何防止用户Cust2_HighLevelUser看到ChangeRequestsForCust1

EPiServer 仅检查是否有任何角色足以授予访问权限,并且由于用户属于ChangeRequestRole,因此无论客户特定角色如何,他们都将被授予访问权限。是否可以让 EPiServer 同时检查客户角色和页面角色?

还是我必须从另一个角度看待这个?如果您遇到此问题并以另一种方式解决,请告诉我。

对不起,很长的帖子,但希望我能明白我的意思。

4

1 回答 1

2

访问权限模型中没有拒绝标志,因此您需要使用该角色结构自己编写代码。

将代码添加到拒绝访问的模板基类,对于 PageTree 控件,您可以执行以下操作:

protected void NavSubPageTreeFilter(object sender, EPiServer.Filters.FilterEventArgs e)
{
    for (int i = e.Pages.Count - 1; i > -1; i--)
    {
        PageData pd = e.Pages[i];

        if (yourUser.IsInRole("blabla") && ... etc)
        {
            e.Pages.RemoveAt(i);
        }
    }
}
于 2013-04-23T05:43:00.750 回答