webdav portal upload func added

This commit is contained in:
vfedosevich 2015-01-20 01:24:39 -08:00
parent 1da7c6c3b3
commit a882072b02
23 changed files with 553 additions and 17 deletions

View file

@ -0,0 +1,13 @@
using System;
namespace WebsitePanel.WebDav.Core.Security.Authorization.Enums
{
[Flags]
public enum WebDavPermissions
{
Empty = 0,
None = 1,
Read = 2,
Write = 4
}
}

View file

@ -0,0 +1,69 @@
using System;
using System.Linq;
using WebsitePanel.WebDav.Core.Interfaces.Security;
using WebsitePanel.WebDav.Core.Security.Authentication.Principals;
using WebsitePanel.WebDav.Core.Security.Authorization.Enums;
using WebsitePanel.WebDav.Core.Wsp.Framework;
namespace WebsitePanel.WebDav.Core.Security.Authorization
{
public class WebDavAuthorizationService : IWebDavAuthorizationService
{
public bool HasAccess(WspPrincipal principal, string path)
{
var permissions = GetPermissions(principal, path);
return permissions.HasFlag(WebDavPermissions.Read) || permissions.HasFlag(WebDavPermissions.Write);
}
public WebDavPermissions GetPermissions(WspPrincipal principal, string path)
{
if (string.IsNullOrEmpty(path))
{
return WebDavPermissions.Read;
}
var resultPermissions = WebDavPermissions.Empty;
var rootFolder = GetRootFolder(path);
var userGroups = WSP.Services.Organizations.GetSecurityGroupsByMember(principal.ItemId, principal.AccountId);
var rootFolders = WSP.Services.EnterpriseStorage.GetEnterpriseFolders(principal.ItemId);
var esRootFolder = rootFolders.FirstOrDefault(x => x.Name == rootFolder);
if (esRootFolder == null)
{
return WebDavPermissions.None;
}
var permissions = WSP.Services.EnterpriseStorage.GetEnterpriseFolderPermissions(principal.ItemId, esRootFolder.Name);
foreach (var permission in permissions)
{
if ((!permission.IsGroup
&& (permission.DisplayName == principal.UserName || permission.DisplayName == principal.DisplayName))
|| (permission.IsGroup && userGroups.Any(x => x.DisplayName == permission.DisplayName)))
{
if (permission.Access.ToLowerInvariant().Contains("read"))
{
resultPermissions |= WebDavPermissions.Read;
}
if (permission.Access.ToLowerInvariant().Contains("write"))
{
resultPermissions |= WebDavPermissions.Write;
}
}
}
return resultPermissions;
}
private string GetRootFolder(string path)
{
return path.Split(new[]{'/'}, StringSplitOptions.RemoveEmptyEntries)[0];
}
}
}