在授权用户时,我要考虑不同类型的角色。 例如:John必须拥有职位经理,并成为Office Supplies 部门的一员才能订购新计算机。
Roles的问题是Roles.GetRolesForUser(“John”)只能返回一个字符串数组。
我应该使用自定义roleProvider和自定义roleManager吗? 或者我应该开发一个自定义ProfileManager来添加像GetUsersWithProfileProperties()这样的方法吗?
欢迎任何建议!
蒂鲍特
编辑:上面的例子是简化的我可以有4种类型的角色,这是4个不同的集合。 编辑:我找到了very similar question答案 0 :(得分:2)
从你写的东西;我相信您现在所需的一切都是开箱即用的:
// Return all Users in a Role
string[] users;
users = Roles.GetUsersInRole("RoleName");
// Return all Roles for a User
string[] roles;
roles = Roles.GetRolesForUser();
// Search through Membership store locating users with a role
MembershipUserCollection mu;
mu = Membership.GetAllUsers();
// Loop through all membership users looking for users in a role
foreach(MembershipUser m in mu){
if(Roles.IsUserInRole(m.UserName, "Role Name")){
// Do something
// We can even nest to x levels
if (Roles.IsUserInRole(m.UserName, "Another Role")){
// Do something else
}
}
}
请澄清我是否误解了您的问题。
答案 1 :(得分:1)
为什么不创建具有Path-To-Level typew约定的“CompositeRoleProvider”来访问每个从属角色提供程序。您仍然需要创建多个角色提供程序,但您的Composite或顶级提供程序会为您完成所有工作。 我计划用ProfileProvider做类似的事情
答案 2 :(得分:0)
我正在研究如何解决一个非常类似的问题,我得出的结论是,最好的办法是实现自定义角色提供程序。
我正在使用它(http://msdn.microsoft.com/en-us/library/317sza4k(v=vs.100).aspx)作为基础,我将实现我的方法,如(IsManager,GetDepartment) ,ecc)。
数据将存储在连接到aspnet_users表的自定义表中。
希望将来可以帮助某人:)
答案 3 :(得分:-1)
我认为有一种方法GetUsersInRole。 http://msdn.microsoft.com/en-us/library/system.web.security.roles.getusersinrole.aspx