因为项目开发需要,目前学了一下MVC,请问一个权限问题,在线等,马上结。懒百度了。

MSDNXGH 2011-06-08 04:39:50
MVC中的权限限制是这样写Authorize,好像是要每一个控制器内面的每一个方法都要写啊,有没有统一方法,像webform一样在web.confing配置一下就行昵


它提供[Authorize(Roles="admin")]角色的权限管理,可我们一般开发都不是都角色管理。像webfrom模式中,我们对于每一个页。我们继承权限基类,
public override int PermissionID
{
get
{
return 6;
}
}
返回每个页需要的权限值。进行控制。那在MVC中,这如何控制昵?
...全文
947 52 打赏 收藏 转发到动态 举报
写回复
用AI写文章
52 条回复
切换为时间正序
请发表友善的回复…
发表回复
望舒 2011-06-11
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 msdnxgh 的回复:]
不要写得太死,我的意思是这样的,用户名和角色名都是可以变的
但权限值不变。
就是webform开发一样,每个页都有一个对应的权限值。进行权限验证,只需知道,用户权限集中,有没有这个权限值就可以了。至于用户是什么角色并不重要。角色是为了统一进行分配权限,不用每个用户都要去设置权限。新来的用户,分配己设置好的角色就行了。
那像MVC可不可这样昵,就是这个控制器中的方法,都指定一个权限值,跟web……
[/Quote]


你把用户分组啊 ,每个组滴权限放到数据库里啊 抽象一个过滤层出来
MSDNXGH 2011-06-10
  • 打赏
  • 举报
回复

编程是一个思维灵活度很高的东东。呵呵

追加了100分。

谢谢大家
MSDNXGH 2011-06-10
  • 打赏
  • 举报
回复
[Quote=引用 48 楼 sandy945 的回复:]
在webform模式中,我们可以通过以下方式,为该页返回该页需要的权限.

C# code

public override int PermissionID
{
get
{
return 22;
}
}


你这个22 是写死的,还是动态获取的

写死的话


C# code

public class TestF……
[/Quote]

对,页的权限一定是写死的,不变动的,可以随意写定角色,角色可以随意编定权限,这样给用户分配角色就可以了,角色的权限也可以随时更改。灵活度高。

非常感谢大家的回答。我一味地想MVC是个新玩意,忘了类。类有构造函数,属性等等。我老想到MVC是新玩儿把思维固定死。

非常渐愧。 最后一句,感谢大家。
阿非 2011-06-10
  • 打赏
  • 举报
回复
我的理解是:获取请求的RUL,然后,在数据库中查询该用户所有能浏览的URL集合,如果该URL,在其中,他就能访问。(大概意思是这样,如果多人使用,可配置角色,减少重复性配置)
--------------------------------------------------------------------------
恩,是的

阿非 2011-06-10
  • 打赏
  • 举报
回复
在webform模式中,我们可以通过以下方式,为该页返回该页需要的权限.

public override int PermissionID
{
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
MSDNXGH 2011-06-10
  • 打赏
  • 举报
回复
[Quote=引用 46 楼 karascanvas 的回复:]
C# code


public class PermissionRequiredAttribute : FilterAttribute, IAuthorizationFilter
{
public int PermissionID { get; set; }

PermissionRequiredAttribute(int permissionID){ this……
[/Quote]

渐愧,渐愧。。。。竞然 忘了,。。。构造函数。。。顶你。。。。
种草德鲁伊 2011-06-10
  • 打赏
  • 举报
回复


public class PermissionRequiredAttribute : FilterAttribute, IAuthorizationFilter
{
public int PermissionID { get; set; }

PermissionRequiredAttribute(int permissionID){ this.PermissionID = permissionID; }

}





[PermissionRequired(12345)]
public ActionResult About(){ }

MSDNXGH 2011-06-10
  • 打赏
  • 举报
回复
大家说法都很有道理,可能我的理解,或者表达有点错误,我仔细地再表达一下。

public class PermissionRequiredAttribute : AuthorizeAttribute, IAuthorizationFilter
{
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中,版主说了一个是这样的,获取请求URL

filterContext.HttpContext.Request.Path

对于版主这个说法,我的理解是:获取请求的RUL,然后,在数据库中查询该用户所有能浏览的URL集合,如果该URL,在其中,他就能访问。(大概意思是这样,如果多人使用,可配置角色,减少重复性配置)

对于这种方式,不知的我理解对不对,如果对,我想问的问题就是,除了这样,还有其它的方法。
如果不错,麻烦大家指点一下。谢谢。
种草德鲁伊 2011-06-10
  • 打赏
  • 举报
回复


public class PermissionRequiredAttribute : AuthorizeAttribute, IAuthorizationFilter
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
// 这里完成权限验证,不管是什么方法。

if (没有权限)
{
filterContext.Result = new ActionResult(); // 返回一个ActionResult提示没有权限。
}
}
}

种草德鲁伊 2011-06-10
  • 打赏
  • 举报
回复
mvc的过滤器都已经直接加在action或controller上了,相当于webform在page的代码内来控制权限了,这时候再考虑什么url都是多余的...
阿非 2011-06-10
  • 打赏
  • 举报
回复
是不是剑走偏锋不是看个人理解,而是要看实际应用。

我在#34告诉你的,确切的说是对Action进行控制,需要通过URL方式而已
claymore1114 2011-06-10
  • 打赏
  • 举报
回复
[Quote=引用 39 楼 msdnxgh 的回复:]

不是,我咋天,我问了一MVP,QQ上问,他说,他从来没这样用过,也没有一个项目这样用过,用URL作权限验证,我想问更多,他在比赛,不便多问,他叫我先多谷歌。

我想也是,因为我也没用过URL权限验证,当然,这并不代表它是错的,剑走偏锋,也是可以的,达到目的就是行的,好的。

我想看看更多的思想,了解更多一点,今天结吧,无论是否有结果。
[/Quote]
什么叫 URL权限验证 ?
权限 不都是 是 通过 角色来判断的吗?
在Action/Controller 上 加特性 就行了。
借我那把枪吧 2011-06-10
  • 打赏
  • 举报
回复
帮你顶
MSDNXGH 2011-06-10
  • 打赏
  • 举报
回复
不是,我咋天,我问了一MVP,QQ上问,他说,他从来没这样用过,也没有一个项目这样用过,用URL作权限验证,我想问更多,他在比赛,不便多问,他叫我先多谷歌。

我想也是,因为我也没用过URL权限验证,当然,这并不代表它是错的,剑走偏锋,也是可以的,达到目的就是行的,好的。

我想看看更多的思想,了解更多一点,今天结吧,无论是否有结果。
阿非 2011-06-10
  • 打赏
  • 举报
回复
还有疑问?
MSDNXGH 2011-06-10
  • 打赏
  • 举报
回复
顶上去啊
  • 打赏
  • 举报
回复
我也刚学习MVC,直接看的MVC3.。。
同学习。。
阿非 2011-06-09
  • 打赏
  • 举报
回复
很简单,类似这样


/// <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 上
wuxiaoke2009 2011-06-09
  • 打赏
  • 举报
回复
学习了哈
zhaowentao_bc 2011-06-09
  • 打赏
  • 举报
回复
mvc学习中,顶
加载更多回复(32)

62,241

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