Exemplo n.º 1
0
        public async Task <ActionResult> RolesEdit_Partial(EditModel model)
        {
            using (RoleDefinitionDataProvider dataProvider = new RoleDefinitionDataProvider()) {
                string         originalRole = model.OriginalName;
                RoleDefinition role         = await dataProvider.GetItemAsync(originalRole);// get the original item

                if (role == null)
                {
                    throw new Error(this.__ResStr("alreadyDeleted", "The role named \"{0}\" has been removed and can no longer be updated.", originalRole));
                }

                if (!ModelState.IsValid)
                {
                    return(PartialView(model));
                }

                role = model.GetData(role); // merge new data into original
                model.SetData(role);        // and all the data back into model for final display

                switch (await dataProvider.UpdateItemAsync(originalRole, role))
                {
                default:
                case UpdateStatusEnum.RecordDeleted:
                    throw new Error(this.__ResStr("alreadyDeleted", "The role named \"{0}\" has been removed and can no longer be updated.", originalRole));

                case UpdateStatusEnum.NewKeyExists:
                    ModelState.AddModelError(nameof(model.Name), this.__ResStr("alreadyExists", "A role named \"{0}\" already exists.", model.Name));
                    return(PartialView(model));

                case UpdateStatusEnum.OK:
                    break;
                }
                return(FormProcessed(model, this.__ResStr("okSaved", "Role \"{0}\" saved", role.Name), OnPopupClose: OnPopupCloseEnum.ReloadModule));
            }
        }
Exemplo n.º 2
0
        //~RoleStore() { Dispose(false); }

        // IRoleStore
        // IRoleStore
        // IRoleStore

        public async Task <IdentityResult> CreateAsync(RoleDefinition role, CancellationToken cancellationToken)
        {
            using (RoleDefinitionDataProvider dataProvider = new RoleDefinitionDataProvider(this.CurrentSiteIdentity)) {
                await dataProvider.AddItemAsync(role);
            }
            return(IdentityResult.Success);
        }
Exemplo n.º 3
0
 public async Task <IdentityResult> DeleteAsync(RoleDefinition role)
 {
     using (RoleDefinitionDataProvider dataProvider = new RoleDefinitionDataProvider(this.CurrentSiteIdentity)) {
         await dataProvider.RemoveItemAsync(role.Name);
     }
     return(IdentityResult.Success);
 }
Exemplo n.º 4
0
        public async Task <List <SelectionItem <string> > > GetUserRolesAsync(int userId)
        {
            using (UserDefinitionDataProvider userDP = new UserDefinitionDataProvider()) {
                List <SelectionItem <string> > list = new List <SelectionItem <string> >();
                UserDefinition user = await userDP.GetItemByUserIdAsync(userId);

                if (user != null)
                {
                    using (RoleDefinitionDataProvider roleDP = new RoleDefinitionDataProvider()) {
                        List <RoleDefinition> allRoles = roleDP.GetAllRoles();
                        foreach (Role r in user.RolesList)
                        {
                            RoleDefinition roleDef = (from a in allRoles where a.RoleId == r.RoleId select a).FirstOrDefault();
                            if (roleDef != null)
                            {
                                list.Add(new SelectionItem <string> {
                                    Text = roleDef.Name, Tooltip = roleDef.Description, Value = roleDef.Id
                                });
                            }
                        }
                    }
                }
                return(list);
            }
        }
 private void CleanupUsersAndRoles(Authorization data)
 {
     // remove superuser from allowed roles as he/she's in there by default
     using (RoleDefinitionDataProvider roleDP = new RoleDefinitionDataProvider(SiteIdentity)) {
         if (data.AllowedRoles == null)
         {
             data.AllowedRoles = new SerializableList <Role>();
         }
         else
         {
             data.AllowedRoles = new SerializableList <Role>((from r in data.AllowedRoles where r.RoleId != RoleDefinitionDataProvider.SuperUserId select r).ToList());
         }
         if (data.AllowedUsers != null && data.AllowedUsers.Count > Info.MAX_USERS_IN_RESOURCE)
         {
             throw new Error(this.__ResStr("maxUsers", "Only up to {0} users can be authorized for a resource. Consider creating a role instead, and add all users to that role. There is no limit to the number of users that can be added to a role."));
         }
         // remove superuser from allowed users as he/she's allowed by default
         if (data.AllowedUsers == null)
         {
             data.AllowedUsers = new SerializableList <User>();
         }
         else
         {
             data.AllowedUsers = new SerializableList <User>((from u in data.AllowedUsers where u.UserId != SuperuserDefinitionDataProvider.SuperUserId select u).ToList());
         }
     }
 }
