我正在尝试检查给定用户是否可以访问特定的自定义表。 根据{{3}}的kentico文档中列出的示例,我使用自定义表类名和userinfo设置了类似的调用,但对“UserInfoProvider.IsAuthorizedPerClass”的调用始终返回false:
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;
}
任何人都可以提到有效的权限名称字符串是什么,而不是“读取”? (例如:“修改”?“删除”?“插入”?)
UserInfoProvider.IsAuthorizedPerClass是解析给定用户的所有成员资格,还是仅检查用户是否已明确添加到自定义表?
有什么建议吗?我们正在使用Kentico v8.2.25
谢谢!
维克多
答案 0 :(得分:2)
以与在
中完成相同的方式做到这一点CMS \ CMSModules \ CustomTables \工具\ CustomTable_Data_EditItem.aspx.cs
是:
DataClassInfo dci = DataClassInfoProvider.GetDataClassInfo(customTableId);
dci.CheckPermissions(PermissionsEnum.Read, SiteContext.CurrentSiteName, MembershipContext.AuthenticatedUser)
可能的权限位于CMS.DataEngine.PermissionsEnum
。 (阅读,修改,创建,删除,销毁)
答案 1 :(得分:1)
修改强>
我,笨蛋。您将默认值分配给用户参数,而不是自动分配的值。我仍然会检查以确保您获得了您期望的用户信息,因为这似乎是导致此问题的最可能原因。
你似乎遇到了一个问题:
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;
}
}
所以你的方法总是返回false。
IsAuthorizedPerClass()函数仅检查用户检查的类的用户权限,并仅检查您为其提供检查的特定权限(例如" Read")。所以,是的,它只会查看用户是否具有自定义表的读取权限。
我并非100%确定所有权限是什么,尽管它似乎存储在枚举中。我稍后会回复你。希望这会有所帮助:)
答案 2 :(得分:1)
{{1>}方法仅在用户的角色在该角色的权限中明确授予 权限时才会返回true。所有其他时间,即使用户实际上能够读取/修改/等,它也将返回false。自定义表。
要获取正确的权限字符串,您可以使用CMS.DataEngine.PermissionsEnum.<type>.ToString()
要检查用户是否具有读取特定自定义表的权限,您需要按顺序进行以下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)