54 lines
2.4 KiB
C#
54 lines
2.4 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Globalization;
|
|
using System.Linq;
|
|
using AutoMapper;
|
|
using umbraco.interfaces;
|
|
using Umbraco.Core;
|
|
using Umbraco.Core.CodeAnnotations;
|
|
using Umbraco.Core.Models.Membership;
|
|
using Umbraco.Core.Services;
|
|
using Umbraco.Web.Models.ContentEditing;
|
|
|
|
namespace Umbraco.Web.Models.Mapping
|
|
{
|
|
/// <summary>
|
|
/// Converts an IUserGroup instance into a dictionary of permissions by category
|
|
/// </summary>
|
|
internal class UserGroupDefaultPermissionsResolver : ValueResolver<IUserGroup, IDictionary<string, IEnumerable<Permission>>>
|
|
{
|
|
private readonly ILocalizedTextService _textService;
|
|
|
|
public UserGroupDefaultPermissionsResolver(ILocalizedTextService textService)
|
|
{
|
|
if (textService == null) throw new ArgumentNullException("textService");
|
|
_textService = textService;
|
|
}
|
|
|
|
protected override IDictionary<string, IEnumerable<Permission>> ResolveCore(IUserGroup source)
|
|
{
|
|
return ActionsResolver.Current.Actions
|
|
.Where(x => x.CanBePermissionAssigned)
|
|
.Select(x => GetPermission(x, source))
|
|
.GroupBy(x => x.Category)
|
|
.ToDictionary(x => x.Key, x => (IEnumerable<Permission>)x.ToArray());
|
|
}
|
|
|
|
private Permission GetPermission(IAction action, IUserGroup source)
|
|
{
|
|
var result = new Permission();
|
|
var attribute = action.GetType().GetCustomAttribute<ActionMetadataAttribute>(false);
|
|
result.Category = attribute == null
|
|
? _textService.Localize(string.Format("actionCategories/{0}", Constants.Conventions.PermissionCategories.OtherCategory))
|
|
: _textService.Localize(string.Format("actionCategories/{0}", attribute.Category));
|
|
result.Name = attribute == null || attribute.Name.IsNullOrWhiteSpace()
|
|
? _textService.Localize(string.Format("actions/{0}", action.Alias))
|
|
: attribute.Name;
|
|
result.Description = _textService.Localize(String.Format("actionDescriptions/{0}", action.Alias));
|
|
result.Icon = action.Icon;
|
|
result.Checked = source.Permissions != null && source.Permissions.Contains(action.Letter.ToString(CultureInfo.InvariantCulture));
|
|
result.PermissionCode = action.Letter.ToString(CultureInfo.InvariantCulture);
|
|
return result;
|
|
}
|
|
}
|
|
} |