Exemplo n.º 6
0
        public async Task RemoveRoleFromUserAsync(int userId, string roleName)
        {
            int roleId;

            // get the role id for roleName
            using (RoleDefinitionDataProvider roleDP = new RoleDefinitionDataProvider()) {
                RoleDefinition role = await roleDP.GetItemAsync(roleName);

                if (role == null)
                {
                    throw new InternalError("Unexpected error in AddRoleToUser - expected role {0} not found", roleName);
                }
                roleId = role.RoleId;
            }
            // remove the role from the user
            using (UserDefinitionDataProvider userDP = new UserDefinitionDataProvider()) {
                UserDefinition user = await userDP.GetItemByUserIdAsync(userId);

                if (user != null)
                {
                    Role role = (from Role r in user.RolesList where r.RoleId == roleId select r).FirstOrDefault();
                    if (role != null)
                    {
                        user.RolesList.Remove(role);
                        UpdateStatusEnum status = await userDP.UpdateItemAsync(user);

                        if (status != UpdateStatusEnum.OK)
                        {
                            throw new InternalError("Unexpected status {0} updating user account in RemoveRoleFromUser", status);
                        }
                    }
                }
            }
        }
        public async Task <DataProviderGetRecords <Authorization> > GetItemsAsync(int skip, int take, List <DataProviderSortInfo> sort, List <DataProviderFilterInfo> filters)
        {
            // get all defined authorizations
            DataProviderGetRecords <Authorization> list = await DataProvider.GetRecordsAsync(0, 0, null, filters);

            foreach (Authorization l in list.Data)
            {
                l.CanDelete = true;
            }
            // get all AuthorizationResource items
            using (RoleDefinitionDataProvider roleDP = new RoleDefinitionDataProvider(SiteIdentity)) {
                AuthorizationResourceDataProvider          authResDP = new AuthorizationResourceDataProvider();
                DataProviderGetRecords <ResourceAttribute> resAttrs  = authResDP.GetItems();
                // merge in AuthorizationResource items
                foreach (ResourceAttribute resAttr in resAttrs.Data)
                {
                    Authorization auth = (from l in list.Data where l.ResourceName == resAttr.Name select l).FirstOrDefault();
                    if (auth == null)
                    {
                        auth = GetFromAuthorizationResource(roleDP, resAttr);
                        list.Data.Add(auth);
                    }
                }
            }
            return(DataProviderImpl <Authorization> .GetRecords(list.Data, skip, take, sort, filters));
        }
Exemplo n.º 8
0
 /// <summary>
 /// Used from site template to add a site admin role
 /// </summary>
 public void AddAdministratorRole()
 {
     YetaWFManager.Syncify(async() => {  // super-rare so sync is OK
         using (RoleDefinitionDataProvider dataProvider = new RoleDefinitionDataProvider()) {
             await dataProvider.AddAdministratorRoleAsync();
         }
     });
 }
Exemplo n.º 9
0
        public async Task <ActionResult> Remove(string name)
        {
            if (string.IsNullOrWhiteSpace(name))
            {
                throw new Error(this.__ResStr("noItem", "No role name specified"));
            }
            using (RoleDefinitionDataProvider dataProvider = new RoleDefinitionDataProvider()) {
                await dataProvider.RemoveItemAsync(name);

                return(Reload(null, Reload: ReloadEnum.ModuleParts));
            }
        }
 private void CleanupRoles(UserDefinition data)
 {
     if (data.RolesList == null)
     {
         data.RolesList = new SerializableList <Role>();
     }
     // remove User and Superuser from allowed roles as he/she's in there by default
     using (RoleDefinitionDataProvider roleDP = new RoleDefinitionDataProvider(SiteIdentity)) {
         int userRole      = roleDP.GetUserRoleId();
         int superuserRole = SuperuserDefinitionDataProvider.SuperUserId;
         data.RolesList = new SerializableList <Role>((from r in data.RolesList where r.RoleId != userRole && r.RoleId != superuserRole select r).ToList());
     }
 }
Exemplo n.º 11
0
 public async Task <ActionResult> RolesAdd_Partial(AddModel model)
 {
     if (!ModelState.IsValid)
     {
         return(PartialView(model));
     }
     using (RoleDefinitionDataProvider dataProvider = new RoleDefinitionDataProvider()) {
         if (!await dataProvider.AddItemAsync(model.GetData()))
         {
             throw new Error(this.__ResStr("alreadyExists", "A role named \"{0}\" already exists."), model.Name);
         }
         return(FormProcessed(model, this.__ResStr("okSaved", "New role \"{0}\" saved", model.Name), OnPopupClose: OnPopupCloseEnum.ReloadModule));
     }
 }
