Episerver中角色的组合

时间:2013-04-22 14:30:58

标签: roles episerver episerver-6-r2

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

我想根据角色设置访问权限,以确定用户所属的客户以及用户可以访问的页面。

组:

  • Customer1Role
  • Customer2Role
  • TicketViewerRole
  • ChangeRequestRole

用户:

  • 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检查客户角色和页面角色?

或者我是否必须从另一个视图中查看此内容?如果您遇到此问题并以其他方式解决,请告诉我。

很抱歉,很长的帖子,但希望我明白我的观点。

1 个答案:

答案 0 :(得分: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);
        }
    }
}