diff --git a/umbraco/businesslogic/User.cs b/umbraco/businesslogic/User.cs
index bc0ac091eb..9ae56fc223 100644
--- a/umbraco/businesslogic/User.cs
+++ b/umbraco/businesslogic/User.cs
@@ -633,12 +633,19 @@ namespace umbraco.BusinessLogic
if (!_crudsInitialized)
initCruds();
- foreach (string nodeId in Path.Split(','))
+ // NH 4.7.1 changing default permission behavior to default to User Type permissions IF no specific permissions has been
+ // set for the current node
+ int nodeId = Path.Contains(",") ? int.Parse(Path.Substring(Path.LastIndexOf(",")+1)) : int.Parse(Path);
+ if (_cruds.ContainsKey(nodeId))
{
- if (_cruds.ContainsKey(int.Parse(nodeId)))
- cruds = _cruds[int.Parse(nodeId)].ToString();
+ return _cruds[int.Parse(Path.Substring(Path.LastIndexOf(",")+1))].ToString();
}
+ // exception to everything. If default cruds is empty and we're on root node; allow browse of root node
+ if (String.IsNullOrEmpty(cruds) && Path == "-1")
+ cruds = "F";
+
+ // else return default user type cruds
return cruds;
}
@@ -854,7 +861,7 @@ namespace umbraco.BusinessLogic
///
/// Flushes the user from cache.
///
- protected void FlushFromCache()
+ public void FlushFromCache()
{
OnFlushingFromCache(EventArgs.Empty);
diff --git a/umbraco/cms/businesslogic/CMSNode.cs b/umbraco/cms/businesslogic/CMSNode.cs
index 3b792597d9..c9ea1453b8 100644
--- a/umbraco/cms/businesslogic/CMSNode.cs
+++ b/umbraco/cms/businesslogic/CMSNode.cs
@@ -55,7 +55,7 @@ namespace umbraco.cms.businesslogic
#endregion
#region Private static
-
+
private static readonly string m_DefaultIconCssFile = IOHelper.MapPath(SystemDirectories.Umbraco_client + "/Tree/treeIcons.css");
private static List m_DefaultIconClasses = new List();
private static void initializeIconClasses()
@@ -229,7 +229,7 @@ namespace umbraco.cms.businesslogic
#endregion
#region Protected static
-
+
///
/// Given the protected modifier the CMSNode.MakeNew method can only be accessed by
@@ -244,7 +244,7 @@ namespace umbraco.cms.businesslogic
///
protected static CMSNode MakeNew(int parentId, Guid objectType, int userId, int level, string text, Guid uniqueID)
{
- CMSNode parent;
+ CMSNode parent = null;
string path = "";
int sortOrder = 0;
@@ -276,6 +276,17 @@ namespace umbraco.cms.businesslogic
CMSNode retVal = new CMSNode(uniqueID);
retVal.Path = path + "," + retVal.Id.ToString();
+ // NH 4.7.1 duplicate permissions because of refactor
+ if (parent != null)
+ {
+ IEnumerable permissions = Permission.GetNodePermissions(parent);
+ foreach (Permission p in permissions)
+ {
+ Permission.MakeNew(User.GetUser(p.UserId), retVal, p.PermissionId);
+ }
+
+ }
+
//event
NewEventArgs e = new NewEventArgs();
retVal.FireAfterNew(e);
@@ -311,7 +322,7 @@ namespace umbraco.cms.businesslogic
protected static ISqlHelper SqlHelper
{
get { return Application.SqlHelper; }
- }
+ }
#endregion
#region Constructors
@@ -361,7 +372,7 @@ namespace umbraco.cms.businesslogic
public CMSNode(Guid uniqueID, bool noSetup)
{
_id = SqlHelper.ExecuteScalar("SELECT id FROM umbracoNode WHERE uniqueID = @uniqueId", SqlHelper.CreateParameter("@uniqueId", uniqueID));
-
+
if (!noSetup)
setupNode();
}
@@ -370,8 +381,8 @@ namespace umbraco.cms.businesslogic
{
_id = reader.GetInt("id");
PopulateCMSNodeFromReader(reader);
- }
-
+ }
+
#endregion
#region Public Methods
@@ -468,9 +479,9 @@ order by level,sortOrder";
}
return base.ToString();
- }
+ }
- private void Move(CMSNode parent)
+ private void Move(CMSNode parent)
{
MoveEventArgs e = new MoveEventArgs();
FireBeforeMove(e);
@@ -624,7 +635,7 @@ order by level,sortOrder";
var node = new CMSNode(dr.GetInt("id"), true);
node.PopulateCMSNodeFromReader(dr);
descendants.Add(node);
- }
+ }
}
return descendants;
}
@@ -809,7 +820,7 @@ order by level,sortOrder";
{
System.Collections.ArrayList tmp = new System.Collections.ArrayList();
using (IRecordsReader dr = SqlHelper.ExecuteReader("SELECT id, createDate, trashed, parentId, nodeObjectType, nodeUser, level, path, sortOrder, uniqueID, text FROM umbracoNode WHERE ParentID = @ParentID AND nodeObjectType = @type order by sortOrder",
- SqlHelper.CreateParameter("@type", this.nodeObjectType),
+ SqlHelper.CreateParameter("@type", this.nodeObjectType),
SqlHelper.CreateParameter("ParentID", this.Id)))
{
while (dr.Read())
@@ -817,7 +828,7 @@ order by level,sortOrder";
tmp.Add(new CMSNode(dr));
}
}
-
+
CMSNode[] retval = new CMSNode[tmp.Count];
for (int i = 0; i < tmp.Count; i++)
@@ -937,7 +948,7 @@ order by level,sortOrder";
protected virtual void setupNode()
{
using (IRecordsReader dr = SqlHelper.ExecuteReader(m_SQLSingle,
- SqlHelper.CreateParameter("@id",this.Id)))
+ SqlHelper.CreateParameter("@id", this.Id)))
{
if (dr.Read())
{
@@ -996,7 +1007,7 @@ order by level,sortOrder";
{
xmlDoc.Load(xmlRdr);
}
-
+
return xd.ImportNode(xmlDoc.FirstChild, true);
}
@@ -1192,6 +1203,6 @@ order by level,sortOrder";
}
#endregion
-
+
}
}
\ No newline at end of file
diff --git a/umbraco/cms/businesslogic/Permission.cs b/umbraco/cms/businesslogic/Permission.cs
index 41291aa995..773231ce14 100644
--- a/umbraco/cms/businesslogic/Permission.cs
+++ b/umbraco/cms/businesslogic/Permission.cs
@@ -40,9 +40,12 @@ namespace umbraco.BusinessLogic
// Method is synchronized so exists remains consistent (avoiding race condition)
bool exists = SqlHelper.ExecuteScalar("SELECT COUNT(userId) FROM umbracoUser2nodePermission WHERE userId = @userId AND nodeId = @nodeId AND permission = @permission",
parameters) > 0;
- if (!exists)
+ if (!exists) {
SqlHelper.ExecuteNonQuery("INSERT INTO umbracoUser2nodePermission (userId, nodeId, permission) VALUES (@userId, @nodeId, @permission)",
parameters);
+ // clear user cache to ensure permissions are re-loaded
+ User.GetUser(User.Id).FlushFromCache();
+ }
}
///