我有一个网站,我们的客户登录后可以查看自己的数据。每个客户只能看到自己的数据(当然),不同的用户可以访问一个客户的不同页面。此外 - 编辑必须查看所有数据。
我想根据角色设置访问权限,以确定用户所属的客户以及用户可以访问的页面。
组:
用户:
页面结构
我们创建了一个页面树,每个客户都有自己的“根页”,只能访问各自的角色。在该节点下方,我们创建了特定于数据的页面的实例,这些页面具有基于用户角色和客户角色的访问权限。
Customer1 (Customer1Role)
|--TicketsForCust1 (Customer1Role, TicketViewerRole)
|--ChangeRequestsForCust1 (Customer1Role, ChangeRequestRole)
Customer2 (Customer2Role)
|--TicketsForCust2 (Customer2Role, TicketViewerRole)
|--ChangeRequestsForCust2 (Customer2Role, ChangeRequestRole)
燃烧问题:
我们如何阻止用户 Cust2_HighLevelUser 看到ChangeRequestsForCust1
?
EPiServer仅检查是否有任何角色足以授予访问权限,并且由于用户属于 ChangeRequestRole ,因此无论客户特定角色如何,都将授予他们访问权限。是否有可能使EPiServer检查客户角色和页面角色?
或者我是否必须从另一个视图中查看此内容?如果您遇到此问题并以其他方式解决,请告诉我。
很抱歉,很长的帖子,但希望我明白我的观点。
答案 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);
}
}
}