在Kentico中拒绝访问单个页面,除非使用特定角色

时间:2016-05-25 21:29:02

标签: kentico

我一直在努力限制我的Kentico安装中的一个页面只能被两个角色查看,其他人应该被重定向到一个页面告诉他们他们需要跳过付费专区。我还没有确定最好的方法来做到这一点。一路走来,我发现当我尝试从页面顶部的菜单访问该页面时,它通过拒绝访问来尊重我的许可。但是,当我从页面下方的可编辑Web部件使用相同的链接时,它似乎忽略了权限。虽然看起来这里有两个问题我真正想知道的是如何拒绝访问,除非用户处于特定角色,然后如果被拒绝我如何将它们重定向到页面以解释他们被拒绝的原因。感谢。

3 个答案:

答案 0 :(得分:1)

试试这个:

在您的顶级页面(母版页)中添加角色" Everyone"并授予他们读取权限。这将通过其余页面进行复制,每个人都可以看到所有内容。是的,听起来很可疑,但继续阅读...

接下来,导航到您要限制访问的特定页面。在“安全”选项卡上,单击“更改权限继承”#34;链接。然后单击"中断继承并复制父权限"。接下来选择Everyone角色并选中Deny完整控件框。

现在添加您的特定角色并将其权限设置为“读取”。

这应该可以让你的权限按照你想要的那样工作。

对于消息和重定向,如果在特定角色中,您可以在页面上放置一个webpart并说明它们是否不属于角色,只需使用您选择的重定向将其重定向到页面即可。如果webpart处于特定角色,它将自行处理。请记住,用户必须已经登录和/或有权访问该页面,因此该页面不受任何限制。

答案 1 :(得分:1)

感谢您的所有建议。这是我发现的。首先,两页表现不同的原因是我的脑部痉挛。我嵌入了两个不同的链接。我的坏!

其次,在安全方面,似乎拒绝优先于允许。如果该角色被拒绝,则不允许"允许"将覆盖拒绝。我解决这个问题的方法是为那些我想要允许访问文本的人创建一个区域,为那些我想要拒绝的人创建一个区域或web部分。在区域可见性部分(单击&#34旁边的箭头;可见"输入文本)我输入一个布尔语句:

  

{%CurrentUser.IsInRole("会员")|| CurrentUser.IsInRole(" SecondRoleToTest")#%}

这样,任何进入这两个组中的任何一个都会给这个语句带来真正的价值,并且可见等于是(注意"!")。对于区域或网络部分,我想呈现给那些不属于那些群体成员的人,我提出了相反的条件

  

{%!(CurrentUser.IsInRole("会员")|| CurrentUser.IsInRole(" SecondRoleToTest"))#%}

它会显示那些不在这些组中的人的材料。在这种情况下,文本读取等同于"您需要是这个或那个,并带有关于如何成为这个或那个"的信息的链接。不得不承认我在这一点上学到了很多东西。感谢您的帮助,您帮助我找到答案。

答案 2 :(得分:0)

如果我理解正确,你说你已经将一个页面锁定为只有两个角色?如果某人点击不在这些角色中的导航链接,他们将被拒绝访问...是否正确?但如果一个人点击页面上的webpart链接,他们就不会被拒绝访问......对吗?

这是不寻常的,我也想知道如何在webpart中设置链接?它只是一个锚链接还是你使用的是Kentico永久链接?这些不应该有任何不同,但只是一个想法。听起来很可能有一些权限仍然允许访问页面,但是如果没有看到您的实际权限设置,很难告诉您可能导致该问题的原因。

就重定向而言,默认情况下,如果您有其中一个设置(您可以在“设置”选项卡中设置),它应该重定向到登录页面,否则将拒绝访问。您可以非常轻松地编写一些自定义代码,以将未加入角色的用户重定向到另一个页面。对于可重用性,您可以将其写入自定义webpart并具有用户所需角色的属性以及重定向页面位置的属性,然后从那里处理它。这样做可以让你在你想要的任何页面上使用相同的模式......但是你需要绕过内置的安全锁定东西。

最后(我不知道要使用的类)你可能会覆盖在访问网站中的页面时发生“访问被拒绝”时发生的情况。然后你可以进行自己的自定义重定向。我相信其他人可以参加确切的课程。