Note that there are some explanatory texts on larger screens.

plurals
  1. POMVC4 SimpleMemberhip Intranet webapp with Custom Roles
    primarykey
    data
    text
    <p>I am using SimpleMembership with WebMatrix. Since its an Intranet webapp, I am using the exisitng domain users in combination with custom roles and storing them in local webpages_ tables. I am trying to develop classes to manage the users &amp; roles. Perhaps I am going about this the wrong way, but here is what I have and below where I am stuck.</p> <p>Setting this in global.asa</p> <pre><code> WebSecurity.InitializeDatabaseConnection("SqlRoleManagerConnection", "webpages_Users", "UserID", "Username", false); </code></pre> <p>Setting this in web.config (other sources said to add roleManager=true section but it currently works without it)</p> <pre><code>&lt;!--&lt;roleManager enabled="true" defaultProvider="SqlRoleManager"&gt; &lt;providers&gt; &lt;clear /&gt; &lt;add name="SqlRoleManager" type="System.Web.Security.SqlRoleProvider" connectionStringName="SqlRoleManagerConnection" applicationName="YourAppName" /&gt; &lt;/providers&gt; &lt;/roleManager&gt;--&gt; &lt;httpRuntime targetFramework="4.5" /&gt; &lt;authentication mode="Windows" /&gt; &lt;authorization&gt; &lt;allow roles="Managers" /&gt; &lt;allow users="?" /&gt; &lt;/authorization&gt; </code></pre> <p>Data Access class (used by controllers)</p> <pre><code> 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&lt;Membership&gt; { private OFACDB _db = new OFACDB(); //public List&lt;webpages_Users&gt; UserView { get; set; } public IQueryable&lt;webpages_Users&gt; GetAllRecords() { var view = _db.webpages_Users .OrderBy(v =&gt; 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); } } } </code></pre> <p>And controller controls access by roles</p> <pre><code> [Authorize(Roles = "Admins")] public ActionResult Index() { var users = new MembershipViewModel(); users.GetAllRoleUsers("Managers"); return View(users); } </code></pre> <p>ADVICE? I use Roles.GetUsersInRole to list out users in a role, but I can't delete them very easily as this call does not return UserIDs and if I use the username to find/delete record, then it is escaped in the URL because the usernames contain the domain\ characters.</p> <p>/Account/Delete/LAN%5CLAN%5Ctest</p> <p>Looking for advice on perhaps taking a different approach to these classes if anyone else has done this before. Do i need to use a Membership Provider and Role Provider?</p>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload