Skip to content

Commit 5c84b09

Browse files
committed
Add unique index on role name
resolves g0t4#3
1 parent 9abd8fe commit 5c84b09

File tree

2 files changed

+38
-14
lines changed

2 files changed

+38
-14
lines changed

src/AspNet.Identity.MongoDB/IdentityContext.cs

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,21 +17,29 @@ public IdentityContext(MongoCollection users)
1717
public IdentityContext(MongoCollection users, MongoCollection roles) : this(users)
1818
{
1919
Roles = roles;
20+
EnsureUniqueIndexOnRoleName(roles);
2021
}
2122

2223
private void EnsureUniqueIndexOnUserName(MongoCollection users)
2324
{
24-
var userName = new IndexKeysBuilder().Ascending("UserName");
25+
var userName = new IndexKeysBuilder<IdentityUser>().Ascending(t => t.UserName);
2526
var unique = new IndexOptionsBuilder().SetUnique(true);
26-
users.EnsureIndex(userName, unique);
27+
users.CreateIndex(userName, unique);
28+
}
29+
30+
private void EnsureUniqueIndexOnRoleName(MongoCollection roles)
31+
{
32+
var roleName = new IndexKeysBuilder<IdentityRole>().Ascending(t => t.Name);
33+
var unique = new IndexOptionsBuilder().SetUnique(true);
34+
roles.CreateIndex(roleName, unique);
2735
}
2836

2937
public void EnsureUniqueIndexOnEmail()
3038
{
3139
// note: I'm not making the index on email required, I'd like to start a conversation around how to ensure indexes
32-
var email = new IndexKeysBuilder().Ascending("Email");
40+
var email = new IndexKeysBuilder<IdentityUser>().Ascending(t => t.Email);
3341
var unique = new IndexOptionsBuilder().SetUnique(true);
34-
Users.EnsureIndex(email, unique);
42+
Users.CreateIndex(email, unique);
3543
}
3644
}
3745
}

src/IntegrationTests/IdentityContextTests.cs

Lines changed: 26 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,12 @@ public class IdentityContextTests : UserIntegrationTestsBase
1010
[Test]
1111
public void Create_NoIndexOnUserName_AddsUniqueIndexOnUserName()
1212
{
13-
var collectionName = "userindextest";
14-
Database.DropCollection(collectionName);
15-
var collection = Database.GetCollection(collectionName);
16-
new IdentityContext(collection);
13+
var userCollectionName = "userindextest";
14+
Database.DropCollection(userCollectionName);
15+
var users = Database.GetCollection(userCollectionName);
16+
new IdentityContext(users);
1717

18-
var index = collection.GetIndexes()
18+
var index = users.GetIndexes()
1919
.Where(i => i.IsUnique)
2020
.Where(i => i.Key.Count() == 1)
2121
.First(i => i.Key.Contains("UserName"));
@@ -25,16 +25,32 @@ public void Create_NoIndexOnUserName_AddsUniqueIndexOnUserName()
2525
[Test]
2626
public void CreateEmailUniqueIndex_NoIndexOnEmail_AddsUniqueIndexOnEmail()
2727
{
28-
var collectionName = "userindextest";
29-
Database.DropCollection(collectionName);
30-
var collection = Database.GetCollection(collectionName);
31-
new IdentityContext(collection).EnsureUniqueIndexOnEmail();
28+
var userCollectionName = "userindextest";
29+
Database.DropCollection(userCollectionName);
30+
var users = Database.GetCollection(userCollectionName);
31+
new IdentityContext(users).EnsureUniqueIndexOnEmail();
3232

33-
var index = collection.GetIndexes()
33+
var index = users.GetIndexes()
3434
.Where(i => i.IsUnique)
3535
.Where(i => i.Key.Count() == 1)
3636
.First(i => i.Key.Contains("Email"));
3737
Expect(index.Key.Count(), Is.EqualTo(1));
3838
}
39+
40+
[Test]
41+
public void Create_NoIndexOnRoleName_AddsUniqueIndexOnRoleName()
42+
{
43+
var roleCollectionName = "roleindextest";
44+
Database.DropCollection(roleCollectionName);
45+
var roles = Database.GetCollection(roleCollectionName);
46+
var users = Database.GetCollection("users");
47+
new IdentityContext(users, roles);
48+
49+
var index = roles.GetIndexes()
50+
.Where(i => i.IsUnique)
51+
.Where(i => i.Key.Count() == 1)
52+
.First(i => i.Key.Contains("Name"));
53+
Expect(index.Key.Count(), Is.EqualTo(1));
54+
}
3955
}
4056
}

0 commit comments

Comments
 (0)