Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I prevent a third party from calling certain methods?

I have an assembly which is being developed to create a facade around some potentially sensitive functionality and I want to allow a third party to call some of the methods contained within it but not others.

How can I prevent the third party calling unauthorised methods given they will have access to the entire DLL (I'm not concerned about them seeing the code, just executing it)?

This has to be compatible with the .net compact framework so unfortunately using the StrongNameIdentityPermission attribute is not possible.

like image 750
Ant Swift Avatar asked Feb 15 '12 14:02

Ant Swift


1 Answers

I think you should ship two Facade implementations, one for 'internal' consumers which exposes all methods and another external that exposes only the sub-set. You can achieve this whilst maintaining only one code base by having two separate build processes. One technique that springs to mind is to use compiler directives to exclude a method from the external build, or mark it internal if it is required by other public methods. If you do ship sensitive methods with internal modifiers you may also want to implement obfuscation.

EDIT

Perhaps it would be cleaner, rather than having directives around each method to use partial classes, define a partial class for the sensitive methods and put the entire class implementation in a directive.

    public partial class MyClass
    {
        public void NonSensitive(){}
    }

    #if INTERNAL_BUILD
    public partial class MyClass
    {
        public void Sensitive(){}
    }
    #endif

You can have this partial class in the same or a separate file, which might be a nice level of separation as you could prepend the file name x_Sensitive.cs or similar.

like image 192
Myles McDonnell Avatar answered Oct 30 '22 06:10

Myles McDonnell