title: What to do when bit mask (flags) enum gets too large
body: <p>I have a very large set of permissions in my application that I represent with a Flags enumeration.  It is quickly approaching the practical upper bound of the long data type.  And I am forced to come up with a strategy to transition to a different structure soon.  Now, I could break this list down into smaller pieces, however, this is already just a subset of the overall permissions for our application, based on our applications layout.  We use this distinction extensively for display purposes when managing permissions and I would rather not have to revisit that code at this time if I can avoid it.</p>
  
  <p>Has anybody else run into this issue?  How did you get past it?  General examples are fine, but I am most interested in a c# specific example if there are any language specific tricks that I can employ to get the job done.</p>
  
  <p>May not be neccessary, but here is the list of Permissions currently defined for the portion of the app I am dealing with.</p>
  
  <pre><code>//Subgroup WebAgent
  [Flags]
  public enum WebAgentPermission : long
  {
      [DescriptionAttribute("View Rule Group")]
      ViewRuleGroup = 1,
      [DescriptionAttribute("Add Rule Group")]
      AddRuleGroup = 2,
      [DescriptionAttribute("Edit Rule Group")]
      EditRuleGroup = 4,
      [DescriptionAttribute("Delete Rule Group")]
      DeleteRuleGroup = 8,
      [DescriptionAttribute("View Rule")]
      ViewRule = 16,
      [DescriptionAttribute("Add Rule")]
      AddRule = 32,
      [DescriptionAttribute("Edit Rule")]
      EditRule = 64,
      [DescriptionAttribute("Delete Rule")]
      DeleteRule = 128,
      [DescriptionAttribute("View Location")]
      ViewLocation = 256,
      [DescriptionAttribute("Add Location")]
      AddLocation = 512,
      [DescriptionAttribute("Edit Location")]
      EditLocation = 1024,
      [DescriptionAttribute("Delete Location")]
      DeleteLocation = 2048,
      [DescriptionAttribute("View Volume Statistics")]
      ViewVolumeStatistics = 4096,
      [DescriptionAttribute("Edit Volume Statistics")]
      EditVolumeStatistics = 8192,
      [DescriptionAttribute("Upload Volume Statistics")]
      UploadVolumeStatistics = 16384,
      [DescriptionAttribute("View Role")]
      ViewRole = 32768,
      [DescriptionAttribute("Add Role")]
      AddRole = 65536,
      [DescriptionAttribute("Edit Role")]
      EditRole = 131072,
      [DescriptionAttribute("Delete Role")]
      DeleteRole = 262144,
      [DescriptionAttribute("View User")]
      ViewUser = 524288,
      [DescriptionAttribute("Add User")]
      AddUser = 1048576,
      [DescriptionAttribute("Edit User")]
      EditUser = 2097152,
      [DescriptionAttribute("Delete User")]
      DeleteUser = 4194304,
      [DescriptionAttribute("Assign Permissions To User")]
      AssignPermissionsToUser = 8388608,
      [DescriptionAttribute("Change User Password")]
      ChangeUserPassword = 16777216,
      [DescriptionAttribute("View Audit Logs")]
      ViewAuditLogs = 33554432,
      [DescriptionAttribute("View Team")]
      ViewTeam = 67108864,
      [DescriptionAttribute("Add Team")]
      AddTeam = 134217728,
      [DescriptionAttribute("Edit Team")]
      EditTeam = 268435456,
      [DescriptionAttribute("Delete Team")]
      DeleteTeam = 536870912,
      [DescriptionAttribute("View Web Agent Reports")]
      ViewWebAgentReports = 1073741824,
      [DescriptionAttribute("View All Locations")]
      ViewAllLocations = 2147483648,
      [DescriptionAttribute("Access to My Search")]
      AccessToMySearch = 4294967296,
      [DescriptionAttribute("Access to Pespective Search")]
      AccessToPespectiveSearch = 8589934592,
      [DescriptionAttribute("Add Pespective Search")]
      AddPespectiveSearch = 17179869184,
      [DescriptionAttribute("Edit Pespective Search")]
      EditPespectiveSearch = 34359738368,
      [DescriptionAttribute("Delete Pespective Search")]
      DeletePespectiveSearch = 68719476736,
      [DescriptionAttribute("Access to Search")]
      AccessToSearch = 137438953472,
      [DescriptionAttribute("View Form Roles")]
      ViewFormRole = 274877906944,
      [DescriptionAttribute("Add / Edit Form Roles")]
      AddFormRole = 549755813888,
      [DescriptionAttribute("Delete UserFormRolesDifferenceMasks")]
      DeleteFormRole = 1099511627776,
      [DescriptionAttribute("Export Locations")]
      ExportLocations = 2199023255552,
      [DescriptionAttribute("Import Locations")]
      ImportLocations = 4398046511104,
      [DescriptionAttribute("Manage Location Levels")]
      ManageLocationLevels = 8796093022208,
      [DescriptionAttribute("View Job Title")]
      ViewJobTitle = 17592186044416,
      [DescriptionAttribute("Add Job Title")]
      AddJobTitle = 35184372088832,
      [DescriptionAttribute("Edit Job Title")]
      EditJobTitle = 70368744177664,
      [DescriptionAttribute("Delete Job Title")]
      DeleteJobTitle = 140737488355328,
      [DescriptionAttribute("View Dictionary Manager")]
      ViewDictionaryManager = 281474976710656,
      [DescriptionAttribute("Add Dictionary Manager")]
      AddDictionaryManager = 562949953421312,
      [DescriptionAttribute("Edit Dictionary Manager")]
      EditDictionaryManager = 1125899906842624,
      [DescriptionAttribute("Delete Dictionary Manager")]
      DeleteDictionaryManager = 2251799813685248,
      [DescriptionAttribute("View Choice Manager")]
      ViewChoiceManager = 4503599627370496,
      [DescriptionAttribute("Add Choice Manager")]
      AddChoiceManager = 9007199254740992,
      [DescriptionAttribute("Edit Chioce Manager")]
      EditChoiceManager = 18014398509481984,
      [DescriptionAttribute("Delete Choice Manager")]
      DeleteChoiceManager = 36028797018963968,
      [DescriptionAttribute("Import Export Choices")] //57
      ImportExportChoices = 72057594037927936
  }
  </code></pre>