我正在使用 SimpleMembership 和 WebMatrix。由于它是一个内联网 Web 应用程序,我将现有域用户与自定义角色结合使用,并将其存储在本地webpages_表中。我正在尝试开发类来管理用户和角色。也许我走错了路,但这是我所拥有的,下面是我卡住的地方。
在全局中设置此项
WebSecurity.InitializeDatabaseConnection("SqlRoleManagerConnection", "webpages_Users", "UserID", "Username", false);
在web.config中设置它(其他来源据说添加角色管理器= true部分,但它目前没有它就可以工作)
<!--<roleManager enabled="true" defaultProvider="SqlRoleManager">
<providers>
<clear />
<add name="SqlRoleManager" type="System.Web.Security.SqlRoleProvider" connectionStringName="SqlRoleManagerConnection" applicationName="YourAppName" />
</providers>
</roleManager>-->
<httpRuntime targetFramework="4.5" />
<authentication mode="Windows" />
<authorization>
<allow roles="Managers" />
<allow users="?" />
</authorization>
数据访问类(由控制器使用)
public class Membership
{
private OFACDB _db = new OFACDB();
public string UserID { get; set; }
public string UserName { get; set; }
public string RoleName { get; set; }
public string Name { get; set; }
public const string Domain = "LAN\";
public void Delete()
{
Roles.RemoveUserFromRole(this.UserName, this.RoleName);
}
public void AddMemberToRole()
{
if (!Roles.IsUserInRole(Membership.Domain + this.UserName, this.RoleName))
Roles.AddUserToRole(Membership.Domain + this.UserName, this.RoleName);
}
public void AddMember()
{
webpages_Users member = new webpages_Users();
member.Username = Membership.Domain + this.UserName;
_db.webpages_Users.Add(member);
_db.SaveChanges();
}
public void DelMember(string id)
{
webpages_Users member = _db.webpages_Users.Find(id);
_db.webpages_Users.Remove(member);
_db.SaveChanges();
}
}
public class MembershipViewModel : List<Membership>
{
private OFACDB _db = new OFACDB();
//public List<webpages_Users> UserView { get; set; }
public IQueryable<webpages_Users> GetAllRecords()
{
var view = _db.webpages_Users
.OrderBy(v => v.Username);
return view;
}
public void GetAllRoleUsers(string role) //Get application's users
{
if (Roles.RoleExists(role))
{
foreach (var item in Roles.GetUsersInRole(role))
{
var user = new Membership();
user.UserName = item;
user.Name = item;
user.RoleName = role;
this.Add(user);
}
}
}
public void GetNetworkUsers() //Get Network Users (AD)
{
var domainContext = new PrincipalContext(ContextType.Domain);
var groupPrincipal = GroupPrincipal.FindByIdentity(domainContext, IdentityType.SamAccountName, "Domain Users");
foreach (var item in groupPrincipal.Members)
{
var user = new Membership();
user.UserName = item.SamAccountName;
user.Name = item.Name;
this.Add(user);
}
}
}
控制器按角色控制访问
[Authorize(Roles = "Admins")]
public ActionResult Index()
{
var users = new MembershipViewModel();
users.GetAllRoleUsers("Managers");
return View(users);
}
建议?我使用 Roles.GetUsersInRole 列出角色中的用户,但我不能轻易删除它们,因为此调用不返回 UserID,如果我使用用户名查找/删除记录,那么它会在 URL 中转义,因为用户名包含域\字符。
/account/delete/LAN%5CLAN%5Ctest
如果其他人以前这样做过,请寻求有关对这些课程采取不同方法的建议。是否需要使用成员资格提供程序和角色提供程序?
我们最近致力于需要角色管理的成员资格实现,并遇到了一个名为 Security Guard 的 nuget 包。
http://www.mvccentral.net/Story/Details/tools/kahanu/securityguard-nuget-package-for-asp-net-membership
我会立即指出,这个包不是为与 SimpleMembership 提供程序一起使用而构建的。 SMP 包括一个基本功能子集,这使得编辑用户记录变得困难。 但是,尽管 SMP 存在局限性,但在自定义功能后,我们仍然能够将本机注册、OAuth 注册和角色管理结合起来。
我只想发表评论,但我不能,因为我只有一个低 44 分的代表。
我知道这很旧,但我正在寻找同样的东西,并希望在具有自己的数据库的@Vic与使用内置数据库的@Pabloker之间添加上面的评论。 我想 asp.net 有自己的脚本来创建这个数据库,并在此博客中进行了解释
cd WindowsMicrosoft.NETFramework64v4.0.30319
.aspnet_regsql -C "Data Source=localhost;Database=ACME.Config;Integrated Security=True;" -A r