2 // System.Web.Configuration.AuthorizationConfig
5 // Gonzalo Paniagua Javier (gonzalo@ximian.com)
7 // (C) 2003 Ximian, Inc (http://www.ximian.com)
11 using System.Collections;
12 using System.Security.Principal;
15 namespace System.Web.Configuration
17 class AuthorizationConfig
19 AuthorizationConfig parent;
22 internal AuthorizationConfig (object parent)
24 this.parent = parent as AuthorizationConfig;
27 static string [] SplitAndTrim (string s)
29 if (s == null || s == "")
32 string [] all = s.Split (',');
33 for (int i = 0; i < all.Length; i++)
34 all [i] = all [i].Trim ();
39 static bool CheckWildcards (string [] values)
44 foreach (string s in values) {
45 if (s == null || s.Length == 1)
48 if (s.IndexOf ('?') != -1 || s.IndexOf ('*') != -1)
55 bool Add (bool allow, string users, string roles, string verbs)
57 string [] allUsers = SplitAndTrim (users);
58 string [] allRoles = SplitAndTrim (roles);
59 string [] allVerbs = SplitAndTrim (verbs);
60 if (!CheckWildcards (allUsers) || !CheckWildcards (allRoles))
64 list = new ArrayList ();
66 list.Add (new UserData (allow, allUsers, allRoles, allVerbs));
70 internal bool Allow (string users, string roles, string verbs)
72 return Add (true, users, roles, verbs);
75 internal bool Deny (string users, string roles, string verbs)
77 return Add (false, users, roles, verbs);
80 internal bool IsValidUser (IPrincipal user, string verb)
87 return parent.IsValidUser (user, verb);
95 foreach (UserData data in list) {
96 if (data.Users == null)
99 userMatch = (data.Users == null);
101 userMatch = data.CheckUser (user.Identity.Name);
103 roleMatch = (data.Roles == null);
105 roleMatch = data.CheckRole (user);
107 verbMatch = (data.Verbs == null);
108 if (data.Verbs != null)
109 verbMatch = data.CheckVerb (verb);
111 if (userMatch && roleMatch && verbMatch)
116 return parent.IsValidUser (user, verb);
124 public string [] Users;
125 public string [] Roles;
126 public string [] Verbs;
128 public UserData (bool allow, string [] users, string [] roles, string [] verbs)
136 public bool CheckUser (string user)
138 foreach (string u in Users) {
139 if (String.Compare (u, user, true) == 0 ||
141 (u == "?" && user == ""))
148 public bool CheckRole (IPrincipal user)
150 foreach (string r in Roles) {
151 if (user.IsInRole (r))
158 public bool CheckVerb (string verb)
160 foreach (string u in Verbs) {
161 if (String.Compare (u, verb, true) == 0)