如何按角色获取页面权限

时间:2019-01-30 18:12:28

标签: c# kentico

在MVC中使用Kentico 11.0.26。 我需要找出页面上特定角色的权限。 “ API示例”页面仅显示如何按用户(而非角色)进行操作。

https://docs.kentico.com/api11/content-management/page-security#Pagesecurity-Checkingpermissionsforspecificpages(ACLs)

编辑:我正在尝试像这样使用它

foreach (CMS.DocumentEngine.NodePermissionsEnum permission in (CMS.DocumentEngine.NodePermissionsEnum[])Enum.GetValues(typeof(CMS.DocumentEngine.NodePermissionsEnum)))
{
    DataSet dataSet = AclItemInfoProvider.GetAllowedRoles(page.NodeACLID, permission, "OperatorName,Allowed,Denied");
    foreach (DataTable table in dataSet.Tables)
    {
        foreach (DataRow row in table.Rows)
        {
            string roleName = row[table.Columns[0]].ToString();
            string allowed = row[table.Columns[1]].ToString();
            string denied = row[table.Columns[2]].ToString();
            Console.WriteLine("Role: {0}: Permission: {1}, Allowed: {2}, Denied: {3}", roleName, permission, allowed, denied);
        }
    }
}

为什么允许的值为47,而不是0或1?

2 个答案:

答案 0 :(得分:0)

我无法对此进行测试,但这可能是一个错误。 API内有一个位移,它正在转换SP返回的值。您可以尝试再次检查并将其作为错误提交。但是,您可以尝试通过对象查询检索角色绑定的ACLItemInfo:

var AclItems = AclItemInfoProvider.GetAclItems().WhereEquals(nameof(AclItemInfo.RoleID), 7)

答案 1 :(得分:0)

我的理解是,因为数据库中只有一个字段包含允许的值,但是有多个权限,例如“读取(0),修改(1),创建(2),删除(3)..”。 ,它们全部都保存为int值(以2为底,且与精确权限有关的指数)保存在一个字段中。在这种情况下,下次检索值时,您将确定知道选择了哪个值,因为只有一个组合给出了准确的数字。为了澄清这一点,下面的每个数字代表一个许可(Read为0,表示2⁰= 1,Modify为2¹= 2,Create为2²= 4 ...):

1 2 4 8 16 32 64 
+ + + + -  +   -  = 47

这意味着您当前的文档已被允许:读取,修改,创建,删除和ExploreTree权限。

拒绝也一样。

您可以通过以下代码检查哪些许可权:

    /// <summary>
    /// Parses permission value and return true if appropriate bit is 1.
    /// </summary>
    protected bool IsPermissionTrue(int permissionValue, NodePermissionsEnum permission)
    {
        return ((permissionValue >> Convert.ToInt32(permission)) % 2) == 1;
    }