Security

I have a public class SomeClass that basically contains data returned from a database.  I have a class SomeClassData that gets the data from the database and returns a SomeClass object or a list of SomeClass objects.  In order to limit access to the SomeClassData class I have made it internal so it cannot be accessed outside the assembly.  Then I have static method GetSomeClass as part of the SomeClass class that calls the appropriate method on the SomeClassData class to get the object.  This SomeClass is an abstract class that functions as a base class for a set of plugins that I want to make publicly available to other programmers to target my system.  The problem is that I need to make SomeClass public and all the properties and methods public so I can call it from other assemblies ie Windows Forms or WebForms.  However I do not want some of these properties such as the UniqueID property available to others who are creating plugins.  How would I limit access to these methods to certain assemblies to ensure security ...here is some sample code of what I am doing...

internal class SomeClassData{

 internal static SomeClass GetSomeClass(string name){
        //code to get data from DB and return
  {
}
public class SomeClass{

   //This property should only be available to assemblies that I create
   public int UniqueID{
         get{ return id;}
         set{id = value;}};
   
   //This property should be available to all assemblies
   public string Name{
        get{return name;}
        set{name = value;}}

  //This method should be available to all assemblies
  public static SomeClass GetSomeClass(string name){
         return SomeClassData.GetSomeClass(name);
   }
}

//This should be allowed because it is a form that I have created
//in an assembly that I have created
public class MyForm:Form{
   
  SomeClass c = SomeClass.GetSomeClass("TheName");
  MessageBox.Show(c.UniqueID.ToString());
}

//This should not be allowed because I did not create this form
//and the creator should not have access to the c.UniqueID property
public class SomebodyElsesForm:Form{
   
  SomeClass c = SomeClass.GetSomeClass("TheName");
  MessageBox.Show(c.UniqueID.ToString());
}