Free cookie consent management tool by TermsFeed Policy Generator

source: branches/HeuristicLab.Services.Authentication Prototype/Service/Provider/HeuristicLabRoleProvider.cs @ 4024

Last change on this file since 4024 was 4024, checked in by bfarka, 14 years ago

last bugfixes for project #1046

File size: 8.4 KB
Line 
1using System;
2using System.Web.Security;
3using System.Linq;
4using Persistence;
5using System.Text;
6using System.Collections.Generic;
7
8namespace Service.Provider {
9  class HeuristicLabRoleProvider : RoleProvider {
10    protected string applicationName;
11
12
13
14
15    public override void AddUsersToRoles(string[] usernames, string[] roleNames) {
16      if (usernames != null && roleNames != null) {
17        Persistence.DataClassesDataContext db = DatabaseUtil.createDataClassesDataContext();
18        List<HeuristicLabUser> users = db.HeuristicLabUsers.Where(u => usernames.Contains(u.UserName)).ToList<HeuristicLabUser>();
19        List<HeuristicLabRole> roles = db.HeuristicLabRole.Where(r => roleNames.Contains(r.RoleName)).ToList<HeuristicLabRole>();
20        foreach (HeuristicLabUser user in users) {
21          foreach (HeuristicLabRole role in roles) {
22            HeuristicLabUserRole userRole = new HeuristicLabUserRole();
23            userRole.HeuristicLabRole = role;
24            userRole.HeuristicLabUser = user;
25            db.HeuristicLabUserRole.InsertOnSubmit(userRole);
26          }
27        }
28        db.SubmitChanges();
29        db.Dispose();
30      }
31    }
32
33    public override string ApplicationName {
34      get {
35        return this.applicationName;
36      }
37      set {
38        this.applicationName = value;
39      }
40    }
41
42    public override void CreateRole(string roleName) {
43      CreateRole(roleName, false);
44
45    }
46
47    public virtual void CreateRole(String roleName, bool isPermission) {
48      if (roleName != null) {
49        Persistence.DataClassesDataContext db = DatabaseUtil.createDataClassesDataContext();
50        HeuristicLabRole role = new HeuristicLabRole();
51        role.RoleName = roleName;
52        role.IsPermission = isPermission;
53        db.HeuristicLabRole.InsertOnSubmit(role);
54        db.SubmitChanges();
55        db.Dispose();
56      }
57    }
58
59    //
60    // RoleProvider.DeleteRole
61    //
62    public override bool DeleteRole(string roleName, bool throwOnPopulatedRole) {
63      String[] roleArray = new String[1];
64      roleArray[0] = roleName;
65      Persistence.DataClassesDataContext db = DatabaseUtil.createDataClassesDataContext();
66
67      if (!RoleExists(roleName)) {
68        return false;
69        //throw new Exception("Role does not exist.");
70      }
71
72      if (throwOnPopulatedRole && GetUsersInRole(roleName).Length > 0) {
73        return false;
74        //throw new ProviderException("Cannot delete a populated role.");
75      }
76
77      RemoveUsersFromRoles(GetUsersInRole(roleName), roleArray);
78
79      Persistence.HeuristicLabRole role = db.HeuristicLabRole.Single(r => r.RoleName == roleName);
80      db.HeuristicLabRole.DeleteOnSubmit(role);
81      db.Dispose();
82
83      return true;
84    }
85
86    public override string[] FindUsersInRole(string roleName, string usernameToMatch) {
87      List<string> returnValue = new List<string>();
88      Persistence.DataClassesDataContext db = DatabaseUtil.createDataClassesDataContext();
89      if (roleName != null && db.HeuristicLabRole.Count(r => r.RoleName == roleName) == 1) {
90       
91        HeuristicLabRole role = db.HeuristicLabRole.Single(r => r.RoleName == roleName);
92     
93        foreach (HeuristicLabUserRole userRole in role.HeuristicLabUserRoles) {
94          if (userRole.HeuristicLabUser.UserName.Contains(usernameToMatch)) {
95            returnValue.Add(userRole.HeuristicLabUser.UserName);
96          }
97        }
98      }
99      db.Dispose();
100      return returnValue.ToArray();
101    }
102
103    public override string[] GetAllRoles() {
104      List<string> roleList = new List<string>();
105
106      Persistence.DataClassesDataContext db = DatabaseUtil.createDataClassesDataContext();
107      List<HeuristicLabRole> roles = new List<HeuristicLabRole>(db.HeuristicLabRole.Select(r => r));
108      foreach (HeuristicLabRole r in roles) {
109        roleList.Add(r.RoleName);
110      }
111      db.Dispose();
112
113      return roleList.ToArray();
114    }
115
116    public override string[] GetRolesForUser(string username) {
117      List<string> roleList = new List<string>();
118      DataClassesDataContext context = DatabaseUtil.createDataClassesDataContext();
119      if (username != null && context.HeuristicLabUsers.Count(u => u.UserName == username) > 0) {
120
121        Persistence.HeuristicLabUser user = context.HeuristicLabUsers.Single(u => u.UserName == username);
122        foreach (Persistence.HeuristicLabUserRole userRole in user.HeuristicLabUserRoles) {
123          roleList.Add(userRole.HeuristicLabRole.RoleName);
124        }
125      }
126      context.Dispose();
127      return roleList.ToArray();
128    }
129
130    public virtual void AddChildRole(string parentRoleName, string childRoleName) {
131      using (DataClassesDataContext db = DatabaseUtil.createDataClassesDataContext()) {
132
133        if (db.HeuristicLabRole.Count(x => x.RoleName == parentRoleName) > 0 && db.HeuristicLabRole.Count(x => x.RoleName == childRoleName) > 0) {
134
135          HeuristicLabRole parentRole = db.HeuristicLabRole.Single(x => x.RoleName == parentRoleName);
136          HeuristicLabRole childRole = db.HeuristicLabRole.Single(x => x.RoleName == childRoleName);
137          childRole.ParentRoleID = parentRole.ID;
138          parentRole.HeuristicLabRoleChilds.Add(childRole);
139          db.SubmitChanges();
140        }
141      }
142   
143    }
144
145    public override string[] GetUsersInRole(string roleName) {
146      List<string> userList = new List<string>();
147      DataClassesDataContext context = DatabaseUtil.createDataClassesDataContext();
148      if (roleName != null && context.HeuristicLabRole.Count(r => r.RoleName == roleName) > 0) {
149
150        Persistence.HeuristicLabRole role = context.HeuristicLabRole.Single(r => r.RoleName == roleName);
151        foreach (Persistence.HeuristicLabUserRole roleUser in role.HeuristicLabUserRoles) {
152          if (!userList.Contains(roleUser.HeuristicLabUser.UserName))
153            userList.Add(roleUser.HeuristicLabUser.UserName);
154        }
155      }
156      context.Dispose();
157      return userList.ToArray();
158    }
159
160    public override bool IsUserInRole(string username, string roleName) {
161      bool returnValue = false;
162      DataClassesDataContext context = DatabaseUtil.createDataClassesDataContext();
163      if (username != null && roleName != null) {
164
165        Persistence.HeuristicLabUser user = context.HeuristicLabUsers.Single(x => x.UserName == username);
166        foreach (Persistence.HeuristicLabUserRole ur in user.HeuristicLabUserRoles) {
167          if (ur.HeuristicLabRole.RoleName.Equals(roleName)) {
168            return true;
169          } else {
170            List<HeuristicLabRole> tmpList = ur.HeuristicLabRole.HeuristicLabRoleChilds.ToList<HeuristicLabRole>();
171            if (ResolveChildRoles(tmpList, roleName)) {
172              return true;
173            }
174          }
175        }
176
177
178
179      }
180      context.Dispose();
181      return returnValue;
182    }
183    protected bool ResolveChildRoles(List<HeuristicLabRole> roles, string roleName)
184    {
185      bool returnValue = false;
186      foreach (HeuristicLabRole r in roles) {
187        if (r.RoleName.Equals(roleName)) {
188          return true;
189        } else {
190          if (ResolveChildRoles(r.HeuristicLabRoleChilds.ToList<HeuristicLabRole>(), roleName)) {
191            return true;
192          }
193        }
194      }
195      return returnValue;
196    }
197    public override void RemoveUsersFromRoles(string[] usernames, string[] roleNames) {
198
199      DataClassesDataContext context = DatabaseUtil.createDataClassesDataContext();
200
201      foreach (string userName in usernames) {
202        if (userName != null && context.HeuristicLabUsers.Count(u => u.UserName == userName) > 0) {
203          Persistence.HeuristicLabUser user = context.HeuristicLabUsers.Single(u => u.UserName == userName);
204          foreach (Persistence.HeuristicLabUserRole userRole in user.HeuristicLabUserRoles) {
205            if (roleNames.Contains(userRole.HeuristicLabRole.RoleName)) {
206              context.HeuristicLabUserRole.DeleteOnSubmit(userRole);
207              //deleteList.Add(userRole);
208            }//if
209          }//foreach
210        }//if
211      }//foreach
212      context.SubmitChanges();
213      context.Dispose();
214    }
215
216    public override bool RoleExists(string roleName) {
217
218      Persistence.DataClassesDataContext db = DatabaseUtil.createDataClassesDataContext();
219      bool returnValue = (db.HeuristicLabRole.Count(r => r.RoleName == roleName) == 1);
220      db.Dispose();
221      return returnValue;
222
223    }
224  }
225}//HeuristicLabRoleProvider
Note: See TracBrowser for help on using the repository browser.