1.添加权限常量

打开文件AppPermissions.cs
【..\MyCompanyName.AbpZeroTemplate.Core\Authorization\AppPermissions.cs】
在末尾添加如下常量:
//分类管理权限
public const string Pages_Category = "Pages.Category";
public const string Pages_Category_Create = "Pages.Category.Create";
public const string Pages_Category_Edit = "Pages.Category.Edit";
public const string Pages_Category_Delete = "Pages.Category.Delete";

2.编写代码

想在页面显示还需编写代码获取,打开文件AppAuthorizationProvider.cs
【..\MyCompanyName.AbpZeroTemplate.Core\Authorization\AppAuthorizationProvider.cs】
在SetPermissions方法最后添加如下代码:
//分类权限的获取
var category=pages.CreateChildPermission(AppPermissions.Pages_Category, L("CategoryManager"));
category.CreateChildPermission(AppPermissions.Pages_Category_Create, L("Category_Create"));
category.CreateChildPermission(AppPermissions.Pages_Category_Edit, L("Category_Edit"));
category.CreateChildPermission(AppPermissions.Pages_Category_Delete, L("Category_Delete"));

3.编辑语言文件

打开语言文件AbpZeroTemplate-zh-CN.xml
【..\MyCompanyName.AbpZeroTemplate.Core\Localization\AbpZeroTemplate\AbpZeroTemplate-zh-CN.xml】
在最后添加如下代码:
<text name="Category_Create" value="添加分类" />
<text name="Category_Edit" value="编辑分类" />
<text name="Category_Delete" value="删除分类" />

4.测试

生成项目,打开角色管理--编辑角色,效果如下:
基础工作已完成,接下来给页面按钮和应用层方法加权限。

客户端权限控制

1.打开Index.js文件

【..\mycompanyname.abpzerotemplate.web\areas\mpa\views\category\index.js】
添加如下代码:
var _categoryService = abp.services.app.category;
//权限
var _permissions = {
create: abp.auth.hasPermission('Pages.Category.Create'),
edit: abp.auth.hasPermission('Pages.Category.Edit'),
'delete': abp.auth.hasPermission('Pages.Category.Delete')
};
同时修改actions里面的代码:
var $span = $('<span></span>');
if (_permissions.edit) {//判断是否有编辑权限
$('<button class="btn btn-default btn-xs" title="' + app.localize('Edit') + '"><i class="fa fa-edit"></i></button>')
.appendTo($span)
.click(function() {
_editModal.open({ id: data.record.id });
});
}
if (_permissions.delete) {//判断是否有删除权限
$('<button class="btn btn-default btn-xs" title="' + app.localize('Delete') + '"><i class="fa fa-trash-o"></i></button>')
.appendTo($span)
.click(function() {
deleteCategory(data.record);
});
}
return $span;
保存,打开角色管理--修改Admin角色,加上编辑分类的权限,然后保存,效果如下:

2.测试

然后打开分类管理页面,现在可看到删除按钮不会显示出来了,效果如下:
 

3.添加按钮加权限

现在把"添加分类"按钮也加上权限
打开Index视图【..\mycompanyname.abpzerotemplate.web\areas\mpa\views\category\index.cshtml】
修改"添加分类"按钮代码如下:
@if (IsGranted(AppPermissions.Pages_Category_Create))//判断是否有添加分类的权限
{
<button id="CreateNewCategoryButton" class="btn btn-primary blue"><i class="fa fa-plus"></i>添加分类</button>
}

现在没有分类管理的任何权限只能查看。

服务端权限控制

接下来就是服务端权限的控制,服务端就是应用层和Web层,前端页面就属于客户端。

1.控制器加权限

