Kentico UserInfoProvider.IsAuthorizedPerClass 未按预期工作
Kentico UserInfoProvider.IsAuthorizedPerClass not working as expected
我正在尝试检查给定用户是否有权访问特定自定义 Table。
基于 check permissions for a custom table 的 kentico 文档中列出的示例,我设置了一个类似的调用,使用我的自定义 table class 名称和用户信息,但对 "UserInfoProvider.IsAuthorizedPerClass" 的调用总是return 错误:
private bool CheckCustomTableReadPermission(UserInfo user = null)
{
// Gets the user object
//UserInfo user = UserInfoProvider.GetUserInfo("CMSEditor");
//UserInfo user = UserInfoProvider.GetUserInfo("someothervalidusername");
//UserInfo user = CurrentUser;
//normally outside of this function
UserInfo CurrentUser = MembershipContext.AuthenticatedUser;
string CustomTableClassName = "Namespc.TblName";
if (user == null)
{
user = CurrentUser;
}
if (user != null)
{
// Checks whether the user has the Read permission for the CMS.MenuItem page type
if (UserInfoProvider.IsAuthorizedPerClass(CustomTableClassName, "Read", SiteContext.CurrentSiteName, user))
{
// Perform an action according to the result
return true;
}
}
return false;
}
除了 "Read" 之外,还有谁能提到有效的权限名称字符串是什么? (例如:"Modify"?"Delete"?"Insert"?)
UserInfoProvider.IsAuthorizedPerClass 是解析给定用户的所有成员资格,还是只检查用户是否明确添加到自定义 Table?
有什么建议吗?我们正在使用 Kentico v8.2.25
谢谢!
维克多
编辑:
我,笨蛋。您正在为用户参数分配默认值,而不是自动分配的值。我仍然会检查以确保您获得了您期望的用户信息,因为这似乎是最有可能导致问题的原因。
您似乎 运行 遇到了问题:
private bool CheckCustomTableReadPermission(UserInfo user = null)
由于您在调用方法时将 user
参数自动分配给 null,因此以下语句将始终为真:
if (user == null)
{
user = CurrentUser;
}
而且你永远不会达到你的其他陈述:
if (user != null)
{
// Checks whether the user has the Read permission for the CMS.MenuItem page type
if (UserInfoProvider.IsAuthorizedPerClass(CustomTableClassName, "Read", SiteContext.CurrentSiteName, user))
{
// Perform an action according to the result
return true;
}
}
所以你的方法总是return false。
IsAuthorizedPerClass() 函数仅检查用户对您提供的 class 的权限进行检查,并且仅检查您提供的特定权限进行检查(例如 "Read")。所以是的,它只会查看用户是否具有您自定义 table.
的读取权限
我不是 100% 确定所有权限是什么,尽管它似乎存储在枚举中。我会尽快回复你。希望这有帮助:)
IsAuthorizedPerClass()
方法 return 仅当用户的角色已被授予 明确地 在该 class 角色的权限内时才为真.所有其他时候,即使用户实际上能够 Read/Modify/etc,它也会 return false。习俗 table.
要获得正确的权限字符串,您可以使用CMS.DataEngine.PermissionsEnum.<type>.ToString()
要检查用户是否有权读取特定自定义 table,您需要按顺序进行以下 3 项检查:
UserInfoProvider.IsAuthorizedPerUIElement("CMS.CustomTables","CustomTables",SiteContext.CurrentSiteName,user)
UserInfoProvider.IsAuthorizedPerResource("CMS.CustomTables", PermissionsEnum.Read.ToString(), SiteContext.CurrentSiteName, user)
UserInfoProvider.IsAuthorizedPerClass(CustomTableClassName, PermissionsEnum.Read.ToString(), SiteContext.CurrentSiteName, user)
如果按照
中的方式来做呢?
CMS\CMSModules\CustomTables\Tools\CustomTable_Data_EditItem.aspx.cs
即:
DataClassInfo dci = DataClassInfoProvider.GetDataClassInfo(customTableId);
dci.CheckPermissions(PermissionsEnum.Read, SiteContext.CurrentSiteName, MembershipContext.AuthenticatedUser)
可能的权限位于CMS.DataEngine.PermissionsEnum
。 (读取、修改、创建、删除、销毁)
我正在尝试检查给定用户是否有权访问特定自定义 Table。 基于 check permissions for a custom table 的 kentico 文档中列出的示例,我设置了一个类似的调用,使用我的自定义 table class 名称和用户信息,但对 "UserInfoProvider.IsAuthorizedPerClass" 的调用总是return 错误:
private bool CheckCustomTableReadPermission(UserInfo user = null)
{
// Gets the user object
//UserInfo user = UserInfoProvider.GetUserInfo("CMSEditor");
//UserInfo user = UserInfoProvider.GetUserInfo("someothervalidusername");
//UserInfo user = CurrentUser;
//normally outside of this function
UserInfo CurrentUser = MembershipContext.AuthenticatedUser;
string CustomTableClassName = "Namespc.TblName";
if (user == null)
{
user = CurrentUser;
}
if (user != null)
{
// Checks whether the user has the Read permission for the CMS.MenuItem page type
if (UserInfoProvider.IsAuthorizedPerClass(CustomTableClassName, "Read", SiteContext.CurrentSiteName, user))
{
// Perform an action according to the result
return true;
}
}
return false;
}
除了 "Read" 之外,还有谁能提到有效的权限名称字符串是什么? (例如:"Modify"?"Delete"?"Insert"?)
UserInfoProvider.IsAuthorizedPerClass 是解析给定用户的所有成员资格,还是只检查用户是否明确添加到自定义 Table?
有什么建议吗?我们正在使用 Kentico v8.2.25
谢谢!
维克多
编辑:
我,笨蛋。您正在为用户参数分配默认值,而不是自动分配的值。我仍然会检查以确保您获得了您期望的用户信息,因为这似乎是最有可能导致问题的原因。
您似乎 运行 遇到了问题:
private bool CheckCustomTableReadPermission(UserInfo user = null)
由于您在调用方法时将 user
参数自动分配给 null,因此以下语句将始终为真:
if (user == null)
{
user = CurrentUser;
}
而且你永远不会达到你的其他陈述:
if (user != null)
{
// Checks whether the user has the Read permission for the CMS.MenuItem page type
if (UserInfoProvider.IsAuthorizedPerClass(CustomTableClassName, "Read", SiteContext.CurrentSiteName, user))
{
// Perform an action according to the result
return true;
}
}
所以你的方法总是return false。
IsAuthorizedPerClass() 函数仅检查用户对您提供的 class 的权限进行检查,并且仅检查您提供的特定权限进行检查(例如 "Read")。所以是的,它只会查看用户是否具有您自定义 table.
的读取权限我不是 100% 确定所有权限是什么,尽管它似乎存储在枚举中。我会尽快回复你。希望这有帮助:)
IsAuthorizedPerClass()
方法 return 仅当用户的角色已被授予 明确地 在该 class 角色的权限内时才为真.所有其他时候,即使用户实际上能够 Read/Modify/etc,它也会 return false。习俗 table.
要获得正确的权限字符串,您可以使用CMS.DataEngine.PermissionsEnum.<type>.ToString()
要检查用户是否有权读取特定自定义 table,您需要按顺序进行以下 3 项检查:
UserInfoProvider.IsAuthorizedPerUIElement("CMS.CustomTables","CustomTables",SiteContext.CurrentSiteName,user)
UserInfoProvider.IsAuthorizedPerResource("CMS.CustomTables", PermissionsEnum.Read.ToString(), SiteContext.CurrentSiteName, user)
UserInfoProvider.IsAuthorizedPerClass(CustomTableClassName, PermissionsEnum.Read.ToString(), SiteContext.CurrentSiteName, user)
如果按照
中的方式来做呢?CMS\CMSModules\CustomTables\Tools\CustomTable_Data_EditItem.aspx.cs
即:
DataClassInfo dci = DataClassInfoProvider.GetDataClassInfo(customTableId);
dci.CheckPermissions(PermissionsEnum.Read, SiteContext.CurrentSiteName, MembershipContext.AuthenticatedUser)
可能的权限位于CMS.DataEngine.PermissionsEnum
。 (读取、修改、创建、删除、销毁)