add login service

This commit is contained in:
yubaolee 2015-04-25 12:31:01 +08:00
parent 7707c6a1e2
commit 370b390c7c
28 changed files with 236 additions and 16 deletions

View File

@ -0,0 +1,8 @@
namespace OpenAuth.App.DTO
{
public class LoginRequest
{
public string UserName { get; set; }
public string Password { get; set; }
}
}

View File

@ -0,0 +1,15 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace OpenAuth.App.DTO
{
public class LoginResponse : Response
{
public string UserId { get; set; }
public string UserName { get; set; }
public IList<string> UserRoleNames { get; set; }
}
}

View File

@ -0,0 +1,9 @@
namespace OpenAuth.App.DTO
{
public abstract class Response
{
public bool Success { get; set; }
public string Message { get; set; }
}
}

46
OpenAuth.App/LoginApp.cs Normal file
View File

@ -0,0 +1,46 @@
using System.Linq;
using System.Security.Cryptography;
using OpenAuth.App.DTO;
using OpenAuth.Domain.Interface;
using OpenAuth.Domain.Service;
namespace OpenAuth.App
{
public class LoginApp
{
private LoginService _loginService;
public LoginApp(IUserRepository repository)
{
_loginService = new LoginService(repository);
}
public LoginResponse Login(LoginRequest request)
{
var resp = new LoginResponse {UserName = request.UserName};
var user = _loginService.Login(request.UserName, request.Password);
if (user == null)
{
resp.Message = "用户名不存在";
}
else if (!user.Password.Equals(request.Password))
{
resp.Message = "密码错误";
}
else if (!user.Enabled)
{
resp.Message = "该用户被禁用";
}
else
{
foreach (var role in user.Roles)
{
resp.UserRoleNames.Add(role.FullName);
}
resp.Success = true;
}
return resp;
}
}
}

View File

@ -39,7 +39,11 @@
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="DTO\LoginRequest.cs" />
<Compile Include="DTO\LoginResponse.cs" />
<Compile Include="LoginApp.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="DTO\Response.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\OpenAuth.Domain\OpenAuth.Domain.csproj">

View File

@ -0,0 +1,9 @@
using OpenAuth.Domain.Model;
namespace OpenAuth.Domain.Interface
{
public interface IUserRepository
{
User FindBy(string username);
}
}

View File

