asp.net mvc 3 - Manage Roles for Users in MVC 3 application -
i trying add , delete aspnet roles user in mvc 3 application.
i need work 3 tables described below.
my problems are:
i need display user's existing selected roles, , other roles available not selected user using "checkboxes"
i need save selected values table aspnet_usersinroles table
this have done far:
- i have created viewmodels called assignedrolesdata.cs
- i have altered models aspnet_users , aspnet_users hold icollection navigation properties aspnet_usersinroles
- i have created method usercontroller called "populateassignedroledata" populate existing roles per user
my problems:
- i cannot selected roles checkboxes
- i don't know how save them afterwards
- the keys of type guid
models
**using system; using system.collections.generic; using system.componentmodel.dataannotations; namespace www.models { public class aspnet_roles { public guid applicationid { get; set; } [key] public guid roleid { get; set; } public string rolename { get; set; } public string loweredrolename { get; set; } public string description { get; set; } public virtual icollection<aspnet_users> aspnet_user { get; set; } } } using system; using system.collections.generic; using system.componentmodel.dataannotations; namespace www.models { public class aspnet_users { public guid applicationid { get; set; } [key] public guid userid { get; set; } public string username { get; set; } public string loweredusername { get; set; } public string mobilealias { get; set; } public bool isanonymous { get; set; } public datetime lastactivitydate { get; set; } public virtual icollection<aspnet_roles> aspnet_role { get; set; } } }** viewmodels
using system; using system.collections.generic; using system.componentmodel.dataannotations; namespace www.viewmodels { public class assignedrolesdata { public guid roleid { get; set; } public string rolename { get; set; } public bool assigned { get; set; } } } usercontroller
public actionresult edit(guid id) { aspnet_users aspnet_user = db.aspnet_users .include(i => i.userid) //.include(i => i.aspnet_user) .where(i => i.userid == id) .single(); populateassignedroledata(aspnet_user); return view(aspnet_user); } private void populateassignedroledata(aspnet_roles aspnet_role) { var allaspnet_users = db.aspnet_users; var usersinroles = new hashset<guid>(aspnet_role.aspnet_user.select(c => c.userid)); var viewmodel = new list<assignedrolesdata>(); foreach (var user in allaspnet_users) { viewmodel.add(new assignedrolesdata { roleid = aspnet_role.roleid, rolename = aspnet_role.rolename, assigned = usersinroles.contains(aspnet_role.roleid) }); } viewbag.courses = viewmodel; } my edit view
<div class="editor-field"> <table> <tr> @{ int cnt = 0; list<www.viewmodels.assignedrolesdata> roles = viewbag.aspnet_role; foreach (var role in roles) { if (cnt++ % 3 == 0) { @: </tr> <tr> } @: <td> <input type="checkbox" name="selectedroles" value="@role.roleid" @(html.raw(role.assigned ? "checked=\"checked\"" : "")) /> @role.roleid @: @role.rolename @:</td> } @: </tr> } </table> </div> <p> <input type="submit" value="save" /> </p> </fieldset> tables
aspnet_users table applicationid uniqueidentifier userid uniqueidentifier username nvarchar(256) loweredusername nvarchar(256) mobilealias nvarchar(16) isanonymous bit lastactivitydate datetime aspnet_roles table applicationid uniqueidentifier roleid uniqueidentifier rolename nvarchar(256) loweredrolename nvarchar(256) description nvarchar(256) aspnet_usersinroles table userid uniqueidentifier roleid uniqueidentifier
you need post view can see how trying create check boxes.
to answer second problem, can this:
public actionresult updateroles(string username, string[] roles) { // remove user roles, use more logic // see changes , if need remove role // started string[] userroles = roles.getrolesforuser(user.username); if(userroles.count() > 0) { foreach(string role in userroles) { roles.removeuserfromroles(username, role); } } // add user submitted roles foreach(string role in roles) { roles.addusertorole(username, role); }
Comments
Post a Comment