Base solution for your next web application
Open Closed

How to get userOrganizationUnits when user login? #1108


User avatar
0
fotrosi created

I write some code in AccountController to get userOrganizationUnits when user login and set in SettingManager:

[HttpPost]
        [DisableAuditing]
        public async Task<JsonResult> Login(LoginViewModel loginModel, string returnUrl = "", string returnUrlHash = "")
        {
            CheckModelState();

            var loginResult = await GetLoginResultAsync(
                loginModel.UsernameOrEmailAddress,
                loginModel.Password,
                loginModel.TenancyName
                );

            await SignInAsync(loginResult.User, loginResult.Identity, loginModel.RememberMe);

            // fotrosi 
            var OUList = _userOrganizationUnitRepository.FirstOrDefault(p => p.UserId == loginResult.User.Id && p.TenantId == loginResult.Tenant.Id);
            await SettingManager.ChangeSettingForUserAsync(loginResult.User.Id, MySettingProvider.CurrentOrganizationUnitId, (OUList != null ? OUList.OrganizationUnitId.ToString() : "-1"));

            if (string.IsNullOrWhiteSpace(returnUrl))
            {
                returnUrl = Request.ApplicationPath;
            }

            if (!string.IsNullOrWhiteSpace(returnUrlHash))
            {
                returnUrl = returnUrl + returnUrlHash;
            }

            return Json(new MvcAjaxResponse { TargetUrl = returnUrl });
        }

but OUList variable is always empty :shock:


1 Answer(s)
  • User Avatar
    0
    hikalkan created
    Support Team

    Hi,

    This code:

    var OUList = _userOrganizationUnitRepository.FirstOrDefault(p => p.UserId == loginResult.User.Id && p.TenantId == loginResult.Tenant.Id);

    Works for current tenant (it's null while logging in). So, use data filters to disable IMayHaveTenant filter or set tenantid filter parameter for this query. You can see documentation for data filters: <a class="postlink" href="http://www.aspnetboilerplate.com/Pages/Documents/Data-Filters#DocSetFilterParams">http://www.aspnetboilerplate.com/Pages/ ... lterParams</a> You can also use SetTenantId if you upgraded to v0.9. Notice that, your Login method should be UnitOfWork (Add UnitOfWork attribute to method and make method as virtual) in order to use filters.