Exemplo n.º 12
0
        public Task <string> RenderAsync(int model)
        {
            YTagBuilder tag = new YTagBuilder("span");

            FieldSetup(tag, FieldType.Anonymous);

            using (RoleDefinitionDataProvider dataProvider = new RoleDefinitionDataProvider()) {
                RoleDefinition role = dataProvider.GetRoleById(model);
                tag.SetInnerText(role.Name);
                tag.Attributes.Add(Basics.CssTooltipSpan, role.Description);
            }

            return(Task.FromResult(tag.ToString(YTagRenderMode.Normal)));
        }
Exemplo n.º 13
0
        public async Task <ActionResult> RolesDisplay(string name)
        {
            using (RoleDefinitionDataProvider dataProvider = new RoleDefinitionDataProvider()) {
                RoleDefinition data = await dataProvider.GetItemAsync(name);

                if (data == null)
                {
                    throw new Error(this.__ResStr("notFound", "Role \"{0}\" not found."), name);
                }
                DisplayModel model = new DisplayModel();
                model.SetData(data);
                Module.Title = this.__ResStr("modDisplayTitle", "{0} Role", name);
                return(View(model));
            }
        }
        // API
        // API
        // API

        public async Task <Authorization> GetItemAsync(string resourceName)
        {
            Authorization data = await DataProvider.GetAsync(resourceName);

            if (data != null)
            {
                data.CanDelete = true;
                return(data);
            }
            AuthorizationResourceDataProvider authResDP = new AuthorizationResourceDataProvider();

            using (RoleDefinitionDataProvider roleDP = new RoleDefinitionDataProvider(SiteIdentity)) {
                return(GetFromAuthorizationResource(roleDP, authResDP.GetItem(resourceName)));
            }
        }
 private UserDefinition GetUser(string name)
 {
     using (RoleDefinitionDataProvider roleProvider = new RoleDefinitionDataProvider(SiteIdentity)) {
         int roleId = roleProvider.GetUserRoleId();
         return(new UserDefinition()
         {
             UserName = name,
             RolesList = new SerializableList <Role>(),
             UserStatus = UserStatusEnum.Approved,
             Comment = this.__ResStr("user", "A sample user"),
             Email = name + "@" + Manager.CurrentSite.SiteDomain,
             RegistrationIP = "127.0.0.1",
         });
     }
 }
Exemplo n.º 16
0
        private GridDefinition GetGridModel()
        {
            return(new GridDefinition {
                ModuleGuid = Module.ModuleGuid,
                SettingsModuleGuid = Module.PermanentGuid,
                RecordType = typeof(BrowseItem),
                AjaxUrl = GetActionUrl(nameof(RolesBrowse_GridData)),
                DirectDataAsync = async(int skip, int take, List <DataProviderSortInfo> sort, List <DataProviderFilterInfo> filters) => {
                    using (RoleDefinitionDataProvider dataProvider = new RoleDefinitionDataProvider()) {
                        DataProviderGetRecords <RoleDefinition> browseItems = await dataProvider.GetItemsAsync(skip, take, sort, filters);

                        return new DataSourceResult {
                            Data = (from s in browseItems.Data select new BrowseItem(Module, s)).ToList <object>(),
                            Total = browseItems.Total
                        };
                    }
                },
            });
        }
