MVC中的权限限制是这样写Authorize,好像是要每一个控制器内面的每一个方法都要写啊,有没有统一方法,像webform一样在web.confing配置一下就行昵
它提供[Authorize(Roles="admin")]角色的权限管理,可我们一般开发都不是都角色管理。像webfrom模式中,我们对于每一个页。我们继承权限基类,
public override int PermissionID
{
get
{
return 6;
}
}
返回每个页需要的权限值。进行控制。那在MVC中,这如何控制昵?
它提供[Authorize(Roles="admin")]角色的权限管理,可我们一般开发都不是都角色管理。像webfrom模式中,我们对于每一个页。我们继承权限基类,
public override int PermissionID
{
get
{
return 6;
}
}
返回每个页需要的权限值。进行控制。那在MVC中,这如何控制昵?
解决方案 »
- 求asp.net禁止代理服务器访问网站?
- asp.net 中委托的应用?
- GridView1.Rows[GridView1.EditIndex].Cells[0].Text = ((TextBox)GridView1.Rows[GridView1.EditIndex].Controls[0].Controls[0]).Text
- 求asp.net功能完整的源码论坛
- 急求在Web中显示动态Chart!
- 菜鸟的问题
- [讨论]调用IE打印多页GridView,高分寻求可行解决方案!不够可以再加!!
- aspx调用不到ajaxpro方法
- 在一个Web Application中,有多个aspx页面要用到相同的函数,如何实现这些函数的共享呢?
- 我创建工程出现如此错误,是怎么回事,该怎么解决??
- gridView的一个增加行的问题
- 类文件
public class XXXXControler : Controller {
但权限值不变。
就是webform开发一样,每个页都有一个对应的权限值。进行权限验证,只需知道,用户权限集中,有没有这个权限值就可以了。至于用户是什么角色并不重要。角色是为了统一进行分配权限,不用每个用户都要去设置权限。新来的用户,分配己设置好的角色就行了。
那像MVC可不可这样昵,就是这个控制器中的方法,都指定一个权限值,跟web.form一样昵,或者类似的方法
/// <summary>
/// URL授权类
/// </summary>
public class UrlAuthorizeAttribute : AuthorizeAttribute
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
if (filterContext == null) throw new ArgumentNullException("filterContext"); if (!filterContext.HttpContext.User.Identity.IsAuthenticated)
{
filterContext.Result = new HttpUnauthorizedResult();
return;
} List<PermissionItem> systemPathTagCollection
= GetSystemPathTag(filterContext, filterContext.HttpContext.Request.Path); if (!CanAccess(filterContext, systemPathTagCollection))
ShowError(filterContext, "没有权限访问该页面");
}
}
UrlAuthorize 这个 Attribute 可以+ 在Action 上,也可以+在 Controller 上
同学习。。
但先考虑一下,我的MVC项目经验为零。
目前正在接触MVC,大体上也有所了解,一般性的操作,比如添/更/册/查,都没有啥问题。
考虑进一步加深,想到权限如何控制,就不太明白。你给出的例子,简明扼要。明白人没事,可我是不明白人啊麻烦你再说一下,谢谢
建立一个用户表,和一个UER表,一个用户对应多个URL,然后获得URL,查询对应用户的URL集是否有该URL?
(多人使用可以用角色方案处理)
那么对于页的安钮权限怎么办啊?
List<PermissionItem> systemPathTagCollection
= GetSystemPathTag(filterContext, filterContext.HttpContext.Request.Path);filterContext.HttpContext.Request.Path 就是要判断URL的
可以写个自定义的 HtmlHelper 或类似的东西, 将按钮权限传入 然后控制是否生成按钮,或按钮是否可用
你的权限针对的是action又不是url
public override int PermissionID
{
get
{
return 22;
}
}
返加该页权限值就可以了,用户登陆成功,打开有该页时,查询该权限是否在用户的权限值集里,就可以判断出,该用户有没有权限。但,像MVC,首次,我都不知道该从那里,为一个Action设定一个权限值。上面版主,提出那个URL,控制,想了想,也可行,那还有没有别的方法昵???
权限 不都是 是 通过 角色来判断的吗?
在Action/Controller 上 加特性 就行了。
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
// 这里完成权限验证,不管是什么方法。 if (没有权限)
{
filterContext.Result = new ActionResult(); // 返回一个ActionResult提示没有权限。
}
}
}
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
// 这里完成权限验证,不管是什么方法。 if (没有权限)
{
(A点)
filterContext.Result = new ActionResult();
// 返回一个ActionResult提示没有权限。
}
}
}
public class TestFilter : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
//这里进行权限验证(B点)
}
}验证方式,可以通过以上方式,可以验证,这个我明白清楚。验证如下 [TestFilter]
public ActionResult About()
{
return View();
}
我搞不清楚的是,在A点,和B点,进行权限验证,用什么传进权限值,就是操作该Action需要的权限。在
webform模式中,我们可以通过以下方式,为该页返回该页需要的权限. public override int PermissionID
{
get
{
return 22;
}
}
那在MVC中,版主说了一个是这样的,获取请求URLfilterContext.HttpContext.Request.Path 对于版主这个说法,我的理解是:获取请求的RUL,然后,在数据库中查询该用户所有能浏览的URL集合,如果该URL,在其中,他就能访问。(大概意思是这样,如果多人使用,可配置角色,减少重复性配置)对于这种方式,不知的我理解对不对,如果对,我想问的问题就是,除了这样,还有其它的方法。
如果不错,麻烦大家指点一下。谢谢。
{
public int PermissionID { get; set; } PermissionRequiredAttribute(int permissionID){ this.PermissionID = permissionID; }}[PermissionRequired(12345)]
public ActionResult About(){ }
{
get
{
return 22;
}
}你这个22 是写死的,还是动态获取的写死的话
public class TestFilter : ActionFilterAttribute
{
public int PermissionID {set;get;}
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
//PermissionID
//这里进行权限验证(B点)
}
}[TestFilter(PermissionID = 22)]
动态获取的话
[TestFilter(PermissionStr = "相应Name")]然后根据Name 获取权限ID
--------------------------------------------------------------------------
恩,是的
对,页的权限一定是写死的,不变动的,可以随意写定角色,角色可以随意编定权限,这样给用户分配角色就可以了,角色的权限也可以随时更改。灵活度高。非常感谢大家的回答。我一味地想MVC是个新玩意,忘了类。类有构造函数,属性等等。我老想到MVC是新玩儿把思维固定死。非常渐愧。 最后一句,感谢大家。