Jacob Krum Thorning
Jacob Krum Thorning

Reputation: 11

How do I check if an instance of a class has access to a method in another class?

I'm working on a small project where I want to have a list of a class called "DevelopmentEmployee", but only one of them is allowed to manipulate certain methods in another class "Project". The way I have implemented it, the class Project has a field called projectLeader, which is of the type DevelopmentEmployee. When a DevelopmentEmployee attempts to access methods in the class Project, I want to check if the DevelopmentEmployee is equal to the specific instance of Project's projectLeader.

Something like

public class Project {
    private DevelopmentEmployee projectLeader;
    private List < Activity > activities = new ArrayList < Activity > ();

    public Project(DevelopmentEmployee pL) {
        this.projectLeader = pL;
    }

    public void addActivity(String activityName) {
        if (projectLeader.equals(DevelopmentEmployee * ) {
            activities.add(activity);
        }
    }
}

But I can't figure out a way to make the access requirement work. How can the instance of the class Project know who is trying to access it?

Upvotes: 1

Views: 116

Answers (2)

Arne Deutsch
Arne Deutsch

Reputation: 14779

Several possibilities come to mind:

Provide the instance of the one accassing the project method to the method:

public void addActivity(String activityName, DevelpmentEmployee user) {
    if (projectLeader.equals(user)) {`

Create some class that holds information about active user and use that inside the methods:

public class Project {
    private UserRegistry userRegistry;
    private List<Activity> activities = new ArrayList<Activity>();

    public Project(UserRegistry userRegistry) {
        this.userRegistry = userRegistry;
    }

    public void addActivity(String activityName) {
        if (userRegistry.isActiveUserProjectLeader()) {
            activities.add(activity);
        }
    }
}

public class UserRegistry {
    private DevelpmentEmployee projectLeader;
    private DevelpmentEmployee activeUser;
    private List<DevelpmentEmployee> user;

    public void addUser(DevelpmentEmployee user) { ... }
    public void makeProjectLeader(DevelpmentEmployee newLeader) { ... }
    public void makeActiveUser(DevelpmentEmployee newActiveUser) { ... }
    public boolean isActiveUserProjectLeader() { ... }
}`

Upvotes: 0

Nishesh Pratap Singh
Nishesh Pratap Singh

Reputation: 2181

You should also pass the DevelopementEmployee in addActivity for checking it against the projectLeader.

public void addActivity(String activityName,DevelopmentEmployee employee) {
  if (projectLeader.equals(employee) {
      activities.add(activity);
    }      
}

Then you need to override equals method in DevelopmentEmployee class, for proper checking of equality, like the one as shown below :

public boolean equals(DevelopementEmployee e){
    if(e!=null && this.employeeId==e.employeeId)
        return true;
    else
        return false;
}

Upvotes: 4

Related Questions