Revision: 44
Author: tmyroadctfig
Date: 2006-06-07 02:30:26 -0700 (Wed, 07 Jun 2006)
ViewCVS: http://svn.sourceforge.net/nmailserver/?rev=44&view=rev
Log Message:
-----------
Added initial ACL support to web interface.
Modified Paths:
--------------
NMail/branches/luke-dev/NMail/DataTypes/ACLs/GenericAce.cs
NMail/branches/luke-dev/NMail/DataTypes/ACLs/GenericAcl.cs
NMail/branches/luke-dev/NMail/DataTypes/ACLs/StoreFolderAcl.cs
NMail/branches/luke-dev/NMail/ILocalStore.cs
NMail/branches/luke-dev/NMail/ILocalStoreData.cs
NMail/branches/luke-dev/NMail.Administration.Web/App_Code/FolderDataSource.cs
NMail/branches/luke-dev/NMail.Administration.Web/FolderDetails.aspx
NMail/branches/luke-dev/NMail.ImapService/State/AuthenticatedState.cs
NMail/branches/luke-dev/NMail.LocalStore/LocalStore.cs
NMail/branches/luke-dev/NMail.LocalStoreData.MySql/MySqlLocalStoreData.cs
Modified: NMail/branches/luke-dev/NMail/DataTypes/ACLs/GenericAce.cs
===================================================================
--- NMail/branches/luke-dev/NMail/DataTypes/ACLs/GenericAce.cs 2006-06-06 12:55:52 UTC (rev 43)
+++ NMail/branches/luke-dev/NMail/DataTypes/ACLs/GenericAce.cs 2006-06-07 09:30:26 UTC (rev 44)
@@ -23,6 +23,7 @@
/// <summary>
/// A generic access control entry for an ACL.
/// </summary>
+ [Serializable]
public class GenericAce<PrivilegeType> {
/// <summary>
/// Creates a new access control entry.
Modified: NMail/branches/luke-dev/NMail/DataTypes/ACLs/GenericAcl.cs
===================================================================
--- NMail/branches/luke-dev/NMail/DataTypes/ACLs/GenericAcl.cs 2006-06-06 12:55:52 UTC (rev 43)
+++ NMail/branches/luke-dev/NMail/DataTypes/ACLs/GenericAcl.cs 2006-06-07 09:30:26 UTC (rev 44)
@@ -16,6 +16,7 @@
*/
using System;
+using System.Collections;
using System.Collections.Generic;
using System.Text;
@@ -23,6 +24,7 @@
/// <summary>
/// A list of access control entries.
/// </summary>
+ [Serializable]
public class GenericAcl<PrivilegeType> {
/// <summary>
/// A map of identifiers to access control entries.
Modified: NMail/branches/luke-dev/NMail/DataTypes/ACLs/StoreFolderAcl.cs
===================================================================
--- NMail/branches/luke-dev/NMail/DataTypes/ACLs/StoreFolderAcl.cs 2006-06-06 12:55:52 UTC (rev 43)
+++ NMail/branches/luke-dev/NMail/DataTypes/ACLs/StoreFolderAcl.cs 2006-06-07 09:30:26 UTC (rev 44)
@@ -23,6 +23,7 @@
/// <summary>
/// A list of access control entries for a folder.
/// </summary>
+ [Serializable]
public class StoreFolderAcl : GenericAcl<StoreFolderPrivilege> {
/// <summary>
/// Creates a new ACL for the given folder.
Modified: NMail/branches/luke-dev/NMail/ILocalStore.cs
===================================================================
--- NMail/branches/luke-dev/NMail/ILocalStore.cs 2006-06-06 12:55:52 UTC (rev 43)
+++ NMail/branches/luke-dev/NMail/ILocalStore.cs 2006-06-07 09:30:26 UTC (rev 44)
@@ -331,9 +331,9 @@
/// Gets the ACL for the given folder.
/// </summary>
/// <param name="authToken">The authentication credentials.</param>
- /// <param name="folder">The folder to get the ACL for.</param>
+ /// <param name="folderId">The Id of the folder to get the ACL for.</param>
/// <returns>The folder ACL or null if insufficient privileges.</returns>
- StoreFolderAcl GetStoreFolderAcl(IAuthenticationToken authToken, StoreFolder folder);
+ StoreFolderAcl GetStoreFolderAcl(IAuthenticationToken authToken, int folderId);
#endregion
#region Load and Save Object
Modified: NMail/branches/luke-dev/NMail/ILocalStoreData.cs
===================================================================
--- NMail/branches/luke-dev/NMail/ILocalStoreData.cs 2006-06-06 12:55:52 UTC (rev 43)
+++ NMail/branches/luke-dev/NMail/ILocalStoreData.cs 2006-06-07 09:30:26 UTC (rev 44)
@@ -292,9 +292,9 @@
/// <summary>
/// Gets the ACL for the given folder.
/// </summary>
- /// <param name="folder">The folder to get the ACL for.</param>
+ /// <param name="folderId">The Id of the folder to get the ACL for.</param>
/// <returns>The folder ACL.</returns>
- StoreFolderAcl GetStoreFolderAcl(StoreFolder folder);
+ StoreFolderAcl GetStoreFolderAcl(int folderId);
#endregion
#region User Management
Modified: NMail/branches/luke-dev/NMail.Administration.Web/App_Code/FolderDataSource.cs
===================================================================
--- NMail/branches/luke-dev/NMail.Administration.Web/App_Code/FolderDataSource.cs 2006-06-06 12:55:52 UTC (rev 43)
+++ NMail/branches/luke-dev/NMail.Administration.Web/App_Code/FolderDataSource.cs 2006-06-07 09:30:26 UTC (rev 44)
@@ -77,13 +77,23 @@
return localStore.CreateFolder(authToken, folderName);
}
- public static StoreFolderAcl GetFolderAcl(int folderId)
+ public static List<GenericAce<StoreFolderPrivilege>> GetFolderAcl(int folderId)
{
IHttpSessionState session = SessionStateUtility.GetHttpSessionStateFromContext(HttpContext.Current);
IAuthenticationToken authToken = (IAuthenticationToken)session["AuthToken"];
ILocalStore localStore = (ILocalStore)session["LocalStore"];
- return localStore.GetStoreFolderAcl(authToken, folderId);
+ StoreFolderAcl acl = localStore.GetStoreFolderAcl(authToken, folderId);
+ List<GenericAce<StoreFolderPrivilege>> result = new List<GenericAce<StoreFolderPrivilege>>();
+
+ IEnumerator<string> e = acl.GetIdentifiers();
+ while (e.MoveNext())
+ {
+ GenericAce<StoreFolderPrivilege> ace = acl[e.Current];
+ result.Add(ace);
+ }
+
+ return result;
}
}
}
Modified: NMail/branches/luke-dev/NMail.Administration.Web/FolderDetails.aspx
===================================================================
--- NMail/branches/luke-dev/NMail.Administration.Web/FolderDetails.aspx 2006-06-06 12:55:52 UTC (rev 43)
+++ NMail/branches/luke-dev/NMail.Administration.Web/FolderDetails.aspx 2006-06-07 09:30:26 UTC (rev 44)
@@ -57,7 +57,7 @@
</SelectParameters>
</asp:ObjectDataSource>
<h2>Folder ACL</h2>
- <asp:GridView ID="AclGridView" runat="server" CellPadding="4" ForeColor="#333333" GridLines="None">
+ <asp:GridView ID="AclGridView" runat="server" CellPadding="4" ForeColor="#333333" GridLines="None" AutoGenerateColumns="False" DataSourceID="FolderAclDataSource">
<FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
<RowStyle BackColor="#EFF3FB" />
<EditRowStyle BackColor="#2461BF" />
@@ -65,6 +65,17 @@
<PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" />
<HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
<AlternatingRowStyle BackColor="White" />
+ <Columns>
+ <asp:BoundField DataField="Identifier" HeaderText="Identifier" SortExpression="Identifier" />
+ <asp:BoundField DataField="Privilege" HeaderText="Privilege" SortExpression="Privilege" />
+ <asp:BoundField DataField="AceType" HeaderText="AceType" SortExpression="AceType" />
+ </Columns>
</asp:GridView>
+ <asp:ObjectDataSource ID="FolderAclDataSource" runat="server" SelectMethod="GetFolderAcl"
+ TypeName="NMail.Administration.Web.FolderDataSource">
+ <SelectParameters>
+ <asp:QueryStringParameter Name="folderId" QueryStringField="FolderId" Type="Int32" />
+ </SelectParameters>
+ </asp:ObjectDataSource>
</asp:Content>
Modified: NMail/branches/luke-dev/NMail.ImapService/State/AuthenticatedState.cs
===================================================================
--- NMail/branches/luke-dev/NMail.ImapService/State/AuthenticatedState.cs 2006-06-06 12:55:52 UTC (rev 43)
+++ NMail/branches/luke-dev/NMail.ImapService/State/AuthenticatedState.cs 2006-06-07 09:30:26 UTC (rev 44)
@@ -390,7 +390,7 @@
StoreFolder folder = LocalStore.GetStoreFolder(Session.AuthenticationToken, cmd.Folder);
if (folder != null) {
- StoreFolderAcl folderAcl = LocalStore.GetStoreFolderAcl(Session.AuthenticationToken, folder);
+ StoreFolderAcl folderAcl = LocalStore.GetStoreFolderAcl(Session.AuthenticationToken, folder.FolderId);
if (folderAcl != null) {
currentAce = folderAcl[cmd.Identifier];
@@ -458,7 +458,7 @@
StoreFolder folder = LocalStore.GetStoreFolder(Session.AuthenticationToken, cmd.Folder);
if (folder != null) {
- StoreFolderAcl currentAcl = LocalStore.GetStoreFolderAcl(Session.AuthenticationToken, folder);
+ StoreFolderAcl currentAcl = LocalStore.GetStoreFolderAcl(Session.AuthenticationToken, folder.FolderId);
if (currentAcl != null) {
IEnumerator<string> e = currentAcl.GetIdentifiers();
@@ -493,7 +493,7 @@
StoreFolder folder = LocalStore.GetStoreFolder(Session.AuthenticationToken, cmd.Folder);
if (folder != null) {
- StoreFolderAcl currentAcl = LocalStore.GetStoreFolderAcl(Session.AuthenticationToken, folder);
+ StoreFolderAcl currentAcl = LocalStore.GetStoreFolderAcl(Session.AuthenticationToken, folder.FolderId);
if (currentAcl != null) {
if (currentAcl[cmd.Identifier] != null) {
@@ -523,7 +523,7 @@
StoreFolder folder = LocalStore.GetStoreFolder(Session.AuthenticationToken, cmd.Folder);
if (folder != null) {
- StoreFolderAcl currentAcl = LocalStore.GetStoreFolderAcl(Session.AuthenticationToken, folder);
+ StoreFolderAcl currentAcl = LocalStore.GetStoreFolderAcl(Session.AuthenticationToken, folder.FolderId);
if (currentAcl != null) {
string username = Session.AuthenticationToken.Username;
Modified: NMail/branches/luke-dev/NMail.LocalStore/LocalStore.cs
===================================================================
--- NMail/branches/luke-dev/NMail.LocalStore/LocalStore.cs 2006-06-06 12:55:52 UTC (rev 43)
+++ NMail/branches/luke-dev/NMail.LocalStore/LocalStore.cs 2006-06-07 09:30:26 UTC (rev 44)
@@ -1163,13 +1163,13 @@
}
}
- public StoreFolderAcl GetStoreFolderAcl(IAuthenticationToken authToken, StoreFolder folder) {
+ public StoreFolderAcl GetStoreFolderAcl(IAuthenticationToken authToken, int folderId) {
// Ensure the user has rights to lookup the ACL
- if (hasFolderPrivilege(authToken.Username, folder.FolderId, StoreFolderPrivilege.Lookup)
+ if (hasFolderPrivilege(authToken.Username, folderId, StoreFolderPrivilege.Lookup)
|| hasSystemPrivilege(authToken.Username, SystemPrivilege.EditAllAcls)) {
// Return the ACL
- StoreFolderAcl currentAcl = LocalStoreData.GetStoreFolderAcl(folder);
+ StoreFolderAcl currentAcl = LocalStoreData.GetStoreFolderAcl(folderId);
return currentAcl;
} else {
@@ -1344,7 +1344,7 @@
// First check if the user has the required privilege on the folder
StoreFolder folder = LocalStoreData.GetStoreFolder(folderId);
- StoreFolderAcl currentAcl = LocalStoreData.GetStoreFolderAcl(folder);
+ StoreFolderAcl currentAcl = LocalStoreData.GetStoreFolderAcl(folderId);
GenericAce<StoreFolderPrivilege> userAce = currentAcl[username];
if (privilege != StoreFolderPrivilege.None) {
Modified: NMail/branches/luke-dev/NMail.LocalStoreData.MySql/MySqlLocalStoreData.cs
===================================================================
--- NMail/branches/luke-dev/NMail.LocalStoreData.MySql/MySqlLocalStoreData.cs 2006-06-06 12:55:52 UTC (rev 43)
+++ NMail/branches/luke-dev/NMail.LocalStoreData.MySql/MySqlLocalStoreData.cs 2006-06-07 09:30:26 UTC (rev 44)
@@ -1602,7 +1602,8 @@
#endregion
#region Get StoreFolder ACL
- public StoreFolderAcl GetStoreFolderAcl(StoreFolder folder) {
+ public StoreFolderAcl GetStoreFolderAcl(int folderId) {
+ StoreFolder folder = getStoreFolder(folderId);
StoreFolderAcl result = new StoreFolderAcl(folder);
using (MySqlConnection cnn = GetConnection()) {
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|