The challenge here is that you've got a set of rules that automatically determine membership (if you're a Geology major, you are auto-subscribed) but if you don't fall into the rule-based criteria, you should be able to ask and get in anyway (opt-in). If you do fall within the criteria, you should be able to ask and get out (opt-out). Here's how an identity administration tool such as Oracle Identity Manager (OIM) would solve this problem. I am going to be using OIM terms but if you've got a different product, you should be able to translate.
In OIM, we'll have the students and resources. A resource can be anything, it's just an abstraction for capturing metadata associated with the student's relationship to the resource. A newsletter can be a resource, an LDAP-compliant directory can be a resource, a pair of shoes can be a resource (
especially if they're Jimmy Choos!!), a meal card, and so on. Our goal is to accurately track the relationships between students and resources and the state of the relationship. When a student joins the university and chooses a meal plan (
grits! grits!), the university issues the student a meal card. The meal card has an ID number, it has a student's meal plan on it, etc.
We can then draw a line between our student and the meal card. For example, student
Joel Seligman has a Breakfast Only meal plan. OIM labels this step as
provisioning, i.e the university has provisioned (issued) the meal card to a student.