Exemplo n.º 17
0
        public async Task <IdentityResult> UpdateAsync(RoleDefinition role, CancellationToken cancellationToken)
        {
            RoleDefinitionDataProvider dataProvider = new RoleDefinitionDataProvider(this.CurrentSiteIdentity);
            UpdateStatusEnum           status       = await dataProvider.UpdateItemAsync(role);

            switch (status)
            {
            default:
            case UpdateStatusEnum.RecordDeleted:
                throw new Error(this.__ResStr("alreadyDeleted", "The role named \"{0}\" has been removed and can no longer be updated.", role.Name));

            case UpdateStatusEnum.NewKeyExists:
                throw new Error(this.__ResStr("alreadyExists", "A role named \"{0}\" already exists.", role.Name));

            case UpdateStatusEnum.OK:
                break;
            }
            return(IdentityResult.Success);
        }
        private Authorization GetFromAuthorizationResource(RoleDefinitionDataProvider roleDP, ResourceAttribute resAttr)
        {
            Authorization auth = new Authorization()
            {
                ResourceName        = resAttr.Name,
                ResourceDescription = resAttr.Description,
            };

            auth.AllowedRoles.Add(new Role()
            {
                RoleId = RoleDefinitionDataProvider.SuperUserId
            });
            if (resAttr.Anonymous)
            {
                auth.AllowedRoles.Add(new Role()
                {
                    RoleId = roleDP.GetAnonymousRoleId()
                });
            }
            if (resAttr.User)
            {
                auth.AllowedRoles.Add(new Role()
                {
                    RoleId = roleDP.GetUserRoleId()
                });
            }
            if (resAttr.Editor)
            {
                auth.AllowedRoles.Add(new Role()
                {
                    RoleId = roleDP.GetEditorRoleId()
                });
            }
            if (resAttr.Administrator)
            {
                auth.AllowedRoles.Add(new Role()
                {
                    RoleId = roleDP.GetAdministratorRoleId()
                });
            }
            return(auth);
        }
Exemplo n.º 19
0
 public Task <string> GetUserPostLoginUrlAsync(List <int> userRoles)
 {
     if (userRoles != null)
     {
         foreach (int roleId in userRoles)
         {
             using (RoleDefinitionDataProvider roleDP = new RoleDefinitionDataProvider()) {
                 RoleDefinition role = roleDP.GetRoleById(roleId);
                 if (role != null)
                 {
                     if (!string.IsNullOrWhiteSpace(role.PostLoginUrl))
                     {
                         return(Task.FromResult(role.PostLoginUrl));
                     }
                 }
             }
         }
     }
     return(Task.FromResult <string>(null));
 }
Exemplo n.º 20
0
 public List <RoleInfo> GetDefaultRoleList(bool Exclude2FA = false)
 {
     using (RoleDefinitionDataProvider roleDP = new RoleDefinitionDataProvider()) {
         List <RoleDefinition> allRoles = roleDP.GetAllRoles();
         List <RoleInfo>       roles;
         if (Exclude2FA)
         {
             roles = (from r in allRoles
                      where r.RoleId != roleDP.GetUser2FARoleId()
                      select new RoleInfo {
                 RoleId = r.RoleId, Name = r.Name, Description = r.Description, PostLoginUrl = r.PostLoginUrl
             }).ToList();
         }
         else
         {
             roles = (from r in allRoles select new RoleInfo {
                 RoleId = r.RoleId, Name = r.Name, Description = r.Description, PostLoginUrl = r.PostLoginUrl
             }).ToList();
         }
         return(roles);
     }
 }
Exemplo n.º 21
0
        private async Task <UserDefinition> GetSuperuserUserAsync()
        {
            using (RoleDefinitionDataProvider roleProvider = new RoleDefinitionDataProvider(SiteIdentity)) {
                RoleDefinition role = await roleProvider.GetItemAsync(Globals.Role_Superuser);

                return(new UserDefinition()
                {
                    UserName = SuperUserName,
                    RolesList = new SerializableList <Role>()
                    {
                        new Role()
                        {
                            RoleId = role.RoleId
                        }
                    },
                    UserStatus = UserStatusEnum.Approved,
                    Comment = this.__ResStr("super", "The superuser for all sites"),
                    Email = SuperUserName + "@" + Manager.CurrentSite.SiteDomain,
                    RegistrationIP = "127.0.0.1",
                });
            }
        }
Exemplo n.º 22
0
        public async Task AddRoleToUserAsync(int userId, string roleName)
        {
            int roleId;

            // get the role id for roleName
            using (RoleDefinitionDataProvider roleDP = new RoleDefinitionDataProvider()) {
                RoleDefinition role = await roleDP.GetItemAsync(roleName);

                if (role == null)
                {
                    throw new InternalError("Unexpected error in AddRoleToUser - expected role {0} not found", roleName);
                }
                roleId = role.RoleId;
            }
            // add the role to the user
            using (UserDefinitionDataProvider userDP = new UserDefinitionDataProvider()) {
                UserDefinition user = await userDP.GetItemByUserIdAsync(userId);

                if (user == null)
                {
                    throw new InternalError("Unexpected error in AddRoleToUser - no user found");
                }
                Role role = new Role {
                    RoleId = roleId
                };
                if (!user.RolesList.Contains(role, new RoleComparer()))
                {
                    user.RolesList.Add(role);
                    UpdateStatusEnum status = await userDP.UpdateItemAsync(user);

                    if (status != UpdateStatusEnum.OK)
                    {
                        throw new InternalError("Unexpected status {0} updating user account in AddRoleToUser", status);
                    }
                }
            }
        }