先来给控制器加权限,打开CategoryController
【..\MyCompanyName.AbpZeroTemplate.Web\Areas\Mpa\Controllers\CategoryController.cs】
分别给方法头加上注释,代码如下:
[AbpMvcAuthorize(AppPermissions.Pages_Category)]
public class CategoryController : AbpZeroTemplateControllerBase
{
...
[AbpMvcAuthorize(AppPermissions.Pages_Category_Create)]
public ActionResult CreateModal()
[AbpMvcAuthorize(AppPermissions.Pages_Category_Edit)]
public ActionResult EditModal(int id)
...
保存,生成项目,刷新分类管理,你会发现跳转到登录页面了,这是因为我并没有给Admin角色添加分类管理的任何权限。
现在把登录连接%2FCategory这段字符删除,重新访问http://localhost:8019/Account/Login?ReturnUrl=%2Fmpa,然后登录。
登录成功后,进入角色管理--编辑Admin角色,加入分类管理的权限。效果如下:
现在访问分类管理,已经正常显示了。
 

2.方法加权限

到这里还没完,继续给应用层方法也加入权限。
打开文件CategoryAppService.cs
【..\MyCompanyName.AbpZeroTemplate.Application\CategoryApp\CategoryAppService.cs】
分别给类和几个方法加入注解,代码如下:
[AbpAuthorize(AppPermissions.Pages_Category)]
public class CategoryAppService : AbpZeroTemplateAppServiceBase, ICategoryAppService
{
...
[AbpAuthorize(AppPermissions.Pages_Category_Create)]
public void CreateCategory(CreateCategoryInput input)
...
[AbpAuthorize(AppPermissions.Pages_Category_Delete)]
public void DeleteCategory(EntityRequestInput input)
...
[AbpAuthorize(AppPermissions.Pages_Category_Edit)]
public void UpdateCategory(CreateCategoryInput input)
...
生成Web项目,这里不给出测试方法,但记住权限一定要加上。

3.菜单加权限

最后还有一个地方要加权限,那就是菜单
打开文件MpaNavigationProvider.cs
【..\MyCompanyName.AbpZeroTemplate.Web\Areas\Mpa\Startup\MpaNavigationProvider.cs】
修改分类管理菜单的代码如下:
//子菜单
PageNames.App.Common.Category,
L("CategoryManager"),
url:"Mpa/Category",
icon: "icon-globe",
requiredPermissionName: AppPermissions.Pages_Category//菜单权限,登录用户所在角色有此权限才会显示出来
))
生成Web项目,打开角色管理--编辑Admin角色,把分类管理的权限去掉,保存,刷新页面。
会发现商店菜单已经不显示了,可能你会疑惑为什么连商店菜单都不显示呢?这是因为商店菜单只有分类管理一个子菜单,如果有多个子菜单时,商店菜单就会显示出来。
现在,整个分类管理功能终于完成。通过这个例子,我尽量通过最简单的方式去实现,不管是自己做笔记还是让他人学习,都比较易懂。

