全面修正分级授权,去掉Anonymous,采用Authenticate进行授权

This commit is contained in:
yubaolee 2016-05-26 20:10:22 +08:00
parent b3c6df2931
commit 855f97df7d
24 changed files with 227 additions and 244 deletions

View File

@ -50,8 +50,9 @@ namespace OpenAuth.App
}
else
{
Categorys = _repository.LoadInOrgs(pageindex, pagesize, GetSubCategories(parentId));
total = _repository.GetCategoryCntInOrgs(parentId);
var ids = GetSubCategories(parentId);
Categorys = _repository.LoadInOrgs(pageindex, pagesize, ids);
total = _repository.GetCategoryCntInOrgs(ids);
}
return new

View File

@ -34,8 +34,9 @@ namespace OpenAuth.App
}
else
{
Modules = _repository.LoadInOrgs(pageindex, pagesize, GetSubOrgIds(parentId));
total = _repository.GetModuleCntInOrgs(parentId);
var ids = GetSubOrgIds(parentId);
Modules = _repository.LoadInOrgs(pageindex, pagesize, ids);
total = _repository.GetModuleCntInOrgs(ids);
}
return new

View File

@ -49,8 +49,9 @@ namespace OpenAuth.App
}
else
{
users = _repository.LoadInOrgs(pageindex, pagesize, GetSubOrgIds(orgId));
total = _repository.GetUserCntInOrgs(orgId);
var ids = GetSubOrgIds(orgId);
users = _repository.LoadInOrgs(pageindex, pagesize, ids);
total = _repository.GetUserCntInOrgs(ids);
}
var userviews = new List<UserView>();
foreach (var user in users)

View File

