Exemple #1
0
    internal void FilterBasedOnPermissions(IList items, IUser user)
    {
        var length = items.Count;

        if (length > 0)
        {
            var ids = new List <int>();
            for (var i = 0; i < length; i++)
            {
                ids.Add(((dynamic)items[i] !).Id);
            }

            //get all the permissions for these nodes in one call
            EntityPermissionCollection permissions = _userService.GetPermissions(user, ids.ToArray());
            var toRemove = new List <dynamic>();
            foreach (dynamic item in items)
            {
                //get the combined permission set across all user groups for this node
                //we're in the world of dynamics here so we need to cast
                var nodePermission = ((IEnumerable <string>)permissions.GetAllPermissions(item.Id)).ToArray();

                //if the permission being checked doesn't exist then remove the item
                if (nodePermission.Contains(_permissionToCheck.ToString(CultureInfo.InvariantCulture)) == false)
                {
                    toRemove.Add(item);
                }
            }

            foreach (dynamic item in toRemove)
            {
                items.Remove(item);
            }
        }
    }
    public Dictionary <int, string[]> GetPermissions(int[] nodeIds)
    {
        EntityPermissionCollection permissions = _userService
                                                 .GetPermissions(_backofficeSecurityAccessor.BackOfficeSecurity?.CurrentUser, nodeIds);

        var permissionsDictionary = new Dictionary <int, string[]>();

        foreach (var nodeId in nodeIds)
        {
            var aggregatePerms = permissions.GetAllPermissions(nodeId).ToArray();
            permissionsDictionary.Add(nodeId, aggregatePerms);
        }

        return(permissionsDictionary);
    }