/// <ToBeCompleted></ToBeCompleted> protected Attribute[] GetPropertyAttributes(IPropertyController controller, PropertyDescriptor descriptor) { if (controller == null) { throw new ArgumentNullException("controller"); } if (descriptor == null) { throw new ArgumentNullException("descriptor"); } try { int attrCount = descriptor.Attributes.Count; BrowsableAttribute browsableAttr = descriptor.Attributes[typeof(BrowsableAttribute)] as BrowsableAttribute; ReadOnlyAttribute readOnlyAttr = descriptor.Attributes[typeof(ReadOnlyAttribute)] as ReadOnlyAttribute; DescriptionAttribute descriptionAttr = descriptor.Attributes[typeof(DescriptionAttribute)] as DescriptionAttribute; RequiredPermissionAttribute requiredPermissionAttr = descriptor.Attributes[typeof(RequiredPermissionAttribute)] as RequiredPermissionAttribute; if (requiredPermissionAttr != null) { object propertyOwner = GetPropertyOwner(descriptor); Permission permission = requiredPermissionAttr.Permission; // Check if property is viewable if (!IsGranted(controller, permission, SecurityAccess.Modify, propertyOwner)) { // Hide if PropertyDisplayMode is 'Hidden' and 'View' access is not granted, // otherwise set peroperty to readonly if (controller.PropertyDisplayMode == NonEditableDisplayMode.Hidden && !IsGranted(controller, permission, SecurityAccess.View, propertyOwner)) { browsableAttr = BrowsableAttribute.No; } else { readOnlyAttr = ReadOnlyAttribute.Yes; descriptionAttr = GetNotGrantedDescription(descriptionAttr, permission); } } } // Now copy all attributes int cnt = descriptor.Attributes.Count; List <Attribute> result = new List <Attribute>(attrCount); // Add stored/modified attributes first if (browsableAttr != null) { result.Add(browsableAttr); } if (readOnlyAttr != null) { result.Add(readOnlyAttr); } if (descriptionAttr != null) { result.Add(descriptionAttr); } if (requiredPermissionAttr != null) { result.Add(requiredPermissionAttr); } // Copy all other attributes for (int i = 0; i < cnt; ++i) { // Skip stored/modified attributes if (descriptor.Attributes[i] is BrowsableAttribute) { continue; } else if (descriptor.Attributes[i] is ReadOnlyAttribute) { continue; } else if (descriptor.Attributes[i] is DescriptionAttribute) { continue; } else if (descriptor.Attributes[i] is EditorAttribute) { if (readOnlyAttr != null && readOnlyAttr.IsReadOnly) { continue; } } result.Add(descriptor.Attributes[i]); } return(result.ToArray()); } catch (Exception) { throw; } }
/// <summary> /// Initializes a new instance of <see cref="T:Dataweb.NShape.Advanced.PropertyDescriptorDg" /> /// </summary> public PropertyDescriptorDg(IPropertyController controller, PropertyDescriptor descriptor, Attribute[] attributes) : base(descriptor.Name, attributes) { this.descriptor = descriptor; this.controller = controller; // We have to store the attributes and return their values in the appropriate // methods because if we don't, modifying the readonly attribute will not work browsableAttr = Attributes[typeof(BrowsableAttribute)] as BrowsableAttribute; readOnlyAttr = Attributes[typeof(ReadOnlyAttribute)] as ReadOnlyAttribute; descriptionAttr = Attributes[typeof(DescriptionAttribute)] as DescriptionAttribute; permissionAttr = descriptor.Attributes[typeof(RequiredPermissionAttribute)] as RequiredPermissionAttribute; }