none
Membership的局限性 RRS feed

  • 问题

  • 在Membership中,Role之间是平行的关系,无法适用于树形的角色结构中,且Profile只能扩展User的属性(比如真实姓名等)。
    目前我遇到2个需求
    1.Role和User都要按可指定的顺序显示吗(User可以通过Profile扩展Index属性)
    2.选择一个role后,获得所有归其管辖的角色名

    请教各位,除了另外建表外,可有办法解决?

    2010年2月20日 2:32

答案

全部回复

  • 第2个没有看懂

    第1个,这样可以么:
    var p = Roles.GetAllRoles().OrderBy(c=>c) ;

    //var p=from x in Roles.GetAllRoles() orderby x descending  select x;

    foreach (string x in p)
        Response.Write(x+"<br>");

    2010年2月20日 8:18
  • 谢谢donghaima的回答!
    1.需求关键是“可指定的顺序”,都是这帮官僚害的,哎。。。
    客户那边,角色、用户都是有排名先后的讲究,不能按照默认的拼音首字母排序,不知说明白没有。
    2.Role之间是平行的,所以无法体现“A角色内的User可以管理B角色中所有User”这一角色间的树状隶属关系。
    2010年2月20日 8:39
  • 问题一,解决起来很简单呀。 推荐你去修改一下Membership 的那几个相关的存储过程。 你安装了membership, 自然知道是数据库中的哪几个存储过程。
    你可以单建一张表,保存RoleID UserID 对应的排名顺序, 提取用户时,修改存储过程,将这个新建的表关联上,ORDER BY 排名顺序就可以了。那几个存储过程很简单的,修改起来也不是很麻烦的说。
    2010年2月20日 8:57
  • 感谢Michael Lee2的回复!
    你说的办法,是最后的选择了,毕竟要改表改存储过程,还要自定义RoleProvider。我发帖就是想问问有没有现成的方案,以免重复的发明。。。轮子:)

    2010年2月20日 9:15
  • 没有其他办法,还是改membership数据库了。自定义Provider,结贴

    • 已标记为答案 zjkcoc 2010年2月21日 8:30
    2010年2月21日 8:30
  • 没有其他办法,还是改membership数据库了。自定义Provider,结贴

    我觉得你的第一个问题,可以在存储过程层面解决掉,这样就不需要自己写Provider 了。
    2010年2月21日 8:33
  • 是的,默认的Provider取出来只是stirng[],我可以在存储过程中排好序
    但是还涉及到添加,修改,查看这个序号,全套的,所以还是自定义Provider了,把Roles表增加了两个字段(RoleNo,ParentRoleId),这样就把第二个问题也解决了,自定义的Provider里面返回我自定义的MembershipRole对象
    2010年2月21日 11:48