@ -1,17 +1,14 @@
// ***********************************************************************
// Assembly : OpenAuth.Mvc
// Author : yubaolee
// Created : 04-16-2016
// Created : 04-19-2016
//
// Last Modified By : yubaolee
// Last Modified On : 04-16-2016
// Last Modified On : 05-26-2016
// Contact : www.cnblogs.com/yubaolee
// File: assignModuleElement.js
//Description: 分配模块菜单(按钮)
// ***********************************************************************
// <copyright file="userRes.js" company="www.cnblogs.com/yubaolee">
// 版权所有(C) 2015
// </copyright>
// <summary>分配模块菜单(按钮)</summary>
// ***********************************************************************
$(document).ready(function () {
$.CurrentDialog.find("#btnAccess").on("click", function () {

View File

@ -97,7 +97,7 @@ var ztree = function () {
event.preventDefault();
}
$.getJSON('/OrgManager/LoadForTree', function (json) {
$.getJSON('/OrgManager/LoadOrg', function (json) {
zTreeObj = $.fn.zTree.init($.CurrentDialog.find("#tree"), setting, json);
zTreeObj.expandAll(true);
});

View File

@ -1,4 +1,46 @@

//左边分类导航树
var ztree = function () {
var url = '/OrgManager/LoadOrg';
var setting = {
view: { selectedMulti: false },
data: {
key: {
name: 'Name',
title: 'Name'
},
simpleData: {
enable: true,
idKey: 'Id',
pIdKey: 'ParentId',
rootPId: 'null'
}
},
callback: {
onClick: function (event, treeId, treeNode) {
list.reload(treeNode.Id);
}
}
};
var load = function () {
$.getJSON(url, function (json) {
var zTreeObj = $.fn.zTree.init($("#orgtree"), setting, json);
var firstId; //tree的第一个ID
if (json.length > 0) {
firstId = json[0].Id;
} else {
firstId = -1;
}
list.reload(firstId);
zTreeObj.expandAll(true);
});
};
load();
return {
reload: load
}
}();
//grid列表模块
function MainGrid() {
var url = '/OrgManager/LoadChildren?Id=';
@ -57,7 +99,7 @@ function MainGrid() {
align: 'center'
},
],
dataUrl: url + selectedId,
data: [],
fullGrid: true,
showLinenumber: true,
showCheckboxcol: true,
@ -74,41 +116,6 @@ function MainGrid() {
MainGrid.prototype = new Grid();
var list = new MainGrid();
//左边分类导航树
var ztree = function () {
var url = '/OrgManager/LoadOrg';
var setting = {
view: { selectedMulti: false },
data: {
key: {
name: 'Name',
title: 'Name'
},
simpleData: {
enable: true,
idKey: 'Id',
pIdKey: 'ParentId',
rootPId: 'null'
}
},
callback: { onClick: zTreeOnClick }
};
$.getJSON(url, function (json) {
$.fn.zTree.init($("#tree"), setting, json).expandAll(true);
});
function zTreeOnClick(event, treeId, treeNode) {
list.reload(treeNode.Id);
}
return {
reload: function () {
$.getJSON(url, function (json) {
$.fn.zTree.init($("#tree"), setting, json).expandAll(true);
});
}
}
}();
//编辑时,选择上级弹出的树
var parentTree = function () {
var nameDom = "#ParentName";
@ -156,7 +163,7 @@ var parentTree = function () {
return {
show: function () {
$.getJSON('/OrgManager/LoadForTree', function (json) {
$.getJSON('/OrgManager/LoadOrg', function (json) {
zTreeObj = $.fn.zTree.init($('#j_select_tree1'), setting, json);
var orgstr = $(idDom).val();
var name = '';

View File

@ -1,4 +1,46 @@

//左边分类导航树
var orgtree = function () {
var url = '/OrgManager/LoadOrg';
var setting = {
view: { selectedMulti: false },
data: {
key: {
name: 'Name',
title: 'Name'
},
simpleData: {
enable: true,
idKey: 'Id',
pIdKey: 'ParentId',
rootPId: 'null'
}
},
callback: {
onClick: function (event, treeId, treeNode) {
list.reload(treeNode.Id);
}
}
};
var load = function () {
$.getJSON(url, function (json) {
var zTreeObj = $.fn.zTree.init($("#orgtree"), setting, json);
var firstId; //tree的第一个ID
if (json.length > 0) {
firstId = json[0].Id;
} else {
firstId = -1;
}
list.reload(firstId);
zTreeObj.expandAll(true);
});
};
load();
return {
reload: load
}
}();
//grid列表模块
function MainGrid() {
var url = '/RoleManager/Load?orgId=';
@ -39,7 +81,7 @@ function MainGrid() {
width: 100
},
],
dataUrl: url + selectedId,
data:[],
fullGrid: true,
showLinenumber: true,
showCheckboxcol: true,
@ -56,41 +98,6 @@ function MainGrid() {
MainGrid.prototype = new Grid();
var list = new MainGrid();
//左边分类导航树
var orgtree = function () {
var url = '/OrgManager/LoadOrg';
var setting = {
view: { selectedMulti: false },
data: {
key: {
name: 'Name',
title: 'Name'
},
simpleData: {
enable: true,
idKey: 'Id',
pIdKey: 'ParentId',
rootPId: 'null'
}
},
callback: { onClick: zTreeOnClick }
};
$.getJSON(url, function (json) {
$.fn.zTree.init($("#orgtree"), setting, json).expandAll(true);
});
function zTreeOnClick(event, treeId, treeNode) {
list.reload(treeNode.Id);
}
return {
reload: function () {
$.getJSON(url, function (json) {
$.fn.zTree.init($("#orgtree"), setting, json).expandAll(true);
});
}
}
}();
//编辑时,选择上级弹出的树
var parentTree = function () {
var nameDom = "#OrgName";
@ -138,7 +145,7 @@ var parentTree = function () {
return {
show: function () {
$.getJSON('/OrgManager/LoadForTree', function (json) {
$.getJSON('/OrgManager/LoadOrg', function (json) {
zTreeObj = $.fn.zTree.init($('#j_select_tree1'), setting, json);
var orgstr = $(idDom).val();
var name = '';

View File

@ -1,4 +1,45 @@

//左边分类导航树
var tree = function () {
var url = '/OrgManager/LoadOrg';
var setting = {
view: { selectedMulti: false },
data: {
key: {
name: 'Name',
title: 'Name'
},
simpleData: {
enable: true,
idKey: 'Id',
pIdKey: 'ParentId',
rootPId: 'null'
}
},
callback: {
onClick: function (event, treeId, treeNode) {
list.reload(treeNode.Id);
}
}
};
var load = function () {
$.getJSON(url, function (json) {
var zTreeObj = $.fn.zTree.init($("#tree"), setting, json);
var firstId; //tree的第一个ID
if (json.length > 0) {
firstId = json[0].Id;
} else {
firstId = -1;
}
list.reload(firstId);
zTreeObj.expandAll(true);
});
};
load();
return {
reload: load
}
}();
//grid列表模块
function MainGrid() {
var url = '/StockManager/Load?parentId=';
@ -53,7 +94,7 @@ function MainGrid() {
width: 100
},
],
dataUrl: url + selectedId,
data:[],
fullGrid: true,
showLinenumber: true,
showCheckboxcol: true,
@ -70,41 +111,6 @@ function MainGrid() {
MainGrid.prototype = new Grid();
var list = new MainGrid();
//左边分类导航树
var ztree = function () {
var url = '/OrgManager/LoadOrg';
var setting = {
view: { selectedMulti: false },
data: {
key: {
name: 'Name',
title: 'Name'
},
simpleData: {
enable: true,
idKey: 'Id',
pIdKey: 'ParentId',
rootPId: 'null'
}
},
callback: { onClick: zTreeOnClick }
};
$.getJSON(url, function (json) {
$.fn.zTree.init($("#tree"), setting, json).expandAll(true);
});
function zTreeOnClick(event, treeId, treeNode) {
list.reload(treeNode.Id);
}
return {
reload: function () {
$.getJSON(url, function (json) {
$.fn.zTree.init($("#tree"), setting, json).expandAll(true);
});
}
}
}();
//编辑时,选择上级弹出的树
var parentTree = function () {
var nameDom = "#ParentName";
@ -152,7 +158,7 @@ var parentTree = function () {
return {
show: function () {
$.getJSON('/OrgManager/LoadForTree', function (json) {
$.getJSON('/OrgManager/LoadOrg', function (json) {
zTreeObj = $.fn.zTree.init($('#j_select_tree1'), setting, json);
var orgstr = $(idDom).val();
var name = '';

View File

@ -70,7 +70,7 @@ function UserRolesList() {
width: 100
}
],
dataUrl: '/RoleManager/LoadForOrgAndUser?orgId=' + selectedId + '&userId=' + $('#userId').val(),
data:[],
fullGrid: true,
showLinenumber: true,
showCheckboxcol: true,
@ -105,8 +105,16 @@ var ztree = function () {
callback: { onClick: zTreeOnClick }
};
$.getJSON('/OrgManager/LoadOrg', function (json) {
var zTreeObj = $.fn.zTree.init($.CurrentDialog.find("#tree"), setting, json);
var zTreeObj = $.fn.zTree.init($("#tree"), setting, json);
var firstId; //tree的第一个ID
if (json.length > 0) {
firstId = json[0].Id;
} else {
firstId = -1;
}
userRolesList.reload(firstId);
zTreeObj.expandAll(true);
});
}();
function zTreeOnClick(event, treeId, treeNode) {

View File

@ -1,4 +1,46 @@

//左边分类导航树
var maintree = function () {
var url = '/OrgManager/LoadOrg';
var setting = {
view: { selectedMulti: false },
data: {
key: {
name: 'Name',
title: 'Name'
},
simpleData: {
enable: true,
idKey: 'Id',
pIdKey: 'ParentId',
rootPId: 'null'
}
},
callback: {
onClick: function (event, treeId, treeNode) {
list.reload(treeNode.Id);
}
}
};
var load = function () {
$.getJSON(url, function (json) {
var zTreeObj = $.fn.zTree.init($("#orgtree"), setting, json);
var firstId; //tree的第一个ID
if (json.length > 0) {
firstId = json[0].Id;
} else {
firstId = -1;
}
list.reload(firstId);
zTreeObj.expandAll(true);
});
};
load();
return {
reload: load
}
}();
//grid列表模块
function MainGrid() {
var url = '/UserManager/Load?orgId=';
@ -47,7 +89,7 @@ function MainGrid() {
}
],
dataUrl: url + selectedId,
data:[],
fullGrid: true,
showLinenumber: true,
showCheckboxcol: true,
@ -56,6 +98,7 @@ function MainGrid() {
showTfoot: false,
});
this.reload = function (id) {
if (id != undefined) selectedId = id;
this.maingrid.datagrid('reload', { dataUrl: url + selectedId });
@ -64,42 +107,6 @@ function MainGrid() {
MainGrid.prototype = new Grid();
var list = new MainGrid();
//左边分类导航树
var maintree = function () {
var url = '/OrgManager/LoadOrg';
var setting = {
view: { selectedMulti: false },
data: {
key: {
name: 'Name',
title: 'Name'
},
simpleData: {
enable: true,
idKey: 'Id',
pIdKey: 'ParentId',
rootPId: 'null'
}
},
callback: {
onClick: function(event, treeId, treeNode) {
list.reload(treeNode.Id);
}
}
};
$.getJSON(url, function (json) {
$.fn.zTree.init($("#orgtree"), setting, json).expandAll(true);
});
return {
reload: function () {
$.getJSON(url, function (json) {
$.fn.zTree.init($("#orgtree"), setting, json).expandAll(true);
});
}
}
}();
//编辑时,选择上级弹出的树
var parentTree = function () {
var nameDom = "#Organizations";

View File

@ -46,10 +46,10 @@ namespace OpenAuth.Mvc.Controllers
if (function == null)
throw new Exception("未能找到Action");
var anonymous = function.GetCustomAttribute(typeof(AnonymousAttribute));
var authorize = function.GetCustomAttribute(typeof(AuthenticateAttribute));
var module = loginUser.Modules.FirstOrDefault(u => u.Url.ToLower().Contains(controllername));
//当前登录用户没有Action记录&&Action没有anonymous标识
if (module == null && anonymous == null)
if (authorize != null && module == null)
{
filterContext.Result = new RedirectResult("/Login/Index");
return;

View File

@ -4,6 +4,7 @@ using System.Web.Mvc;
using Infrastructure;
using OpenAuth.App;
using OpenAuth.Domain;
using OpenAuth.Mvc.Models;
namespace OpenAuth.Mvc.Controllers
{
@ -18,6 +19,7 @@ namespace OpenAuth.Mvc.Controllers
//
// GET: /UserManager/
[Authenticate]
public ActionResult Index()
{
return View();
@ -33,16 +35,7 @@ namespace OpenAuth.Mvc.Controllers
public string LoadForTree()
{
var models = _app.LoadAll();
//添加根节点
models.Add(new Category
{
Id = 0,
ParentId = -1,
Name = "根结点",
CascadeId = "0"
});
return JsonHelper.Instance.Serialize(models);
return JsonHelper.Instance.Serialize(_app.LoadAll());
}
//添加或修改Category

View File

@ -16,26 +16,22 @@ namespace OpenAuth.Mvc.Controllers
_app = AutofacExt.GetFromFac<ModuleManagerApp>();
}
[Anonymous]
public string GetModules(int parentId = 0)
{
return JsonHelper.Instance.Serialize(_app.LoadByParent(parentId));
}
[Anonymous]
public ActionResult Index()
{
var user = AutofacExt.GetFromFac<LoginApp>().GetLoginUser();
return View(user.Modules);
}
[Anonymous]
public ActionResult Main()
{
return View();
}
[Anonymous]
public ActionResult Git()
{
return View();
@ -46,7 +42,6 @@ namespace OpenAuth.Mvc.Controllers
/// </summary>
/// <returns>ActionResult.</returns>
[ChildActionOnly]
[Anonymous]
public ActionResult MenuHeader()
{
return View();

View File

@ -31,18 +31,15 @@ namespace OpenAuth.Mvc.Controllers
{
_app = AutofacExt.GetFromFac<ModuleElementManagerApp>();
}
[Anonymous]
public ActionResult Index(int id)
{
ViewBag.ModuleId = id;
return View();
}
[Anonymous]
public ActionResult Get(int moduleId = 0)
{
return Json(_app.LoadByModuleId(moduleId));
}
[Anonymous]
[HttpPost]
public string AddOrEditButton(ModuleElement button)
{
@ -57,7 +54,6 @@ namespace OpenAuth.Mvc.Controllers
}
return JsonHelper.Instance.Serialize(_bjuiResponse);
}
[Anonymous]
public string Del(string moduleElements)
{
try
@ -80,14 +76,12 @@ namespace OpenAuth.Mvc.Controllers
/// <param name="firstId">The first identifier.</param>
/// <param name="key">The key.</param>
/// <returns>ActionResult.</returns>
[Anonymous]
public ActionResult AssignModuleElement(int firstId, string key)
{
ViewBag.FirstId = firstId;
ViewBag.ModuleType = key;
return View();
}
[Anonymous]
public string LoadWithAccess(int tId, int firstId, string key)
{
return JsonHelper.Instance.Serialize(_app.LoadWithAccess(key, firstId, tId));

View File

@ -6,6 +6,7 @@ using System.Linq;
using System.Web.Mvc;
using Infrastructure.Helper;
using OpenAuth.App.ViewModel;
using OpenAuth.Mvc.Models;
namespace OpenAuth.Mvc.Controllers
{
@ -18,8 +19,8 @@ namespace OpenAuth.Mvc.Controllers
_app = AutofacExt.GetFromFac<ModuleManagerApp>();
}
//
// GET: /ModuleManager/
[Authenticate]
public ActionResult Index()
{
return View();
@ -52,14 +53,6 @@ namespace OpenAuth.Mvc.Controllers
public string LoadModuleWithRoot()
{
var orgs = AutofacExt.GetFromFac<LoginApp>().GetLoginUser().Modules.MapToList<ModuleView>();
//添加根节点
orgs.Add(new Module
{
Id = 0,
ParentId = -1,
Name = "根节点",
CascadeId = "0"
});
return JsonHelper.Instance.Serialize(orgs);
}

View File

@ -22,11 +22,11 @@ namespace OpenAuth.Mvc.Controllers
//
// GET: /OrgManager/
[Authenticate]
public ActionResult Index()
{
return View();
}
public ActionResult Assign(int firstId, string key)
{
ViewBag.FirstId = firstId;
@ -34,40 +34,14 @@ namespace OpenAuth.Mvc.Controllers
return View();
}
/// <summary>
/// 返回当前登录用户可访问到的部门
/// </summary>
/// <returns>System.String.</returns>
public string LoadForTree()
{
var orgs = AutofacExt.GetFromFac<LoginApp>().GetLoginUser().AccessedOrgs;
return JsonHelper.Instance.Serialize(orgs);
}
/// <summary>
/// 返回带有根节点的全部部门,不受用户权限影响
/// <para>可以匿名访问</para>
/// </summary>
/// <returns>System.String.</returns>
[Anonymous]
public string LoadOrg()
{
var orgs = AutofacExt.GetFromFac<LoginApp>().GetLoginUser().AccessedOrgs.MapToList<Org>();
//添加根节点
orgs.Add(new Org
{
Id = 0,
ParentId = -1,
Name = "根结点",
CascadeId = "0"
});
return JsonHelper.Instance.Serialize(orgs);
return JsonHelper.Instance.Serialize(AutofacExt.GetFromFac<LoginApp>().GetLoginUser().AccessedOrgs);
}
public string LoadForUser(int firstId)
{
var orgs = _orgApp.LoadForUser(firstId);
//添加根节点
return JsonHelper.Instance.Serialize(orgs);
}

View File

@ -20,7 +20,6 @@ namespace OpenAuth.Mvc.Controllers
}
[HttpPost]
[Anonymous]
public string Assign(string type, int firstId, string secIds)
{
try
@ -36,7 +35,6 @@ namespace OpenAuth.Mvc.Controllers
return JsonHelper.Instance.Serialize(BjuiResponse);
}
[HttpPost]
[Anonymous]
public string UnAssign(string type, int firstId, string secIds)
{
try

View File

@ -4,6 +4,7 @@ using OpenAuth.Domain;
using System;
using System.Linq;
using System.Web.Mvc;
using OpenAuth.Mvc.Models;
namespace OpenAuth.Mvc.Controllers
{
@ -18,6 +19,7 @@ namespace OpenAuth.Mvc.Controllers
//
// GET: /UserManager/
[Authenticate]
public ActionResult Index()
{
return View();
@ -50,14 +52,6 @@ namespace OpenAuth.Mvc.Controllers
public string LoadForTree()
{
var models = _app.LoadAll();
//添加根节点
models.Add(new Resource
{
Id = 0,
ParentId = -1,
Name = "根结点",
CascadeId = "0"
});
return JsonHelper.Instance.Serialize(models);
}

View File

@ -4,6 +4,7 @@ using OpenAuth.Domain;
using System;
using System.Linq;
using System.Web.Mvc;
using OpenAuth.Mvc.Models;
namespace OpenAuth.Mvc.Controllers
{
@ -18,6 +19,7 @@ namespace OpenAuth.Mvc.Controllers
//
// GET: /RoleManager/
[Authenticate]
public ActionResult Index()
{
return View();
@ -66,7 +68,6 @@ namespace OpenAuth.Mvc.Controllers
}
#region
public ActionResult LookupMulti(int userId)
{
ViewBag.UserId = userId;

View File

@ -3,6 +3,7 @@ using OpenAuth.App;
using OpenAuth.Domain;
using System;
using System.Web.Mvc;
using OpenAuth.Mvc.Models;
namespace OpenAuth.Mvc.Controllers
{
@ -21,6 +22,7 @@ namespace OpenAuth.Mvc.Controllers
//
// GET: /UserManager/
[Authenticate]
public ActionResult Index()
{
return View();

View File

@ -4,6 +4,7 @@ using System.Web.Mvc;
using Infrastructure;
using OpenAuth.App;
using OpenAuth.App.ViewModel;
using OpenAuth.Mvc.Models;
namespace OpenAuth.Mvc.Controllers
{
@ -18,6 +19,7 @@ namespace OpenAuth.Mvc.Controllers
//
// GET: /UserManager/
[Authenticate]
public ActionResult Index()
{
return View();

View File

@ -5,10 +5,12 @@ using System.Web;
namespace OpenAuth.Mvc.Models
{
/// <summary>
/// 允许匿名访问
/// 必须认证
/// </summary>
public class AnonymousAttribute :Attribute
public class AuthenticateAttribute : Attribute
{
}
}

View File

@ -146,7 +146,7 @@
<Compile Include="Global.asax.cs">
<DependentUpon>Global.asax</DependentUpon>
</Compile>
<Compile Include="Models\AnonymousAttribute.cs" />
<Compile Include="Models\AuthenticateAttribute.cs" />
<Compile Include="Models\BJUIResponse.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>

View File

@ -36,7 +36,7 @@ namespace OpenAuth.Repository
cascadeId = org.CascadeId;
}
return Find(u => u.CascadeId.Contains(cascadeId) && u.Id != orgId);
return Find(u => u.CascadeId.Contains(cascadeId));
}
public IEnumerable<Org> GetSubWithOwn(int orgId)