Exemplo n.º 23
0
        public async Task <bool> IsResourceAuthorizedAsync(string resourceName)
        {
            // we need to check if this resource is protected

            if (string.IsNullOrEmpty(resourceName))
            {
                throw new InternalError("Missing resource name");
            }

            if (IsBackDoorWideOpen())
            {
                return(true);
            }
            if (YetaWFManager.IsDemo || Manager.IsDemoUser)
            {
                return(true);
            }

            // check if this is the superuser
            if (Manager.HasSuperUserRole)
            {
                return(true);
            }

            using (AuthorizationDataProvider authDP = new AuthorizationDataProvider()) {
                Authorization auth = await authDP.GetItemAsync(resourceName);

                if (auth == null)
                {
                    Logging.AddLog("Resource {0} doesn't exist", resourceName);
#if DEBUG
                    throw new InternalError("Resource {0} doesn't exist", resourceName);
#else
                    return(false);// not authorized, there is no such resource
#endif
                }
                RoleComparer roleComp = new RoleComparer();
                using (RoleDefinitionDataProvider roleDP = new RoleDefinitionDataProvider()) {
                    if (!Manager.HaveUser)
                    {
                        // check if anonymous user allowed
                        if (auth.AllowedRoles.Contains(new Role {
                            RoleId = roleDP.GetAnonymousRoleId()
                        }, roleComp))
                        {
                            return(true);
                        }
                        return(false);
                    }
                    // authenticated user
                    // check if any authenticated user allowed
                    if (auth.AllowedRoles.Contains(new Role {
                        RoleId = roleDP.GetUserRoleId()
                    }, roleComp))
                    {
                        return(true);
                    }
                }

                string         userName = Manager.UserName;
                UserDefinition user     = (UserDefinition)Manager.UserObject;// get the saved user
                if (user == null)
                {
                    throw new InternalError("UserObject missing for authenticated user");
                }

                // check if this user is allowed
                if (auth.AllowedUsers.Contains(new User {
                    UserId = user.UserId
                }, new UserComparer()))
                {
                    return(true);
                }

                // check if this user is in a permitted role
                foreach (Role loginRole in user.RolesList)
                {
                    if (auth.AllowedRoles.Contains(new Role {
                        RoleId = loginRole.RoleId
                    }, roleComp))
                    {
                        return(true);
                    }
                }
            }            // simply not authorized
            return(false);
        }
Exemplo n.º 24
0
 public async Task <RoleDefinition> FindByNameAsync(string roleName, CancellationToken cancellationToken)
 {
     using (RoleDefinitionDataProvider dataProvider = new RoleDefinitionDataProvider(this.CurrentSiteIdentity)) {
         return(await dataProvider.GetItemAsync(roleName));
     }
 }
Exemplo n.º 25
0
 public async Task RemoveRoleAsync(string roleName)
 {
     using (RoleDefinitionDataProvider roleDP = new RoleDefinitionDataProvider()) {
         await roleDP.RemoveItemAsync(roleName);
     }
 }
Exemplo n.º 26
0
 public async Task AddRoleWithUrlAsync(string roleName, string description, string postLoginUrl)
 {
     using (RoleDefinitionDataProvider roleDP = new RoleDefinitionDataProvider()) {
         await roleDP.AddItemAsync(new RoleDefinition { Name = roleName, Description = description, PostLoginUrl = postLoginUrl });
     }
 }
Exemplo n.º 27
0
 public int GetRoleId(string name)
 {
     using (RoleDefinitionDataProvider roleDP = new RoleDefinitionDataProvider()) {
         return(roleDP.GetRoleId(name));
     }
 }
Exemplo n.º 28
0
 public int GetAnonymousRoleId()
 {
     using (RoleDefinitionDataProvider roleDP = new RoleDefinitionDataProvider()) {
         return(roleDP.GetAnonymousRoleId());
     }
 }
Exemplo n.º 29
0
 public int GetAdministratorRoleId()
 {
     using (RoleDefinitionDataProvider roleDP = new RoleDefinitionDataProvider()) {
         return(roleDP.GetAdministratorRoleId());
     }
 }
Exemplo n.º 30
0
 public int GetUser2FARoleId()
 {
     using (RoleDefinitionDataProvider roleDP = new RoleDefinitionDataProvider()) {
         return(roleDP.GetUser2FARoleId());
     }
 }