the base functionality getrolesasync(tkey userid) following
public virtual async task<ilist<string>> getrolesasync(tkey userid) { throwifdisposed(); var userrolestore = getuserrolestore(); var user = await findbyidasync(userid).withcurrentculture(); if (user == null) { throw new invalidoperationexception(string.format(cultureinfo.currentculture, resources.useridnotfound, userid)); } return await userrolestore.getrolesasync(user).withcurrentculture(); } does know how override functionality in derived class of usermanager or provide new method getmodelrolesasync(string userid) return rolemodel.
public class applicationusermanager : usermanager<applicationuser> { public applicationusermanager(iuserstore<applicationuser> store) : base(store) { } public static applicationusermanager create(identityfactoryoptions<applicationusermanager> options, iowincontext context) { var manager = new applicationusermanager(new userstore<applicationuser>(context.get<applicationdbcontext>())); // configure validation logic usernames manager.uservalidator = new uservalidator<applicationuser>(manager) { allowonlyalphanumericusernames = false, requireuniqueemail = true }; // configure validation logic passwords manager.passwordvalidator = new passwordvalidator { requiredlength = 6, requirenonletterordigit = true, requiredigit = true, requirelowercase = true, requireuppercase = true, }; var dataprotectionprovider = options.dataprotectionprovider; if (dataprotectionprovider != null) { manager.usertokenprovider = new dataprotectortokenprovider<applicationuser>(dataprotectionprovider.create("asp.net identity")); } return manager; } public override async task<ilist<rolemodel>> getrolesasync(string userid) { // need code here return rolemodel includes id // role name, complex object instead of // list of strings } } public class rolemodel { public string id { get; set; } public string name { get; set; } }
asp.net identity entity framework library provides identity role model out of box called identityrole. can use in combination provided rolemanager class return identityrole model.
you have provide own function though, interface task<ilist<string>> getrolesasync(tkey userid) set in base class return strings.
here example:
public class applicationusermanager : usermanager<applicationuser> { private rolemanager<identityrole> _rolemanager; public applicationusermanager(iuserstore<applicationuser> store) : base(store) { _rolemanager = new rolemanager<identityrole>(new rolestore<identityrole>()); } public async task<ilist<identityrole>> getmodelrolesasync(string userid) { ilist<string> rolenames = await base.getrolesasync(userid); var identityroles = new list<identityrole>(); foreach (var rolename in rolenames) { identityrole role = await _rolemanager.findbynameasync(rolename); identityroles.add(role); } return identityroles; } } you can configure system use asp.net's built in dependency injection system rolemanager shown here.
Comments
Post a Comment