我们已将 DNN 7.1.2 专业版升级到 DNN 9.0.1。升级很顺利,没有任何错误。但是,当访问升级后的网站时,页面上没有加载任何模块。同时,我想强调正在加载正确的皮肤菜单等。经过大量调试后,我能够在名为 DotNetNuke.Profession.dll 的 dll 中找到他的问题。这个 dll 有一个名为 GranularPermissionProvider 的类,它根据当前用户权限检查模块是否需要显示在页面上。罪魁祸首代码似乎如下:
GranularPermissionProvider.cs
//DotNetNuke.Professional 中的代码
public override bool CanViewModule(ModuleInfo module)
{
if (!this.Application.HasActiveLicenseOrIsTrial)
return base.CanViewModule(module);
if (!PortalSecurity.IsInRoles(module.ModulePermissions.ToString("VIEW")))
return PortalSecurity.IsInRoles(module.ModulePermissions.ToString("EDIT"));
return true;
}
而基础PermissionProvider.cs 类中的代码如下。
/// <summary>
/// Returns a flag indicating whether the current user can view a module
/// </summary>
/// <param name="module">The page</param>
/// <returns>A flag indicating whether the user has permission</returns>
public virtual bool CanViewModule(ModuleInfo module)
{
bool canView;
if (module.InheritViewPermissions)
{
TabInfo objTab = TabController.Instance.GetTab(module.TabID, module.PortalID, false);
canView = TabPermissionController.CanViewPage(objTab);
}
else
{
canView = PortalSecurity.IsInRoles(module.ModulePermissions.ToString(ViewModulePermissionKey));
}
return canView;
}
如果仔细观察,基本代码会检查模块是否继承了 GranularPermissionProvider 类中完全缺失的页面权限。我怀疑这是由于未加载哪些模块而导致的问题。我想知道是否有相同的解决方法?