@ -1,7 +1,7 @@
using System;
using System.Collections.Generic;
namespace OpenAuth.Domain
namespace OpenAuth.Domain.Model
{
public partial class Button
{

View File

@ -1,4 +1,4 @@
namespace OpenAuth.Domain
namespace OpenAuth.Domain.Model
{
public partial class DataPermission
{

View File

@ -1,7 +1,7 @@
using System;
using System.Collections.Generic;
namespace OpenAuth.Domain
namespace OpenAuth.Domain.Model
{
public partial class Department
{

View File

@ -1,7 +1,7 @@
using System;
using System.Collections.Generic;
namespace OpenAuth.Domain
namespace OpenAuth.Domain.Model
{
public partial class Menu
{

View File

@ -1,7 +1,7 @@
using System;
using System.Collections.Generic;
namespace OpenAuth.Domain
namespace OpenAuth.Domain.Model
{
public partial class Role
{

View File

@ -1,4 +1,4 @@
namespace OpenAuth.Domain
namespace OpenAuth.Domain.Model
{
public partial class RoleMenuButton
{

View File

@ -1,7 +1,7 @@
using System;
using System.Collections.Generic;
namespace OpenAuth.Domain
namespace OpenAuth.Domain.Model
{
public partial class User
{
@ -16,9 +16,10 @@ namespace OpenAuth.Domain
public string Password { get; set; }
public string RealName { get; set; }
public string RoleId { get; set; }
public Nullable<int> Enabled { get; set; }
public Nullable<int> DeleteMark { get; set; }
public bool Enabled { get; set; }
public bool DeleteMark { get; set; }
public virtual ICollection<Department> Departments { get; set; }
public virtual ICollection<Role> Roles { get; set; }
}
}

View File

@ -39,15 +39,18 @@
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="Button.cs" />
<Compile Include="DataPermission.cs" />
<Compile Include="Department.cs" />
<Compile Include="Menu.cs" />
<Compile Include="Interface\IUserRepository.cs" />
<Compile Include="Model\Button.cs" />
<Compile Include="Model\DataPermission.cs" />
<Compile Include="Model\Department.cs" />
<Compile Include="Model\Menu.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Role.cs" />
<Compile Include="RoleMenuButton.cs" />
<Compile Include="User.cs" />
<Compile Include="Model\Role.cs" />
<Compile Include="Model\RoleMenuButton.cs" />
<Compile Include="Model\User.cs" />
<Compile Include="Service\LoginService.cs" />
</ItemGroup>
<ItemGroup />
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.

View File

@ -0,0 +1,26 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using OpenAuth.Domain.Interface;
using OpenAuth.Domain.Model;
namespace OpenAuth.Domain.Service
{
public class LoginService
{
private IUserRepository _userRepository;
public LoginService(IUserRepository repository)
{
_userRepository = repository;
}
public User Login(string username, string password)
{
return _userRepository.FindBy(username);
}
}
}

View File

@ -1,5 +1,6 @@
using System.Data.Entity.ModelConfiguration;
using OpenAuth.Domain;
using OpenAuth.Domain.Model;
namespace OpenAuth.Infrastructure.Mapping
{

View File

@ -1,5 +1,6 @@
using System.Data.Entity.ModelConfiguration;
using OpenAuth.Domain;
using OpenAuth.Domain.Model;
namespace OpenAuth.Infrastructure.Mapping
{

View File

@ -1,5 +1,6 @@
using System.Data.Entity.ModelConfiguration;
using OpenAuth.Domain;
using OpenAuth.Domain.Model;
namespace OpenAuth.Infrastructure.Mapping
{

View File

@ -1,5 +1,6 @@
using System.Data.Entity.ModelConfiguration;
using OpenAuth.Domain;
using OpenAuth.Domain.Model;
namespace OpenAuth.Infrastructure.Mapping
{

View File

@ -1,5 +1,6 @@
using System.Data.Entity.ModelConfiguration;
using OpenAuth.Domain;
using OpenAuth.Domain.Model;
namespace OpenAuth.Infrastructure.Mapping
{
@ -30,6 +31,16 @@ namespace OpenAuth.Infrastructure.Mapping
this.Property(t => t.DepartmentId)
.HasMaxLength(50);
this.HasMany(d => d.Users)
.WithMany(u => u.Roles)
.Map(
m =>
{
m.MapLeftKey("RoleId");
m.MapRightKey("UserId");
m.ToTable("UserRole");
});
// Table & Column Mappings
this.ToTable("Role");

View File

@ -1,5 +1,6 @@
using System.Data.Entity.ModelConfiguration;
using OpenAuth.Domain;
using OpenAuth.Domain.Model;
namespace OpenAuth.Infrastructure.Mapping
{

View File

@ -1,5 +1,6 @@
using System.Data.Entity.ModelConfiguration;
using OpenAuth.Domain;
using OpenAuth.Domain.Model;
namespace OpenAuth.Infrastructure.Mapping
{
@ -36,6 +37,15 @@ namespace OpenAuth.Infrastructure.Mapping
m.ToTable("UserDepartment");
});
this.HasMany(u => u.Roles)
.WithMany(r => r.Users)
.Map(m =>
{
m.MapLeftKey("UserId");
m.MapRightKey("RoleId");
m.ToTable("UserRole");
});
// Table & Column Mappings
this.ToTable("User");
this.Property(t => t.UserId).HasColumnName("UserId");

View File

@ -55,6 +55,8 @@
<Compile Include="Mapping\UserMap.cs" />
<Compile Include="OpenAuthDBContext.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Repository\BaseRepository.cs" />
<Compile Include="Repository\UserRepository.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\OpenAuth.App\OpenAuth.App.csproj">

View File

@ -1,5 +1,6 @@
using System.Data.Entity;
using OpenAuth.Domain;
using OpenAuth.Domain.Model;
using OpenAuth.Infrastructure.Mapping;
namespace OpenAuth.Infrastructure

View File

@ -0,0 +1,12 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace OpenAuth.Infrastructure.Repository
{
public class BaseRepository
{
protected OpenAuthDBContext _Context = new OpenAuthDBContext();
}
}

View File

@ -0,0 +1,25 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using OpenAuth.Domain.Interface;
using OpenAuth.Domain.Model;
namespace OpenAuth.Infrastructure.Repository
{
public class UserRepository :BaseRepository, IUserRepository
{
public User FindBy(string username)
{
try
{
return _Context.Users.First(e => e.Account == username);
}
catch (Exception)
{
return null;
}
}
}
}

View File

@ -0,0 +1,28 @@
using Microsoft.VisualStudio.TestTools.UnitTesting;
using OpenAuth.App;
using OpenAuth.App.DTO;
using OpenAuth.Infrastructure.Repository;
namespace OpenAuth.UnitTest
{
[TestClass]
public class LoginTest
{
[TestMethod]
public void Login()
{
var loginReq = new LoginRequest { UserName = "admin", Password = "123456" };
var loginApp = new LoginApp(new UserRepository());
var response = loginApp.Login(loginReq);
Assert.IsTrue(response.Success);
Assert.AreEqual(response.UserName, loginReq.UserName);
var errPassword = new LoginRequest { UserName = "admin", Password = "111111" };
response = loginApp.Login(errPassword);
Assert.IsFalse(response.Success);
Assert.AreEqual(response.Message, "密码错误");
}
}
}

View File

@ -63,12 +63,17 @@
<ItemGroup>
<Compile Include="DepartmentTest.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="LoginTest.cs" />
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
<None Include="packages.config" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\OpenAuth.App\OpenAuth.App.csproj">
<Project>{0BBF2D65-FFFD-4272-B138-8EA4FB6FEC48}</Project>
<Name>OpenAuth.App</Name>
</ProjectReference>
<ProjectReference Include="..\OpenAuth.Domain\OpenAuth.Domain.csproj">
<Project>{6108DA8E-92A1-4ABE-B9F5-26D64D55CA2C}</Project>
<Name>OpenAuth.Domain</Name>