ASP.NET Zero--15.一个例子(8)商品分类管理-权限控制的更多相关文章

  1. [asp.net core]SignalR一个例子

    摘要 在一个后台管理的页面想实时监控一些操作的数据,想到用signalR. 一个例子 asp.net core+signalR 使用Nuget安装包:Microsoft.AspNetCore.Sign ...

  2. ASP.NET Core 实战:基于 Jwt Token 的权限控制全揭露

    一.前言 在涉及到后端项目的开发中,如何实现对于用户权限的管控是需要我们首先考虑的,在实际开发过程中,我们可能会运用一些已经成熟的解决方案帮助我们实现这一功能,而在 Grapefruit.VuCore ...

  3. 在ASP.NET MVC里对Web Page网页进行权限控制

    我们在ASP.NET MVC开发时,有时候还是得设计ASP.NET的Web Page网页(.aspx和.aspx.cs),来实现一些ASP.NET MVC无法实现的功能,如此篇<Visual S ...

  4. Asp.net下使用HttpModule模拟Filter,实现权限控制

    在asp.net中,我们为了防止用户直接从Url中访问指定的页面而绕过登录验证,需要给每个页面加上验证,或者是在模板页中加上验证.如果说项目比较大的话,添加验证是一件令人抓狂的事情,本次,我就跟大家分 ...

  5. 技术的正宗与野路子 c#, AOP动态代理实现动态权限控制(一) 探索基于.NET下实现一句话木马之asmx篇 asp.net core 系列 9 环境(Development、Staging 、Production)

    黄衫女子的武功似乎与周芷若乃是一路,飘忽灵动,变幻无方,但举手抬足之间却是正而不邪,如说周芷若形似鬼魅,那黄衫女子便是态拟神仙. 这段描写出自<倚天屠龙记>第三十八回. “九阴神抓”本是& ...

  6. ASP.NET Zero--14.一个例子(7)商品分类管理-分类搜索及分页

    分类搜索实现 1.添加搜索框 打开Index视图,添加一个搜索框,代码如下: ... <div class="portlet light"> <div class ...

  7. [ASP.NET MVC2 系列] ASP.Net MVC教程之《在15分钟内用ASP.Net MVC创建一个电影数据库应用程序》

    [ASP.NET MVC2 系列]      [ASP.NET MVC2 系列] ASP.Net MVC教程之<在15分钟内用ASP.Net MVC创建一个电影数据库应用程序>       ...

  8. ASP.NET Zero--8.一个例子(1)菜单添加

    以一个商品分类管理功能来编写,代码尽量简单易懂.从一个实体开始,一直到权限控制,由浅到深一步步对功能进行完善. 1.打开语言文件 [..\MyCompanyName.AbpZeroTemplate.C ...

  9. ASP.NET MVC 5 02 - ASP.NET MVC 1-5 各版本特点

    参考书籍:<ASP.NET MVC 4 高级编程>.<ASP.NET MVC 5 高级编程>.<C#高级编程(第8版)>.<使用ASP.NET MVC开发企业 ...

随机推荐

  1. Android5.1图库Gallery2代码分析数据加载流程

    图片数据加载流程. Gallery---->GalleryActivity------>AlbumSetPage------->AlbumPage--------->Photo ...

  2. PAT (Advanced Level) 1003. Emergency (25)

    最短路+dfs 先找出可能在最短路上的边,这些边会构成一个DAG,然后在这个DAG上dfs一次就可以得到两个答案了. 也可以对DAG进行拓扑排序,然后DP求解. #include<iostrea ...

  3. Firefox 插件 JSview是一套比较实用的JS,CSS文件查看工具,很方便,很快捷地查看页面引用了哪些文件,作为Web前端开发者是一套必备的插件,由于Firefox升级过快,插件很快不兼容了,这里对插件做了一些调整,可以兼容最新Firefox浏览器(目前FireFox 21)

    JSView Firefox Plugins Download  点击下载

  4. deb安装了些啥?

    http://www.cyberciti.biz/faq/view-contents-of-deb-file/

  5. FTP服务器配置部分

    构建基于虚拟用户的vsftpd服务器1.建立虚拟FTP用户的帐号数据库文件 (1) 建立虚拟用户的账户名.密码列表->奇数行为帐号名,偶数行为上一行中帐号的密码 (2) 转化为Berkeley ...

  6. Laravel Eloquent get获取空的数据问题

    在用laravel框架来获取数据,若数据不存在时,以为会返回空,其实不是的,其实是一个 collection 值,会返回如下: object(Illuminate\Database\Eloquent\ ...

  7. (中等) POJ 1191 棋盘分割,DP。

    Description 将一个8*8的棋盘进行如下分割:将原棋盘割下一块矩形棋盘并使剩下部分也是矩形,再将剩下的部分继续如此分割,这样割了(n-1)次后,连同最后剩下的矩形棋盘共有n块矩形棋盘.(每次 ...

  8. iOS开发——二级列表

    原理很简单,一级菜单放在viewForHeaderInSection里面,加一个点击事件,然后判断它的二级菜单(cell)显不显示. 直接上代码吧! // //  HeheTableViewContr ...

  9. YII 框架在 MAC OS下 连接数据库失败 提示 DB connection: SQLSTATE[HY000] [2002]

    作者:zccst CDbConnection failed to open the DB connection: SQLSTATE[HY000] [2002] No such file or dire ...

  10. 打包程序时的证书问题(上传APP就出现Missing iOS Distribution signing indetity for)

    现象: 解决办法: 1.删除本地钥匙串中的这个文件,注意“系统”中的同名文件也必须删除 2.进入http://www.apple.com/certificateauthority/ 下载新的(WWDR ...