public static bool HasPermissions(this IObjVerEx obj, PERMISSIONS permissionsToCheck, int userOrGroupId, bool isGroup)
        {
            if (obj.objVerEx.Permissions == null)
            {
                return(false);
            }

            bool hasPermission = true;
            ObjectVersionPermissions   objPermissions = obj.objVerEx.Permissions;
            AccessControlListComponent aclComponent   = objPermissions.AccessControlList.CustomComponent;
            AccessControlEntryData     aceData        = aclComponent.GetACEByUserOrGroupID(userOrGroupId, isGroup);

            if ((permissionsToCheck & PERMISSIONS.READ) == PERMISSIONS.READ)
            {
                hasPermission = hasPermission && aceData.ReadPermission == MFPermission.MFPermissionAllow;
            }
            if ((permissionsToCheck & PERMISSIONS.DELETE) == PERMISSIONS.DELETE)
            {
                hasPermission = hasPermission && aceData.DeletePermission == MFPermission.MFPermissionAllow;
            }
            if ((permissionsToCheck & PERMISSIONS.EDIT) == PERMISSIONS.EDIT)
            {
                hasPermission = hasPermission && aceData.EditPermission == MFPermission.MFPermissionAllow;
            }
            if ((permissionsToCheck & PERMISSIONS.CHANGE_PERMISSIONS) == PERMISSIONS.CHANGE_PERMISSIONS)
            {
                hasPermission = hasPermission && aceData.ChangePermissionsPermission == MFPermission.MFPermissionAllow;
            }
            if ((permissionsToCheck & PERMISSIONS.ATTACH_OBJECT) == PERMISSIONS.ATTACH_OBJECT)
            {
                hasPermission = hasPermission && aceData.AttachObjectsPermission == MFPermission.MFPermissionAllow;
            }

            return(hasPermission);
        }
        public static void CreateNewDocumentWithNewACL()
        {
            LogIntoVault();

            //Prerequisites for creating an object in mfiles;
            //Type of object E.g. 0 is for document
            //PropertyValues
            //Source files if the object's type is document or any other type that can have documents

            var properties = new PropertyValues();

            //Class 0 -> Sınıflandırılmamış Doküman
            var classProperty = new PropertyValue();

            classProperty.PropertyDef = (int)MFBuiltInPropertyDef.MFBuiltInPropertyDefClass; //Simply 100
            classProperty.TypedValue.SetValue(MFDataType.MFDatatypeLookup, 0);
            properties.Add(0, classProperty);

            //Name or Title -> İsim veya başlık
            var nameProperty = new PropertyValue();

            nameProperty.PropertyDef = (int)MFBuiltInPropertyDef.MFBuiltInPropertyDefNameOrTitle; //Simply 0
            nameProperty.TypedValue.SetValue(MFDataType.MFDatatypeText, "SampleTextFile");
            properties.Add(0, nameProperty);

            //File from fileSystem
            var sourceObjectFile = new SourceObjectFile();

            sourceObjectFile.Title          = "SampleTextFile";
            sourceObjectFile.SourceFilePath = "SampleTextFile.txt";
            sourceObjectFile.Extension      = "txt";


            //Create New ACL
            var accessControlList = new AccessControlList();

            accessControlList.IsFullyAuthoritative = true;

            //Create Component
            var aclComponent = new AccessControlListComponent();


            //Create Entry
            var aclEntryKey = new AccessControlEntryKey();

            aclEntryKey.SetUserOrGroupID(1, true);

            //Create Data (Permissions for Entry)
            var aclData = new AccessControlEntryData();

            aclData.DeletePermission            = MFPermission.MFPermissionNotSet;
            aclData.ReadPermission              = MFPermission.MFPermissionAllow;
            aclData.EditPermission              = MFPermission.MFPermissionNotSet;
            aclData.AttachObjectsPermission     = MFPermission.MFPermissionAllow;
            aclData.ChangePermissionsPermission = MFPermission.MFPermissionNotSet;

            //Set Entry Key, Data
            aclComponent.AccessControlEntries.Add(aclEntryKey, aclData);

            //Add to ACL
            accessControlList.CustomComponent = aclComponent;

            var namedACLAdmin = new NamedACLAdmin();
            var namedACL      = new NamedACL();

            namedACL.AccessControlList = accessControlList;
            namedACL.Name = "NewACL" + Guid.NewGuid().ToString().Substring(7);

            namedACLAdmin.NamedACL = namedACL;

            //Add ACL TO Server
            var newCreatedACL = loggedInVault.NamedACLOperations.AddNamedACLAdmin(namedACLAdmin);

            //Use newly Added ACL
            loggedInVault.ObjectOperations.CreateNewSFDObject(
                0
                , properties
                , sourceObjectFile
                , true
                , newCreatedACL.NamedACL.AccessControlList);
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="_CreateOrUpdateInfoComponent"/> class.
        /// </summary>
        /// <param name="selector">The selector.</param>
        /// <param name="pageObjectFactory">The page object factory.</param>
        /// <param name="driver">The driver.</param>
        /// <exception cref="ArgumentNullException">pageObjectFactory</exception>
        public _CreateOrUpdateInfoComponent(By selector,
                                            IPageObjectFactory pageObjectFactory,
                                            IWebDriver driver)
            : base(selector, driver)
        {
            this.pageObjectFactory = pageObjectFactory
                                     ?? throw new ArgumentNullException(nameof(pageObjectFactory));

            GeneralInformation = new GeneralInformationComponent(
                By.CssSelector(".panel.panel-default"),
                pageObjectFactory,
                WrappedDriver);

            GiftCard = new GroupGiftCardComponent(
                By.CssSelector("#group-giftcard"),
                WrappedDriver);

            DownloadableProduct = new DownloadableProductComponent(
                By.CssSelector("#group-downloads"),
                WrappedDriver);

            RecurringProduct = new RecurringProductComponent(
                By.CssSelector("#group-recurring"),
                WrappedDriver);

            Rental = new RentalComponent(
                By.CssSelector("#group-rental"),
                WrappedDriver);

            Prices = new PricesComponent(
                By.CssSelector("#group-prices"),
                WrappedDriver);

            TierPrices = new TierPricesComponent(
                By.CssSelector("#tier-prices"),
                pageObjectFactory,
                WrappedDriver);

            Inventory = new InventoryComponent(
                By.CssSelector("#group-inventory"),
                WrappedDriver);

            Shipping = new ShippingComponent(
                By.CssSelector("#group-shipping"),
                WrappedDriver);

            Mapping = new MappingComponent(
                By.CssSelector("#group-shipping + div"),
                WrappedDriver);

            AccessControlList = new AccessControlListComponent(
                By.CssSelector("#group-shipping + div + div"),
                WrappedDriver);

            RequireOtherProducts = new RequireOtherProductsComponent(
                By.CssSelector("#group-required-other-products"),
                WrappedDriver);

            RelatedProducts = new RelatedProductsComponent(
                By.CssSelector("#group-required-other-products + div"),
                pageObjectFactory,
                WrappedDriver);

            CrossSells = new CrossSellsComponent(
                By.CssSelector("#group-required-other-products + div + div"),
                pageObjectFactory,
                WrappedDriver);
        }