Portal.MVC —— nopcommerce的简化版
2015-12-04 08:21
435 查看
Portal.MVC 简介
项目是基于MVC4+EF,带有角色,权限,用户中心及账户相关(登录,注册,修改密码,找回密码等)等基本功能。参考的开源项目 nopcommerce,这是一个电商架构的MVC项目,我对其进行了简化,之前主要是方便我自己搭建一些小的网站。包含前台和后台。
界面浏览
1.首页。这是前天晚上临时做出来的Logo和页面。不是真实案例,大家可以结合实际项目再修改。
View Code
然后注入:
对于和模型相关的Service内部都是注入的IRepository<T>,比如UserService。
这样相互之间就比较干净。只依赖接口。
而数据模型都会继承BaseEntity这个对象。
数据映射相关的部分在Mapping中,比如UserMap
在PortalDb的OnModelCreating方法中加入。这样就会影响到数据库的设计。
Nop的做法高级一些。反射找出所有的PortalEntityTypeConfiguration。一次性加入。这里大家可以自己去试
权限管理:
默认设定了三种角色,Administrators,Admins,Employeer,他们分别配置了不同的权限,权限指定是在StandardPermissionProvider这个类中完成的,表示一个角色拥有哪些权限,Administrators拥有所有权限
而权限验证的时候,在响应的Action上面加上AdminAuthorize和权限名称即可。
而在其内部是通过PermissionService来验证的:
后台只有给用户设置角色的页面,我没做新增角色并分配权限的页面。不过这个实现起来也很简单了。如果你是更换数据库,这个时候设计到权限的初始化。调用下面的方法即可:
当然前提是你先注入这个_permissionService。更多的代码细节大家可以去看源码。安装完成之后会有以下默认权限
![](https://oscdn.geek-share.com/Uploads/Images/Content/202002/02/1a650e1cb7cbc133338aa9e2d5085f65.png)
以上是关于工程的大体说明,欢迎大家拍砖。下面下载地址。数据文件需要附加。
1:github地址:https://github.com/stoneniqiu/Portal.MVC
2:百度云:链接:http://pan.baidu.com/s/1o65vgyY 密码:f4wo
数据库是Sql2008,附加不上,也可以自动生成。记得给自己添加用户。 默认用户名:stoneniqiu 密码 admin
关于分享
首先还是希望这个工程对大家有帮助,分享的过程是对过去知识一个梳理,存档入库,这种感觉就像是盛了一杯水倒掉了,进而我需要找新的水装满这个水杯;最后的最后还是宣传一下我们的读书群。我们加了很多技术群,但终归寂寥。但这个群是会持续分享读书心得和电子书的。人生路长,你需要一个持续的精神粮食来源。下面是我们第四期书山有路的投票结果,《数学之美》现在正在进行。群号:452450927
项目是基于MVC4+EF,带有角色,权限,用户中心及账户相关(登录,注册,修改密码,找回密码等)等基本功能。参考的开源项目 nopcommerce,这是一个电商架构的MVC项目,我对其进行了简化,之前主要是方便我自己搭建一些小的网站。包含前台和后台。
界面浏览
1.首页。这是前天晚上临时做出来的Logo和页面。不是真实案例,大家可以结合实际项目再修改。
public interface IDbContext { IDbSet<TEntity> Set<TEntity>() where TEntity : BaseEntity; int SaveChanges(); /// <summary> /// 执行存储过程,并返回对象列表 /// </summary> /// <typeparam name="TEntity">The type of the T entity.</typeparam> /// <param name="commandText">The command text.</param> /// <param name="parameters">The parameters.</param> /// <returns>IList{``0}.</returns> IList<TEntity> ExecuteStoredProcedureList<TEntity>(string commandText, params object[] parameters) where TEntity : BaseEntity, new(); /// <summary> /// 查询Sql语句 /// </summary> /// <typeparam name="TElement"></typeparam> /// <param name="sql"></param> /// <param name="parameters"></param> /// <returns></returns> IEnumerable<TElement> SqlQuery<TElement>(string sql, params object[] parameters); /// <summary> /// 执行sql 是否启用事务 /// </summary> /// <param name="sql"></param> /// <param name="doNotEnsureTransaction"></param> /// <param name="timeout"></param> /// <param name="parameters"></param> /// <returns></returns> int ExecuteSqlCommand(string sql, bool doNotEnsureTransaction = false, int? timeout = null, params object[] parameters); }
View Code
然后注入:
kernel.Bind<IDbContext>().To<PortalDb>().InSingletonScope();
对于和模型相关的Service内部都是注入的IRepository<T>,比如UserService。
private readonly IRepository<User> _useRepository; private readonly IRepository<UserRole> _userRoleRepository; private readonly ICacheManager _cacheManager ; public UserService(IRepository<User> useRepository,IRepository<UserRole> userRoleRepository,ICacheManager cacheManager) { _useRepository = useRepository; _userRoleRepository = userRoleRepository; _cacheManager = cacheManager; }
这样相互之间就比较干净。只依赖接口。
而数据模型都会继承BaseEntity这个对象。
public class User : BaseEntity { //... }
数据映射相关的部分在Mapping中,比如UserMap
public class UserMap : PortalEntityTypeConfiguration<Domain.User.User> { public UserMap() { ToTable("Users"); HasKey(n => n.Id); Property(n => n.Username).HasMaxLength(100); Property(n => n.Email).HasMaxLength(500); Ignore(n => n.PasswordFormat); HasMany(c => c.UserRoles).WithMany().Map(m => m.ToTable("User_UserRole_Mapping")); } }
在PortalDb的OnModelCreating方法中加入。这样就会影响到数据库的设计。
protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Configurations.Add(new UserMap()); }
Nop的做法高级一些。反射找出所有的PortalEntityTypeConfiguration。一次性加入。这里大家可以自己去试
var typesToRegister = Assembly.GetExecutingAssembly().GetTypes() .Where(type => !String.IsNullOrEmpty(type.Namespace)) .Where(type => type.BaseType != null && type.BaseType.IsGenericType && type.BaseType.GetGenericTypeDefinition() == typeof(PortalEntityTypeConfiguration<>)); foreach (var type in typesToRegister) { dynamic configurationInstance = Activator.CreateInstance(type); modelBuilder.Configurations.Add(configurationInstance); }
权限管理:
默认设定了三种角色,Administrators,Admins,Employeer,他们分别配置了不同的权限,权限指定是在StandardPermissionProvider这个类中完成的,表示一个角色拥有哪些权限,Administrators拥有所有权限
new DefaultPermissionRecord { UserRoleSystemName = SystemUserRoleNames.Admin, PermissionRecords = new [] { AccessAdminPanel, SearchOrder, ManageUsers, } },
而权限验证的时候,在响应的Action上面加上AdminAuthorize和权限名称即可。
[AdminAuthorize("ManageUsers")] public ActionResult Index() { }
而在其内部是通过PermissionService来验证的:
public virtual bool HasAdminAccess(AuthorizationContext filterContext) { bool result = PermissionService.Authorize(Permission); return result; }
后台只有给用户设置角色的页面,我没做新增角色并分配权限的页面。不过这个实现起来也很简单了。如果你是更换数据库,这个时候设计到权限的初始化。调用下面的方法即可:
_permissionService.InstallPermissions(new StandardPermissionProvider());
当然前提是你先注入这个_permissionService。更多的代码细节大家可以去看源码。安装完成之后会有以下默认权限
![](https://oscdn.geek-share.com/Uploads/Images/Content/202002/02/1a650e1cb7cbc133338aa9e2d5085f65.png)
以上是关于工程的大体说明,欢迎大家拍砖。下面下载地址。数据文件需要附加。
1:github地址:https://github.com/stoneniqiu/Portal.MVC
2:百度云:链接:http://pan.baidu.com/s/1o65vgyY 密码:f4wo
数据库是Sql2008,附加不上,也可以自动生成。记得给自己添加用户。 默认用户名:stoneniqiu 密码 admin
关于分享
首先还是希望这个工程对大家有帮助,分享的过程是对过去知识一个梳理,存档入库,这种感觉就像是盛了一杯水倒掉了,进而我需要找新的水装满这个水杯;最后的最后还是宣传一下我们的读书群。我们加了很多技术群,但终归寂寥。但这个群是会持续分享读书心得和电子书的。人生路长,你需要一个持续的精神粮食来源。下面是我们第四期书山有路的投票结果,《数学之美》现在正在进行。群号:452450927
![](https://oscdn.geek-share.com/Uploads/Images/Content/202002/02/deffcfd6ec92fa656ee2ca11167e979d.png)
相关文章推荐
- Linux下vsftpd的简单应用(一)
- 在MFC中修改opencv的namedWindow窗口位置
- linux下使用Eclipse编译调试C++ makefile项目
- [IT学习]微软如何做网站内容治理
- CentOS6.6系统下以RPM方式安装mysql-5.7.9
- CentOS+nginx+uwsgi+Python+django 环境搭建
- My way on Linux - [Shell基础] - Bash Shell中判断文件、目录是否存在或者判断其是否具有某类属性(权限)的常用方法
- SEQ!org.apache.hadoop.io.LongWritable"org.apache.hadoop.io.BytesWritable
- Linux的五个查找命令
- Shell编程实例
- LAMP 1.2 Apache编译安装
- linux:/etc/skel 文件夹
- JavaWeb学习总结(三)——Tomcat服务器学习和使用(二)
- ros_hydro_OpenCV_kinect_imageconverter
- ResourceBundle 和 Properties 读取Properties文件注意
- ResourceBundle 和 Properties 读取Properties文件注意
- ResourceBundle 和 Properties 读取Properties文件注意
- linux /etc/group /etc/gshadow文件说明
- linux下为目录和文件设置权限,
- Shell正则表达式学习笔记