Skip to content

Commit ae1dcec

Browse files
authored
Merge pull request #1231 from johnhenley/issues/social-group-integration-security-1229
ENH: Save Social Integration forum security using common permissions
2 parents bede81a + cd11016 commit ae1dcec

File tree

3 files changed

+119
-2
lines changed

3 files changed

+119
-2
lines changed

Dnn.CommunityForums/Controllers/ForumController.cs

+16
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ namespace DotNetNuke.Modules.ActiveForums.Controllers
3333
using DotNetNuke.UI.UserControls;
3434
using DotNetNuke.Common.Utilities;
3535
using DotNetNuke.Modules.ActiveForums.Entities;
36+
using DotNetNuke.Collections;
3637

3738
internal class ForumController : DotNetNuke.Modules.ActiveForums.Controllers.RepositoryControllerBase<DotNetNuke.Modules.ActiveForums.Entities.ForumInfo>
3839
{
@@ -515,6 +516,21 @@ internal static bool UpdateForumLastUpdates(int forumId)
515516
}
516517
}
517518

519+
internal static void UpdatePermissionsForSocialGroupForums(int moduleId)
520+
{
521+
try
522+
{
523+
new DotNetNuke.Modules.ActiveForums.Controllers.ForumController().Get().Where(f => f.SocialGroupId != 0).ForEach(forum =>
524+
{
525+
new DotNetNuke.Modules.ActiveForums.Controllers.PermissionController().UpdateSecurityForSocialGroupForum(forum);
526+
});
527+
}
528+
catch (Exception ex)
529+
{
530+
Exceptions.LogException(ex);
531+
}
532+
}
533+
518534
internal static string GetLastPostSubjectLinkTag(int length, DotNetNuke.Modules.ActiveForums.Entities.ForumInfo fi, int tabId)
519535
{
520536
string subject = Utilities.StripHTMLTag(System.Net.WebUtility.HtmlDecode(fi.LastPostSubject)).Replace("[", "&#91").Replace("]", "&#93");

Dnn.CommunityForums/Controllers/PermissionController.cs

+101-2
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,11 @@
2121
namespace DotNetNuke.Modules.ActiveForums.Controllers
2222
{
2323
using System;
24+
using System.Collections;
2425
using System.Collections.Specialized;
2526
using System.Linq;
2627
using System.Linq.Expressions;
28+
using System.Xml;
2729

2830
using DotNetNuke.Abstractions.Portals;
2931

@@ -61,6 +63,104 @@ internal class PermissionController : DotNetNuke.Modules.ActiveForums.Controller
6163
return this.GetById(permissionInfo.PermissionsId, permissionInfo.ModuleId);
6264
}
6365

66+
internal void UpdateSecurityForSocialGroupForum(DotNetNuke.Modules.ActiveForums.Entities.ForumInfo forum)
67+
{
68+
var permissions = this.GetById(forum.PermissionsId, forum.ModuleId);
69+
Hashtable htSettings = DotNetNuke.Entities.Modules.ModuleController.Instance.GetModule(moduleId: forum.ModuleId, tabId: forum.TabId, ignoreCache: false).TabModuleSettings;
70+
if (htSettings == null || htSettings.Count == 0)
71+
{
72+
htSettings = DotNetNuke.Entities.Modules.ModuleController.Instance.GetModule(moduleId: forum.ModuleId, tabId: forum.TabId, ignoreCache: false).ModuleSettings;
73+
}
74+
75+
if (htSettings == null || htSettings.Count == 0 || !htSettings.ContainsKey("ForumConfig"))
76+
{
77+
var ex = new Exception($"Unable to configure forum security for Social Group: {forum.SocialGroupId}");
78+
DotNetNuke.Services.Exceptions.Exceptions.LogException(ex);
79+
}
80+
else
81+
{
82+
var xDoc = new XmlDocument();
83+
xDoc.LoadXml(htSettings["ForumConfig"].ToString());
84+
XmlNode xRoot = xDoc.DocumentElement;
85+
var roleIdAnon = Convert.ToInt32(Common.Globals.glbRoleUnauthUser);
86+
var roleIdAdmin = GetAdministratorsRoleId(forum.PortalId);
87+
var roleIdRegUsers = GetRegisteredRoleId(forum.PortalId);
88+
var roleIdGroupMember = forum.SocialGroupId;
89+
foreach (var sectype in new string[] { "groupadmin", "groupmember", "registereduser", "anon" })
90+
{
91+
var xNode = xRoot.SelectSingleNode("//defaultforums/forum/security[@type='" + sectype + "']");
92+
foreach (XmlNode sNode in xNode.ChildNodes)
93+
{
94+
var sPerm = sNode.Name;
95+
var roleId = -1;
96+
switch (sectype)
97+
{
98+
case "groupadmin":
99+
roleId = roleIdAdmin;
100+
break;
101+
case "groupmember":
102+
roleId = roleIdGroupMember;
103+
break;
104+
case "registereduser":
105+
roleId = roleIdRegUsers;
106+
break;
107+
case "anon":
108+
roleId = roleIdAnon;
109+
break;
110+
}
111+
112+
if (Convert.ToBoolean(sNode.Attributes["value"].Value))
113+
{
114+
switch (sPerm)
115+
{
116+
case "view":
117+
permissions.View = AddPermToSet(roleId.ToString(), 0, permissions.View);
118+
break;
119+
case "read":
120+
permissions.Read = AddPermToSet(roleId.ToString(), 0, permissions.Read);
121+
break;
122+
case "create":
123+
permissions.Create = AddPermToSet(roleId.ToString(), 0, permissions.Create);
124+
break;
125+
case "reply":
126+
permissions.Reply = AddPermToSet(roleId.ToString(), 0, permissions.Reply);
127+
break;
128+
case "edit":
129+
permissions.Edit = AddPermToSet(roleId.ToString(), 0, permissions.Edit);
130+
break;
131+
case "delete":
132+
permissions.Delete = AddPermToSet(roleId.ToString(), 0, permissions.Delete);
133+
break;
134+
case "lock":
135+
permissions.Lock = AddPermToSet(roleId.ToString(), 0, permissions.Lock);
136+
break;
137+
case "pin":
138+
permissions.Pin = AddPermToSet(roleId.ToString(), 0, permissions.Pin);
139+
break;
140+
case "attach":
141+
permissions.Attach = AddPermToSet(roleId.ToString(), 0, permissions.Attach);
142+
break;
143+
case "subscribe":
144+
permissions.Subscribe = AddPermToSet(roleId.ToString(), 0, permissions.Subscribe);
145+
break;
146+
case "moderate":
147+
permissions.Moderate = AddPermToSet(roleId.ToString(), 0, permissions.Moderate);
148+
break;
149+
case "move":
150+
permissions.Move = AddPermToSet(roleId.ToString(), 0, permissions.Move);
151+
break;
152+
case "ban":
153+
permissions.Ban = AddPermToSet(roleId.ToString(), 0, permissions.Ban);
154+
break;
155+
}
156+
}
157+
}
158+
}
159+
160+
this.Update(permissions);
161+
}
162+
}
163+
64164
internal DotNetNuke.Modules.ActiveForums.Entities.PermissionInfo GetById(int permissionId, int moduleId)
65165
{
66166
var cachekey = this.GetCacheKey(moduleId: moduleId, id: permissionId);
@@ -69,9 +169,7 @@ internal DotNetNuke.Modules.ActiveForums.Entities.PermissionInfo GetById(int per
69169
{
70170
permissions = base.GetById(permissionId, moduleId);
71171
DotNetNuke.Modules.ActiveForums.DataCache.SettingsCacheStore(moduleId, cachekey, permissions);
72-
73172
}
74-
75173
return permissions;
76174
}
77175

@@ -637,6 +735,7 @@ public static string AddPermToSet(string objectId, int objectType, string permis
637735
{
638736
string newSet = RemovePermFromSet(objectId, objectType, permissionSet);
639737
string[] permSet = newSet.Split('|');
738+
permSet[objectType] += string.Concat(objectId, ";");
640739
newSet = string.Concat(permSet[0] + "|" + (permSet.Length > 1 ? permSet[1] : string.Empty) + "|" + (permSet.Length > 2 ? permSet[2] : string.Empty), "|");
641740
return newSet;
642741
}

Dnn.CommunityForums/ForumSettings.ascx.cs

+2
Original file line numberDiff line numberDiff line change
@@ -272,6 +272,8 @@ public override void UpdateSettings()
272272
var anonSec = this.txtGroupAnonSec.Value.Split(',');
273273
this.SaveForumSecurity("anon", anonSec);
274274

275+
DotNetNuke.Modules.ActiveForums.Controllers.ForumController.UpdatePermissionsForSocialGroupForums(this.ModuleId);
276+
275277
try
276278
{
277279
if (this.IsFullTextAvailable && this.FullTextSearch && this.FullTextStatus != 1) // Available, selected and not currently installed

0 commit comments

Comments
 (0)